From cd95b584fe7da1ea63476871eabf512213a31e69 Mon Sep 17 00:00:00 2001
From: 王恒 <318726284@qq.com>
Date: 星期五, 18 七月 2025 17:42:03 +0800
Subject: [PATCH] '计划管理模块开发完成'

---
 src/views/system/manage/index.vue |  301 ++++++++++++++++++++++++++++++++++----------------
 1 files changed, 205 insertions(+), 96 deletions(-)

diff --git a/src/views/system/manage/index.vue b/src/views/system/manage/index.vue
index bffe1b9..f11806b 100644
--- a/src/views/system/manage/index.vue
+++ b/src/views/system/manage/index.vue
@@ -29,21 +29,24 @@
         <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="primary" plain icon="Upload" @click="exportExcel"
-          v-hasPermi="['system:dept:add']">瀵煎叆</el-button>
+        <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="primary" plain icon="Download" @click="downLoadCode">瀵煎嚭</el-button>
+        <el-button type="success" plain icon="Download" @click="downLoadCode">瀵煎嚭</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button type="primary" plain icon="Download" @click="downLoadCode">鍙戣捣缁煎悎鏌ヤ竴娆�</el-button>
+        <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' }"
-      @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
+      :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>
@@ -56,9 +59,9 @@
       <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="240">
+      <el-table-column label="鎿嶄綔" align="center" fixed="right" class-name="small-padding fixed-width" width="180">
         <template #default="scope">
-          <el-link type="info" @click="createQrcodeHandler(scope.row)">鏌ョ湅</el-link>
+          <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" />
@@ -74,32 +77,44 @@
       <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-row>
-        <el-row :gutter="20">
           <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="industry">
-              <el-input v-model="form.industry" placeholder="璇疯緭鍏ヨ涓�" />
+            <el-form-item label="妫�鏌ユ柟寮�" prop="executiveSection">
+              <el-input v-model="form.checkdType" placeholder="璇疯緭鍏ユ鏌ユ柟寮�" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -117,19 +132,24 @@
         </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="planMonth">
-              <el-input v-model="form.planMonth" placeholder="璇疯緭鍏ヨ鍒掓湀浠�" />
+            <el-form-item label="鐘舵��" prop="planStatus">
+              <el-input v-model="form.planStatus" placeholder="璇疯緭鍏ョ姸鎬�" />
             </el-form-item>
           </el-col>
         </el-row>
-        <!-- <el-form-item label="鐘舵��">
-          <el-switch v-model="form.companyStatus" :active-value="0" :inactive-value="1"></el-switch>
-        </el-form-item> -->
       </el-form>
       <template #footer>
         <div class="dialog-footer">
@@ -138,26 +158,86 @@
         </div>
       </template>
     </el-dialog>
-    <exportExcelCom ref="exporttem" @resList="resList"></exportExcelCom>
-    <exportRecord ref="exportRecordCom" :recordRow="recordRow" @uploadList="getList"></exportRecord>
-    <judgeCom ref="judgeComRef" @upload="getList"></judgeCom>
-    <createQrcode ref="createQrcodeRef"></createQrcode>
+
+    <!-- 璁″垝瀵煎叆瀵硅瘽妗� -->
+    <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 FileUpload from '@/components/ImageUpload/index'
-// import exportRecord from './components/exportRecord'
-// import createQrcode from './components/createQrcode'
-// import judgeCom from './components/judge'
-import { listCompany, addCompany, updStatus, delCompany, updateCompany, getCompany } from "@/api/system/company/company";
-// import exportExcelCom from './components/export'
-import { listManage } from "@/api/system/manage";
+import { getToken } from "@/utils/auth";
+import { listManage, addManage, getManage, updateManage, delManage, exportTemplate, exportManage } from "@/api/system/manage";
+
 import { computed } from "vue";
-import { judgeStatus, companyStatus, scopeList } from '@/utils/mapList/index.ts'
 import useSettingsStore from "@/store/modules/settings";
-import { download } from '@/utils/request'; // 涓嬭浇鏂囦欢
-const thcolor = computed(() => useSettingsStore().theme);
+// 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([]);
@@ -165,25 +245,10 @@
 const loading = ref(true);
 const showSearch = ref(true);
 const title = ref("");
-const deptOptions = ref([]);
 const isExpandAll = ref(false);
 const refreshTable = ref(true);
