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