Browse Source

增加技术档案检索与导出

hsh 1 year ago
parent
commit
45a3c50893

+ 55 - 0
src/api/technology-archives/technology-archives.js

@@ -1,4 +1,6 @@
 import request from '../../utils/request'
+import {ElMessage, ElMessageBox} from "element-plus";
+import {downloadExcel} from "@/utils/excel";
 
 // 查询员工基本信息
 export function selectEmployeeInfo(text) {
@@ -433,4 +435,57 @@ export function delTechnologyArchives15ByCode(socialNo, id) {
         method: 'get',
         params: { socialNo, id },
     })
+}
+
+// 查询技术文档类型 (type: 1 Ⅰ档案   2 Ⅱ档案)
+export function selectTechnologyArchivesType(type) {
+    return request({
+        url: '/technologyArchives/selectTechnologyArchivesType',
+        method: 'get',
+        params: { type },
+    })
+}
+
+// 根据档案类型查询技术档案信息(textType:档案类型)
+export function selectTechnologyArchivesInfo(data) {
+    return request({
+        url: '/technologyArchives/selectTechnologyArchivesInfo',
+        method: 'post',
+        data,
+    })
+}
+
+// 根据档案类型导出技术档案信息
+export function exportTechnologyArchivesInfo(params) {
+    ElMessageBox.prompt('导出文件名字', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        inputPattern: /\S/,
+        inputErrorMessage: '文件名不能为空 (∩•̀ω•́)⊃-*⋆',
+    }).then(({ value }) => {
+        const data = {
+            param: params,
+            url: '/technologyArchives/exportTechnologyArchivesInfo',
+            fileName: value + '.xlsx',
+        }
+        setTimeout(() => {
+            downloadExcel(data)
+        }, 500)
+    }).catch((res) => {
+        if (res.code === '0') {
+            ElMessage({
+                message: res.message,
+                type: 'success',
+                duration: 2000,
+                showClose: true,
+            })
+        } else {
+            ElMessage({
+                message: res.message,
+                type: 'warning',
+                duration: 3000,
+                showClose: true,
+            })
+        }
+    })
 }

+ 133 - 0
src/views/technology-archives/TechnologyArchivesSearch.vue

@@ -0,0 +1,133 @@
+<template>
+  <div class="layout_container">
+    <header>
+      <el-input v-model="text" class="w-50 m-2" style="width: 360px" placeholder="请输入工号/身份证号" clearable>
+        <template #prepend>工号/身份证号 </template>
+      </el-input>
+      <el-select v-model="textType" placeholder="请选择文档类型" clearable style="width: 160px;margin-left: 3px">
+        <el-option v-for="item in typeList" :key="item.code" :label="item.name" :value="item.code" />
+      </el-select>
+      <el-button type="primary" icon="Search" @click="queryTechnologyArchivesInfo" style="margin-left: 10px">查询</el-button>
+      <el-button type="primary" icon="Download" @click="exportData" style="margin-left: 5px">导出</el-button>
+    </header>
+    <div class="layout_main">
+      <div class="layout_display_flex_y">
+        <div class="layout_flex_1-y layout_el-table">
+          <el-table :data="technologyArchivesData.slice(pageSize * (currentPage - 1), pageSize * currentPage)"
+            stripe border highlight-current-row row-key="childKey" style="width: 100%">
+            <el-table-column type="index" label="序号" align="center" fixed></el-table-column>
+            <el-table-column prop="id" label="id" v-if="false"></el-table-column>
+            <template v-for="col in displayData">
+              <el-table-column v-if="col.columns" :prop="col.name" :label="col.display"
+                :width="col.width" :align="col.align">
+                <template v-for="cell in col.columns">
+                  <el-table-column v-if="col.show" :prop="cell.name" :label="cell.display"
+                    :width="cell.width" :align="cell.align" show-overflow-tooltip>
+                  </el-table-column>
+                  <el-table-column v-else :prop="cell.name" :label="cell.display"
+                    :width="cell.width" :align="cell.align">
+                  </el-table-column>
+                </template>
+              </el-table-column>
+              <el-table-column v-else-if="col.show" :prop="col.name" :label="col.display" :width="col.width"
+                :align="col.align" show-overflow-tooltip>
+              </el-table-column>
+              <el-table-column v-else-if="col.name === 'xm'" :prop="col.name" :label="col.display" :width="col.width" :align="col.align" fixed>
+              </el-table-column>
+              <el-table-column v-else :prop="col.name" :label="col.display" :width="col.width" :align="col.align">
+              </el-table-column>
+            </template>
+          </el-table>
+        </div>
+        <div>
+          <el-pagination :current-page="currentPage" :page-size="pageSize" :page-sizes="[15, 30, 45, 60]"
+             :total="technologyArchivesData.length" layout="total, sizes, prev, pager, next, jumper" style="margin-top: 5px"
+             @size-change="handleSizeChange" @current-change="handleCurrentChange">
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script setup name="TechnologyArchivesSearch">
+import {nextTick, onMounted, ref} from "vue";
+import {ElMessage} from "element-plus";
+import {
+  exportTechnologyArchivesInfo,
+  selectTechnologyArchivesInfo,
+  selectTechnologyArchivesType
+} from "@/api/technology-archives/technology-archives";
+import {useUserStore} from "@/pinia/user-store";
+
+let param = ref({
+  textType: '',
+  text: '',
+  exportName: ''
+})
+const userInfo = useUserStore().userInfo
+const text = ref('')
+const textType = ref('tamain')
+const technologyArchivesData = ref([])
+const displayData = ref([])
+const pageSize = ref(30)
+const currentPage = ref(1)
+const handleSizeChange = (val) => {
+  pageSize.value = val
+}
+const handleCurrentChange = (val) => {
+  currentPage.value = val
+}
+onMounted(() => {
+  nextTick(() => {
+    queryAcType()
+    queryTechnologyArchivesInfo()
+  })
+})
+const typeList = ref([])
+const queryAcType = () => {
+  selectTechnologyArchivesType("1")
+    .then((res) => {
+      if(res){
+        typeList.value = res.taList
+      }
+    })
+}
+const queryTechnologyArchivesInfo = async () => {
+  if(!textType.value){
+    ElMessage({
+      type: "warning",
+      message: '请选择文档类型!',
+      duration: 2500,
+      showClose: true,
+    });
+    return
+  }
+  param.value.textType = textType.value
+  param.value.text = text.value
+  await selectTechnologyArchivesInfo(param.value)
+    .then((res) => {
+      if(res){
+        technologyArchivesData.value = res.taData
+        displayData.value = res.displayData
+      }
+    })
+}
+
+// 导出档案信息
+const exportData = () => {
+  if (technologyArchivesData.value.length <= 0) {
+    ElMessage({
+      message: '没有可以导出的数据!',
+      type: 'warning',
+      duration: 2500,
+      showClose: true,
+    })
+    return
+  }
+  let p = typeList.value.filter((item) => {
+    return item.code === textType.value
+  })
+  param.value.exportName = p[0].name
+  exportTechnologyArchivesInfo(param.value)
+}
+</script>