-const exporttem = ref()
-const exportRecordCom = ref()
-const judgeComRef = ref()
-const createQrcodeRef = ref()
-const options = reactive({
-  companyStatus: [
-    {
-      label: '姝e父',
-      value: 0
-    },
-    {
-      label: '绂佺敤',
-      value: 1
-    },
-  ],
-})
+const planOpen = ref(false);
+const planDetail = ref({});
 const data = reactive({
   form: {},
   queryParams: {
@@ -195,6 +260,7 @@
     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" }],
@@ -204,12 +270,42 @@
     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 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);
-const recordRow = ref([])
-/** 鏌ヨ浼佷笟鍒楄〃 */
+/** 鏌ヨ璁″垝鍒楄〃 */
 function getList() {
   loading.value = true;
   listManage(queryParams.value).then((response) => {
@@ -227,6 +323,7 @@
 /** 琛ㄥ崟閲嶇疆 */
 function reset() {
   form.value = {
+    planNo: '', // 璁″垝缂栧彿
     planName: '', // 璁″垝鍚嶇О
     makeOrgName: '', // 鍒跺畾鏈烘瀯
     checkdObject: '', // 琚鏌ュ璞�
@@ -236,6 +333,8 @@
     executiveSection: '', // 鎵ц绉戝
     planFrequency: '', // 璁″垝棰戞
     planMonth: '', // 璁″垝鏈堜唤
+    checkdType: '', // 妫�鏌ユ柟寮�
+    planStatus: '', // 鐘舵��
   };
   proxy.resetForm("deptRef");
 }
@@ -247,25 +346,35 @@
 /** 閲嶇疆鎸夐挳鎿嶄綔 */
 function resetQuery() {
   queryRef.value.resetFields();
+  queryParams.value = {
+    planNo: '', // 璁″垝缂栧彿
+    planName: '', // 璁″垝鍚嶇О
+  }
   handleQuery();
 }
 function getDetails(id) {
-  getCompany(id).then((response) => {
+  getManage(id).then((response) => {
     form.value = response.data;
     open.value = true;
-    // title.value = "鏌ョ湅浼佷笟";
   });
 }
+
+/** 璇︾粏鎸夐挳鎿嶄綔 */
+function handleView(row) {
+  planOpen.value = true;
+  planDetail.value = row
+  planOpen.value = true;
+}
+
 /** 鏂板鎸夐挳鎿嶄綔 */
 function handleAdd(row) {
   if (row) {
-    // form.value = row
     title.value = "缂栬緫璁″垝";
-    getDetails(row.companyId)
+    getDetails(row.id)
   } else {
-    form.value = {
-      companyStatus: 0
-    }
+    // form.value = {
+    //   companyStatus: 0
+    // }
     title.value = "娣诲姞璁″垝";
     open.value = true;
   }
@@ -275,14 +384,14 @@
 function submitForm() {
   proxy.$refs["deptRef"].validate((valid) => {
     if (valid) {
-      if (form.value.companyId != undefined) {
-        updateCompany(form.value).then((response) => {
+      if (form.value.id != undefined) {
+        updateManage(form.value).then((response) => {
           proxy.$modal.msgSuccess("淇敼鎴愬姛");
           open.value = false;
           getList();
         });
       } else {
-        addCompany(form.value).then((response) => {
+        addManage(form.value).then((response) => {
           proxy.$modal.msgSuccess("鏂板鎴愬姛");
           open.value = false;
           getList();
@@ -296,7 +405,7 @@
   proxy.$modal
     .confirm('鏄惁纭鍒犻櫎璇ユ暟鎹�?')
     .then(function () {
-      return delCompany({ delId: row.companyId });
+      return delManage(row.id);
     })
     .then(() => {
       getList();
@@ -304,44 +413,44 @@
     })
     .catch(() => { });
 }
-// 淇敼浼佷笟淇℃伅
-function changeCompanyNews(row, event) {
-  if (loading.value) {
-    return
-  }
-  updStatus(row).then(val => {
-    proxy.$modal.msgSuccess("淇敼鎴愬姛");
-    getList();
+
+/** 瀵煎叆鎸夐挳鎿嶄綔 */
+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")
   })
 }
-// 瀵煎叆妯℃澘
-function exportExcel() {
-  exporttem.value.openDialog()
-}
-// 瀵煎叆璁板綍
-function exportRecordComOpen() {
-  exportRecordCom.value.openDialog()
-}
-function resList(row) {
-  recordRow.value = row
-  exportRecordCom.value.openDialog()
-}
-function checkJudge(row) {
-  judgeComRef.value.openDialog(row)
-}
-function createQrcodeHandler(row) {
-  createQrcodeRef.value.openDialog(row)
-}
-let valueArr = []
+
+
+// let valueArr = []
 function downLoadCode() {
-  download('/system/company/downloadQrcode', {
-    companyIds: valueArr.join()
-  }, "浼佷笟鍥剧墖.zip")
+  exportManage().then(val => {
+    downloadHttp('/tool/file/download', {
+      fileName: val.msg,
+      delete: true
+    }, "璁″垝淇℃伅.xlsx")
+  })
 }
-function handleSelectionChange(e) {
-  console.log(e)
-  valueArr = e.map(item => item.companyId)
-}
+
+
+// function handleSelectionChange(e) {
+//   valueArr = e.map(item => item.id)
+// }
+
 getList();
 function selectableFun(e) {
   console.log(e)

--
Gitblit v1.9.1