From 4ebc73199bcd4b23739a2e1d22c372e8081310c5 Mon Sep 17 00:00:00 2001 From: 王恒 <318726284@qq.com> Date: 星期五, 18 七月 2025 17:55:29 +0800 Subject: [PATCH] '完善筛选项' --- src/views/system/manage/index.vue | 487 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 487 insertions(+), 0 deletions(-) diff --git a/src/views/system/manage/index.vue b/src/views/system/manage/index.vue new file mode 100644 index 0000000..95ef6f9 --- /dev/null +++ b/src/views/system/manage/index.vue @@ -0,0 +1,487 @@ +<template> + <div class="app-container"> + <el-form :model="queryParams" ref="queryRef" class="evenly-distributed-labels" :inline="true" v-show="showSearch" + label-width="80px" label-position="left"> + <el-form-item label="璁″垝鍚嶇О" prop="companyName"> + <el-input v-model="queryParams.planName" placeholder="璇疯緭鍏ヨ鍒掑悕绉�" clearable style="width: 200px" + @keyup.enter="handleQuery" /> + </el-form-item> + <el-form-item label="璁″垝缂栧彿" prop="companyCode"> + <el-input v-model="queryParams.planNo" placeholder="璇疯緭鍏ヨ鍒掔紪鍙�" clearable style="width: 200px" + @keyup.enter="handleQuery" /> + </el-form-item> + <el-form-item label="鎵ф硶鍗曚綅" prop="executiveSection"> + <el-input v-model="queryParams.executiveSection" placeholder="璇疯緭鍏ユ墽娉曞崟浣�" clearable style="width: 200px" + @keyup.enter="handleQuery" /> + </el-form-item> + <el-form-item label="鎵ф硶鏃堕棿" style="width: 290px"> + <el-date-picker v-model="dateRange" value-format="YYYY-MM" type="monthrange" range-separator="-" + start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" @change="changeDateHandler"></el-date-picker> + </el-form-item> + <el-form-item> + <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button> + <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button> + </el-form-item> + </el-form> + + <el-row :gutter="10" class="mb8"> + <el-col :span="1.5"> + <el-button type="primary" plain icon="Plus" @click="handleAdd()" v-hasPermi="['system:dept:add']">鏂板</el-button> + </el-col> + <el-col :span="1.5"> + <el-button type="warning" plain icon="Upload" @click="handleImport" + v-hasPermi="['system:user:import']">瀵煎叆</el-button> + </el-col> + <el-col :span="1.5"> + <el-button type="success" plain icon="Download" @click="downLoadCode">瀵煎嚭</el-button> + </el-col> + <el-col :span="1.5"> + <el-button type="primary" plain icon="View" @click="downLoadCode">鍙戣捣缁煎悎鏌ヤ竴娆�</el-button> + </el-col> + </el-row> + + <!-- @selection-change="handleSelectionChange" --> + <el-table v-if="refreshTable" v-loading="loading" :data="deptList" row-key="companyId" + :default-expand-all="isExpandAll" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"> + <!-- <el-table-column type="selection" width="55" align="center" /> --> + <el-table-column prop="planNo" label="搴忓彿" width="55"> + <template #default="scope">{{ scope.$index + 1 }}</template> + </el-table-column> + <el-table-column prop="planNo" label="璁″垝缂栧彿" width="180"></el-table-column> + <el-table-column prop="planName" label="璁″垝鍚嶇О" width="180"></el-table-column> + <el-table-column prop="makeOrgName" label="鍒跺畾鏈烘瀯" width="180"></el-table-column> + <el-table-column prop="checkdObject" label="琚鏌ュ璞�" width="180"></el-table-column> + <el-table-column prop="unifiedSocialCreditCode" label="缁熶竴绀句細淇$敤浠g爜" width="180"></el-table-column> + <el-table-column prop="industry" label="鎵�灞炶涓�" width="180"></el-table-column> + <el-table-column prop="checkdType" label="妫�鏌ユ柟寮�" width="180"></el-table-column> + <el-table-column prop="checkdContent" label="妫�鏌ュ唴瀹�" width="180"></el-table-column> + <el-table-column prop="executiveSection" label="鎵ц绉戝" width="180"></el-table-column> + <el-table-column prop="planFrequency" label="璁″垝棰戞" width="180"></el-table-column> + <el-table-column prop="planMonth" label="璁″垝鏈堜唤" width="180"></el-table-column> + <el-table-column prop="planStatus" label="鐘舵��" width="180"></el-table-column> + <el-table-column label="鎿嶄綔" align="center" fixed="right" class-name="small-padding fixed-width" width="180"> + <template #default="scope"> + <el-link type="info" @click="handleView(scope.row)">鏌ョ湅</el-link> + <el-divider direction="vertical" /> + <el-link type="primary" @click="handleAdd(scope.row)">缂栬緫</el-link> + <el-divider direction="vertical" /> + <el-link type="error" @click="handleDelete(scope.row)">鍒犻櫎</el-link> + </template> + </el-table-column> + </el-table> + <pagination v-show="queryParams.total > 0" :total="queryParams.total" v-model:page="queryParams.pageNum" + v-model:limit="queryParams.pageSize" @pagination="getList" /> + + <!-- 娣诲姞鎴栦慨鏀瑰璇濇 --> + <el-dialog :title="title" v-model="open" width="700px" append-to-body> + <el-form ref="deptRef" :model="form" :rules="rules" label-width="140px"> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="璁″垝缂栧彿" prop="planNo"> + <el-input v-model="form.planNo" placeholder="璇疯緭鍏ヨ鍒掑悕绉�" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="璁″垝鍚嶇О" prop="planName"> + <el-input v-model="form.planName" placeholder="璇疯緭鍏ヨ鍒掑悕绉�" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鍒跺畾璁″垝鐨勬満鏋�" prop="makeOrgName"> + <el-input v-model="form.makeOrgName" placeholder="璇疯緭鍏ュ埗瀹氳鍒掔殑鏈烘瀯" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="琚鏌ョ殑瀵硅薄" prop="checkdObject"> + <el-input v-model="form.checkdObject" placeholder="璇疯緭鍏ヨ妫�鏌ョ殑瀵硅薄" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="缁熶竴绀句細淇$敤浠g爜" prop="unifiedSocialCreditCode"> + <el-input v-model="form.unifiedSocialCreditCode" placeholder="璇疯緭鍏ョ粺涓�绀句細淇$敤浠g爜" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鎵�灞炶涓�" prop="industry"> + <el-input v-model="form.industry" placeholder="璇疯緭鍏ユ墍灞炶涓�" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="妫�鏌ユ柟寮�" prop="executiveSection"> + <el-input v-model="form.checkdType" placeholder="璇疯緭鍏ユ鏌ユ柟寮�" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鎵ц绉戝" prop="executiveSection"> + <el-input v-model="form.executiveSection" placeholder="璇疯緭鍏ユ墽琛岀瀹�" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="24"> + <el-form-item label="妫�鏌ュ唴瀹�" prop="checkdContent"> + <el-input v-model="form.checkdContent" type="textarea" placeholder="璇疯緭鍏ユ鏌ュ唴瀹�" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="璁″垝鏈堜唤" prop="planMonth"> + <el-date-picker v-model="form.planMonth" type="month" format="YYYY-MM" value-format="YYYY-MM" + placeholder="璇烽�夋嫨璁″垝鏈堜唤" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="璁″垝棰戠巼" prop="planFrequency"> + <el-input v-model="form.planFrequency" placeholder="璇疯緭鍏ヨ鍒掗鐜�" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鐘舵��" prop="planStatus"> + <el-input v-model="form.planStatus" placeholder="璇疯緭鍏ョ姸鎬�" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <div class="dialog-footer"> + <el-button type="primary" @click="submitForm">纭� 瀹�</el-button> + <el-button @click="cancel">鍙� 娑�</el-button> + </div> + </template> + </el-dialog> + + <!-- 璁″垝瀵煎叆瀵硅瘽妗� --> + <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body> + <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" + :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" + :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag> + <el-icon class="el-icon--upload"><upload-filled /></el-icon> + <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div> + <template #tip> + <div class="el-upload__tip text-center"> + <div class="el-upload__tip"><el-checkbox v-model="upload.updateSupport" />鏄惁鏇存柊宸茬粡瀛樺湪鐨勮鍒掓暟鎹�</div> + <span>浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢銆�</span> + <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" + @click="importTemplate">涓嬭浇妯℃澘</el-link> + </div> + </template> + </el-upload> + <template #footer> + <div class="dialog-footer"> + <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button> + <el-button @click="upload.open = false">鍙� 娑�</el-button> + </div> + </template> + </el-dialog> + + <!-- 璁″垝璇︾粏 --> + <el-dialog title="璁″垝璇︽儏" v-model="planOpen" width="700px" append-to-body> + <el-form label-width="140px"> + <el-row> + <el-col :span="12"> + <el-form-item label="璁″垝缂栧彿锛�">{{ planDetail.planNo }}</el-form-item> + <el-form-item label="璁″垝鍚嶇О锛�">{{ planDetail.planName }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍒跺畾璁″垝鐨勬満鏋勶細">{{ planDetail.makeOrgName }}</el-form-item> + <el-form-item label="琚鏌ョ殑瀵硅薄锛�">{{ planDetail.checkdObject }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="缁熶竴绀句細淇$敤浠g爜锛�">{{ planDetail.unifiedSocialCreditCode }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鎵�灞炶涓氾細">{{ planDetail.industry }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="妫�鏌ユ柟寮忥細">{{ planDetail.checkdType }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鎵ц绉戝锛�">{{ planDetail.executiveSection }}</el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="妫�鏌ュ唴瀹癸細">{{ planDetail.checkdContent }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="璁″垝鏈堜唤锛�">{{ planDetail.planMonth }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="璁″垝棰戠巼锛�">{{ planDetail.planFrequency }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鐘舵�侊細">{{ planDetail.planStatus }}</el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <div class="dialog-footer"> + <el-button @click="planOpen = false; planDetail = {}">鍏� 闂�</el-button> + </div> + </template> + </el-dialog> + </div> +</template> + +<script setup name="Dept"> +import { getToken } from "@/utils/auth"; +import { listManage, addManage, getManage, updateManage, delManage, exportTemplate, exportManage } from "@/api/system/manage"; + +import { computed } from "vue"; +import useSettingsStore from "@/store/modules/settings"; +// import { download } from '@/utils/request'; // 涓嬭浇鏂囦欢 +import { download as downloadHttp } from '@/utils/request' +const { proxy } = getCurrentInstance(); +const { sys_normal_disable } = proxy.useDict("sys_normal_disable"); +const deptList = ref([]); +const open = ref(false); +const loading = ref(true); +const showSearch = ref(true); +const title = ref(""); +const isExpandAll = ref(false); +const refreshTable = ref(true); +const planOpen = ref(false); +const planDetail = ref({}); +const dateRange = ref([]); +const data = reactive({ + form: {}, + queryParams: { + planNo: '', + planName: '', + executiveSection: '', + value1: '', + pageNum: 1, + pageSize: 10, + total: 1 + }, + rules: { + planNo: [{ required: true, message: "璁″垝缂栧彿涓嶈兘涓虹┖", trigger: "blur" }], + planName: [{ required: true, message: "璁″垝鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }], + makeOrgName: [{ required: true, message: "鍒跺畾璁″垝鐨勬満鏋勪笉鑳戒负绌�", trigger: "blur" }], + checkdObject: [{ required: true, message: "琚鏌ュ璞′笉鑳戒负绌�", trigger: "blur" }], + unifiedSocialCreditCode: [{ required: true, message: "缁熶竴绀句細淇$敤浠g爜涓嶈兘涓虹┖", trigger: "blur" }], + industry: [{ required: true, message: "鎵�灞炶涓氫笉鑳戒负绌�", trigger: "blur" }], + checkdContent: [{ required: true, message: "妫�鏌ュ唴瀹逛笉鑳戒负绌�", trigger: "blur" }], + executiveSection: [{ required: true, message: "鎵ц绉戝涓嶈兘涓虹┖", trigger: "blur" }], + planFrequency: [{ required: true, message: "璁″垝棰戞涓嶈兘涓虹┖", trigger: "blur" }], + planMonth: [{ required: true, message: "璁″垝鏈堜唤涓嶈兘涓虹┖", trigger: "blur" }], + checkdType: [{ required: true, message: "妫�鏌ユ柟寮忎笉鑳戒负绌�", trigger: "blur" }], + planStatus: [{ required: true, message: "鐘舵�佷笉鑳戒负绌�", trigger: "blur" }], + }, +}); + +// 鏈堜唤閫夋嫨 +const changeDateHandler = (value) => { + data.queryParams.planMonthStart = value[0] + data.queryParams.planMonthEnd = value[1] +} + +/*** 璁″垝瀵煎叆鍙傛暟 */ +const upload = reactive({ + // 鏄惁鏄剧ず寮瑰嚭灞傦紙鐢ㄦ埛瀵煎叆锛� + open: false, + // 寮瑰嚭灞傛爣棰橈紙鐢ㄦ埛瀵煎叆锛� + title: "", + // 鏄惁绂佺敤涓婁紶 + isUploading: false, + // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹� + updateSupport: 0, + // 璁剧疆涓婁紶鐨勮姹傚ご閮� + headers: { Authorization: "Bearer " + getToken() }, + // 涓婁紶鐨勫湴鍧� + url: import.meta.env.VITE_APP_BASE_API + "/system/manage/importData", +}); +/**鏂囦欢涓婁紶涓鐞� */ +const handleFileUploadProgress = (event, file, fileList) => { + upload.isUploading = true; +}; +/** 鏂囦欢涓婁紶鎴愬姛澶勭悊 */ +const handleFileSuccess = (response, file, fileList) => { + upload.open = false; + upload.isUploading = false; + proxy.$refs["uploadRef"].handleRemove(file); + proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "瀵煎叆缁撴灉", { + dangerouslyUseHTMLString: true, + }); + getList(); +}; +const { queryParams, form, rules } = toRefs(data); +/** 鏌ヨ璁″垝鍒楄〃 */ +function getList() { + loading.value = true; + listManage(queryParams.value).then((response) => { + deptList.value = response.rows + data.queryParams.total = response.total + loading.value = false; + }); +} +/** 鍙栨秷鎸夐挳 */ +function cancel() { + open.value = false; + reset(); + getList(); +} +/** 琛ㄥ崟閲嶇疆 */ +function reset() { + form.value = { + planNo: '', // 璁″垝缂栧彿 + planName: '', // 璁″垝鍚嶇О + makeOrgName: '', // 鍒跺畾鏈烘瀯 + checkdObject: '', // 琚鏌ュ璞� + unifiedSocialCreditCode: '', // 缁熶竴绀句細淇$敤浠g爜 + industry: '', // 鎵�灞炶涓� + checkdContent: '', // 妫�鏌ュ唴瀹� + executiveSection: '', // 鎵ц绉戝 + planFrequency: '', // 璁″垝棰戞 + planMonth: '', // 璁″垝鏈堜唤 + checkdType: '', // 妫�鏌ユ柟寮� + planStatus: '', // 鐘舵�� + }; + proxy.resetForm("deptRef"); +} +const queryRef = ref() +/** 鎼滅储鎸夐挳鎿嶄綔 */ +function handleQuery() { + getList(); +} +/** 閲嶇疆鎸夐挳鎿嶄綔 */ +function resetQuery() { + queryRef.value.resetFields(); + dateRange.value = []; + queryParams.value = { + planNo: '', // 璁″垝缂栧彿 + planName: '', // 璁″垝鍚嶇О + executiveSection: '', // 鎵ф硶鍗曚綅 + planMonthStart: '', // 璁″垝寮�濮嬫湀浠� + planMonthEnd: '', // 璁″垝缁撴潫鏈堜唤 + } + handleQuery(); +} +function getDetails(id) { + getManage(id).then((response) => { + form.value = response.data; + open.value = true; + }); +} + +/** 璇︾粏鎸夐挳鎿嶄綔 */ +function handleView(row) { + planOpen.value = true; + planDetail.value = row + planOpen.value = true; +} + +/** 鏂板鎸夐挳鎿嶄綔 */ +function handleAdd(row) { + if (row) { + title.value = "缂栬緫璁″垝"; + getDetails(row.id) + } else { + // form.value = { + // companyStatus: 0 + // } + title.value = "娣诲姞璁″垝"; + open.value = true; + } +} + +/** 鎻愪氦鎸夐挳 */ +function submitForm() { + proxy.$refs["deptRef"].validate((valid) => { + if (valid) { + if (form.value.id != undefined) { + updateManage(form.value).then((response) => { + proxy.$modal.msgSuccess("淇敼鎴愬姛"); + open.value = false; + getList(); + }); + } else { + addManage(form.value).then((response) => { + proxy.$modal.msgSuccess("鏂板鎴愬姛"); + open.value = false; + getList(); + }); + } + } + }); +} +/** 鍒犻櫎鎸夐挳鎿嶄綔 */ +function handleDelete(row) { + proxy.$modal + .confirm('鏄惁纭鍒犻櫎璇ユ暟鎹�?') + .then(function () { + return delManage(row.id); + }) + .then(() => { + getList(); + proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛"); + }) + .catch(() => { }); +} + +/** 瀵煎叆鎸夐挳鎿嶄綔 */ +function handleImport() { + upload.title = "璁″垝瀵煎叆"; + upload.open = true; +} + +/** 鎻愪氦涓婁紶鏂囦欢 */ +function submitFileForm() { + proxy.$refs["uploadRef"].submit(); +} + +/** 涓嬭浇妯℃澘鎿嶄綔 */ +function importTemplate() { + exportTemplate().then(val => { + downloadHttp('/tool/file/download', { + fileName: val.msg, + delete: true + }, "璁″垝淇℃伅妯℃澘.xlsx") + }) +} + + +// let valueArr = [] +function downLoadCode() { + exportManage().then(val => { + downloadHttp('/tool/file/download', { + fileName: val.msg, + delete: true + }, "璁″垝淇℃伅.xlsx") + }) +} + + +// function handleSelectionChange(e) { +// valueArr = e.map(item => item.id) +// } + +getList(); +function selectableFun(e) { + console.log(e) +} +</script> + +<style scoped lang="scss"> +.evenly-distributed-labels { + :deep() { + .el-form-item__label { + position: relative; + /* 璁剧疆鐩稿瀹氫綅浣滀负鏄熷彿鐨勫畾浣嶅熀鍑� */ + text-align: justify; + text-align-last: justify; + /* 纭繚鏈�鍚庝竴琛屼篃涓ょ瀵归綈 */ + padding-left: 10px; + /* 涓烘槦鍙烽鐣欑┖闂� */ + display: inline-block; + } + } +} +</style> -- Gitblit v1.9.1