From d96ac2eaf4129698c49d31050009b524c7a0e38d Mon Sep 17 00:00:00 2001
From: 王恒 <318726284@qq.com>
Date: 星期五, 29 八月 2025 19:20:21 +0800
Subject: [PATCH] '新增综合查一次'

---
 src/views/system/comprehensive/index.vue |  669 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 421 insertions(+), 248 deletions(-)

diff --git a/src/views/system/comprehensive/index.vue b/src/views/system/comprehensive/index.vue
index 690fc68..b5e9284 100644
--- a/src/views/system/comprehensive/index.vue
+++ b/src/views/system/comprehensive/index.vue
@@ -18,17 +18,6 @@
           @keyup.enter="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="鍒跺畾鏈烘瀯">
-        <el-tree-select
-          v-model="queryParams.applyOrgId"
-          :data="deptOptions"
-          :props="{ value: 'id', label: 'label', children: 'children' }"
-          value-key="id"
-          placeholder="璇烽�夋嫨鍒跺畾璁″垝鐨勬満鏋�"
-          check-strictly
-          style="width: 200px"
-        />
-      </el-form-item>
       <el-form-item label="鎵ф硶鏃堕棿" style="width: 290px">
         <el-date-picker
           v-model="dateRange"
@@ -111,21 +100,6 @@
         label="缁熶竴绀句細淇$敤浠g爜"
         width="180"
       ></el-table-column>
-       <el-table-column
-        prop="enforceContent"
-        label="妫�鏌ュ唴瀹�"
-        width="180"
-      ></el-table-column>
-      <el-table-column
-        prop="applyDeptNames"
-        label="鎵ц绉戝"
-        width="180"
-      ></el-table-column>
-      <el-table-column prop="enforceType" label="妫�鏌ユ柟寮�" width="180">
-        <template #default="scope">{{
-          methodToText(scope.row.enforceType)
-        }}</template>
-      </el-table-column>
       <el-table-column prop="planFrequency" label="璁″垝棰戞" width="180">
         <template #default="scope">{{ frequencyToText(scope.row) }} </template>
       </el-table-column>
@@ -135,9 +109,9 @@
         width="180"
       ></el-table-column>
       <el-table-column prop="orderStatus" label="鐘舵��" width="180">
-        <!-- <template #default="scope">{{
-          statusToText(scope.row.checkStatus)
-        }}</template> -->
+        <template #default="scope">{{
+          statusToText(scope.row.status)
+        }}</template>
       </el-table-column>
       <el-table-column
         label="鎿嶄綔"
@@ -147,11 +121,11 @@
         width="180"
       >
         <template #default="scope">
-          <el-link type="info" @click="handleView(scope.row)">鏌ョ湅</el-link>
+          <el-link type="info" @click="handleView(scope.row.id)">鏌ョ湅</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>
+          <el-link type="danger" @click="handleDelete(scope.row)">鍒犻櫎</el-link>
         </template>
       </el-table-column>
     </el-table>
@@ -172,57 +146,37 @@
       append-to-body
     >
       <el-form ref="deptRef" :model="form" :rules="rules" label-width="140px">
+        <div class="sub-title">鍩烘湰淇℃伅</div>
         <el-row :gutter="20">
-          <el-col :span="24">
+          <el-col :span="12">
             <el-form-item label="璁″垝鍚嶇О" prop="enforceReason">
               <el-input
+                :disabled="form.id"
                 v-model="form.enforceReason"
                 placeholder="璇疯緭鍏ヨ鍒掑悕绉�"
               />
             </el-form-item>
           </el-col>
-        </el-row>
-        <el-row :gutter="20">
           <el-col :span="12">
-            <el-form-item label="鍒跺畾璁″垝鐨勬満鏋�" prop="applyOrgId">
+            <el-form-item label="鐗靛ご鍗曚綅" prop="leadUnitId">
               <el-tree-select
-                v-model="form.applyOrgId"
+                :disabled="form.id"
+                v-model="form.leadUnitId"
                 :data="deptOptions"
                 :props="{ value: 'id', label: 'label', children: 'children' }"
                 value-key="id"
-                placeholder="璇烽�夋嫨鍒跺畾璁″垝鐨勬満鏋�"
+                placeholder="璇烽�夋嫨鐗靛ご鍗曚綅"
                 check-strictly
-                :default-expanded-keys="[form.applyOrgId]"
-                :default-checked-keys="[form.applyOrgId]"
+                :default-expanded-keys="[form.leadUnitId]"
+                :default-checked-keys="[form.leadUnitId]"
                 @node-click="changeTreeHandler"
               />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="鎵ц绉戝" prop="applyDeptIds">
-              <el-select
-                v-model="selectOffices"
-                multiple
-                collapse-tags
-                collapse-tags-tooltip
-                :max-collapse-tags="1"
-                placeholder="璇烽�夋嫨鎵ц绉戝"
-                style="width: 100%"
-                @change="handleSelectOffices"
-              >
-                <el-option
-                  v-for="(obj, index) in officeList"
-                  :key="index"
-                  :label="obj.deptName"
-                  :value="obj.deptId"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
         </el-row>
-        <el-row :gutter="20" v-if="!form.orderId">
+        <el-row :gutter="20" v-if="!form.id">
           <el-col :span="24">
-            <el-form-item label="琚鏌ョ殑瀵硅薄" prop="checkdIds">
+            <el-form-item label="琚瀵硅薄" prop="checkdIds">
               <el-button type="primary" @click="openFirmSelect"
                 >閫夋嫨浼佷笟</el-button
               >
@@ -253,10 +207,10 @@
         </el-row>
         <el-row :gutter="20" v-if="form.checkdIds">
           <el-col :span="24">
-            <el-form-item label="琚鏌ュ璞′俊鎭�">
+            <el-form-item label="琚瀵硅薄淇℃伅">
               <el-table
                 :data="checkedList"
-                max-height="200px"
+                max-height="100px"
                 style="width: 100%"
               >
                 <el-table-column prop="companyName" label="浼佷笟鍚嶇О" />
@@ -267,10 +221,50 @@
         </el-row>
         <el-row :gutter="20">
           <el-col :span="12">
-            <el-form-item label="妫�鏌ユ柟寮�" prop="enforceType">
+            <el-form-item label="妫�鏌ラ娆�" prop="planFrequency">
+              <el-input
+                v-model="form.planFrequency"
+                :disabled="form.id"
+                placeholder="璇疯緭鍏ラ娆�"
+              >
+                <template #append>
+                  <el-select
+                    :disabled="form.id"
+                    v-model="form.planFrequencyUnit"
+                    placeholder="鍗曚綅"
+                    style="width: 80px"
+                  >
+                    <el-option
+                      v-for="(obj, index) in frequency"
+                      :key="index"
+                      :label="obj.label"
+                      :value="obj.value"
+                    />
+                  </el-select> </template
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璁″垝鏃堕棿" prop="planMonth">
+              <el-date-picker
+                :disabled="form.id"
+                v-model="selectMonth"
+                type="months"
+                format="YYYY-MM"
+                value-format="YYYY-MM"
+                placeholder="璇烽�夋嫨璁″垝鏃堕棿"
+                @change="changeMonth"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="妫�鏌ョ被鍨�" prop="enforceType">
               <el-select
+                :disabled="form.id"
                 v-model="form.enforceType"
-                placeholder="璇烽�夋嫨妫�鏌ユ柟寮�"
+                placeholder="璇烽�夋嫨妫�鏌ョ被鍨�"
                 style="width: 100%"
               >
                 <el-option
@@ -282,66 +276,114 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="鎵�灞炶涓�" prop="industry">
-              <el-select
-                v-model="form.industry"
-                placeholder="璇烽�夋嫨鎵�灞炶涓�"
-                style="width: 100%"
-              >
-                <el-option
-                  v-for="(obj, index) in industry_type"
-                  :key="index"
-                  :label="obj.label"
-                  :value="obj.key"
+        </el-row>
+
+        <div class="sub-title">
+          <div class="title-word">涓讳綋淇℃伅</div>
+          <div class="add-btn">
+            <el-button type="primary" @click="addMainList">鏂板</el-button>
+          </div>
+        </div>
+        <el-row :gutter="20">
+          <el-table :data="mainList" max-height="200px" style="width: 100%">
+            <el-table-column prop="applyOrgId" align="center" label="妫�鏌ュ崟浣�">
+              <template #default="scope">
+                <div v-if="!scope.row.isEdit">{{ scope.row.applyOrgName }}</div>
+                <el-tree-select
+                  v-else
+                  v-model="scope.row.applyOrgId"
+                  :data="deptOptions"
+                  :props="{ value: 'id', label: 'label', children: 'children' }"
+                  value-key="id"
+                  placeholder="璇烽�夋嫨鍒跺畾璁″垝鐨勬満鏋�"
+                  check-strictly
+                  :default-expanded-keys="[scope.row.applyOrgId]"
+                  :default-checked-keys="[scope.row.applyOrgId]"
+                  @node-click="
+                    (data, node, item) =>
+                      changeMainTreeHandler(data, node, item, scope.$index)
+                  "
                 />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="24">
-            <el-form-item label="妫�鏌ュ唴瀹�" prop="enforceContent">
-              <el-input
-                v-model="form.enforceContent"
-                type="textarea"
-                placeholder="璇疯緭鍏ユ鏌ュ唴瀹�"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="璁″垝棰戞" prop="planFrequency">
-              <el-input v-model="form.planFrequency" placeholder="璇疯緭鍏ラ娆�">
-                <template #append>
-                  <el-select
-                    v-model="form.planFrequencyUnit"
-                    placeholder="鍗曚綅"
-                    style="width: 80px"
-                  >
-                    <el-option
-                      v-for="(obj, index) in frequency"
-                      :key="index"
-                      :label="obj.label"
-                      :value="obj.key"
-                    />
-                  </el-select> </template
-              ></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="璁″垝鏈堜唤" prop="planMonth">
-              <el-date-picker
-                v-model="selectMonth"
-                type="months"
-                format="YYYY-MM"
-                value-format="YYYY-MM"
-                placeholder="璇烽�夋嫨璁″垝鏈堜唤"
-                @change="changeMonth"
-              />
-            </el-form-item>
-          </el-col>
+              </template>
+            </el-table-column>
+            <el-table-column
+              prop="applyDeptNames"
+              align="center"
+              label="鎵ц绉戝"
+            >
+              <template #default="scope">
+                <div v-if="!scope.row.isEdit">
+                  {{ scope.row.applyDeptNames }}
+                </div>
+                <el-select
+                  v-else
+                  v-model="scope.row.selectList"
+                  multiple
+                  collapse-tags
+                  collapse-tags-tooltip
+                  :max-collapse-tags="1"
+                  placeholder="璇烽�夋嫨鎵ц绉戝"
+                  style="width: 100%"
+                  @change="
+                    (value) => {
+                      handleSelectOffices(value, scope.$index);
+                    }
+                  "
+                >
+                  <el-option
+                    v-for="(obj, index) in scope.row.officeList"
+                    :key="index"
+                    :label="obj.deptName"
+                    :value="obj.deptId"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+
+            <el-table-column
+              prop="enforceContent"
+              show-overflow-tooltip
+              label="妫�鏌ュ唴瀹�"
+              align="center"
+            >
+              <template #default="scope">
+                <div v-if="!scope.row.isEdit">
+                  {{ scope.row.enforceContent }}
+                </div>
+                <el-input
+                  v-else
+                  type="textarea"
+                  :rows="1"
+                  v-model="scope.row.enforceContent"
+                  placeholder="璇疯緭鍏ユ鏌ュ唴瀹�"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="鎿嶄綔" align="center" width="100">
+              <template #default="scope">
+                <el-link
+                  style="margin-right: 10px"
+                  type="primary"
+                  v-if="scope.row.isEdit"
+                  @click="saveRowInfo(scope.row, scope.$index)"
+                  >淇濆瓨</el-link
+                >
+                <el-link
+                  style="margin-right: 10px"
+                  type="primary"
+                  v-else
+                  @click="editMainList(scope.row, scope.$index)"
+                  >缂栬緫</el-link
+                >
+                <el-link
+                  style="margin-right: 10px"
+                  type="danger"
+                  @click="delRowInfo(scope.$index)"
+                  >鍒犻櫎</el-link
+                >
+              </template>
+            </el-table-column>
+          </el-table>
         </el-row>
       </el-form>
       <template #footer>
@@ -402,20 +444,21 @@
     <!-- 璁″垝璇︾粏 -->
     <el-dialog title="璁″垝璇︽儏" v-model="planOpen" width="700px" append-to-body>
       <el-form label-width="140px">
+        <div class="sub-title">鍩烘湰淇℃伅</div>
         <el-row>
           <el-col :span="12">
             <el-form-item label="璁″垝缂栧彿锛�">{{
-              planDetail.orderNo
+              planDetail.planNo
             }}</el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="璁″垝鍚嶇О锛�">{{
+            <el-form-item label="妫�鏌ヨ鍒掑悕绉帮細">{{
               planDetail.enforceReason
             }}</el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="鍒跺畾璁″垝鐨勬満鏋勶細">{{
-              planDetail.applyOrgName
+            <el-form-item label="鐗靛ご鍗曚綅锛�">{{
+              planDetail.leadUnitName
             }}</el-form-item>
           </el-col>
           <el-col :span="12">
@@ -429,19 +472,9 @@
             }}</el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="妫�鏌ユ柟寮忥細">{{
-              methodToText(planDetail.enforceType)
-            }}</el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鎵ц绉戝锛�">{{
-              planDetail.applyDeptNames
-            }}</el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="妫�鏌ュ唴瀹癸細">{{
-              planDetail.enforceContent
-            }}</el-form-item>
+            <el-form-item label="璁″垝棰戞锛�">
+              {{ frequencyToText(planDetail) }}
+            </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="璁″垝鏈堜唤锛�">{{
@@ -449,15 +482,40 @@
             }}</el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="璁″垝棰戞锛�">
-              {{ frequencyToText(planDetail) }}
+            <el-form-item label="妫�鏌ョ被鍨嬶細">
+              {{ methodToText(planDetail.enforceType) }}
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <!-- <el-form-item label="鐘舵�侊細">{{
-              statusToText(planDetail.checkStatus)
-            }}</el-form-item> -->
+            <el-form-item label="鐘舵�侊細">
+              {{ statusToText(planDetail.status) }}
+            </el-form-item>
           </el-col>
+        </el-row>
+        <div class="sub-title">涓讳綋淇℃伅</div>
+        <el-row>
+          <el-table
+            :data="planDetailList"
+            max-height="200px"
+            style="width: 100%"
+          >
+            <el-table-column
+              prop="applyOrgName"
+              align="center"
+              label="妫�鏌ュ崟浣�"
+            />
+            <el-table-column
+              prop="applyDeptNames"
+              align="center"
+              label="鎵ц绉戝"
+            />
+            <el-table-column
+              align="center"
+              prop="enforceContent"
+              show-overflow-tooltip
+              label="妫�鏌ュ唴瀹�"
+            />
+          </el-table>
         </el-row>
       </el-form>
       <template #footer>
@@ -466,6 +524,7 @@
             @click="
               planOpen = false;
               planDetail = {};
+              planDetailList = [];
             "
             >鍏� 闂�</el-button
           >
@@ -543,24 +602,22 @@
 import { getToken } from "@/utils/auth";
 import {
   listOrder,
-  // addManage,
-  // getManage,
-  // updateManage,
-  // delManage,
+  getOrder,
+  delOrder,
+  addOrder,
+  updateOrder,
   exportTemplate,
-  // exportManage,
-  // getOrgId,
 } from "@/api/system/comprehensive";
 import { listCompany } from "@/api/system/company/company";
 import { deptTreeSelect } from "@/api/system/user";
 import { listDept } from "@/api/system/dept";
 // import { download } from '@/utils/request'; // 涓嬭浇鏂囦欢
 import { download as downloadHttp } from "@/utils/request";
+import { generateCartesianArray } from "@/utils/arrayUtil";
 const { proxy } = getCurrentInstance();
 const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
-const { frequency, industry_type, enforce_type } = proxy.useDictPer(
+const { frequency, enforce_type } = proxy.useDictPer(
   "frequency",
-  "industry_type",
   "enforce_type"
 );
 
@@ -581,6 +638,8 @@
 const refreshTable = ref(true);
 const planOpen = ref(false);
 const planDetail = ref({});
+const planDetailList = ref([]);
+const mainList = ref([]);
 const dateRange = ref([]);
 const selectOpen = ref(false);
 const firmList = ref([]);
@@ -592,36 +651,32 @@
 const data = reactive({
   form: {
     enforceReason: "", // 璁″垝鍚嶇О
-    applyOrgId: "", // 鍒跺畾鏈烘瀯id
-    applyOrgName: "", // 鍒跺畾鏈烘瀯
-    applyDeptIds: "", // 鎵ц绉戝
-    applyDeptNames: "", // 鎵ц绉戝鍚嶇О
-    companyName: "", // 琚鏌ュ璞�
-    companyId: "", // 琚鏌ュ璞d
+    leadUnitId: "", // 鍒跺畾鏈烘瀯id
+    leadUnitName: "", // 鍒跺畾鏈烘瀯
+    checkdIds: "", // 琚鏌ュ璞d
+    companyName: "", // 琚鏌ュ璞″悕绉�
     companyCode: "", // 缁熶竴绀句細淇$敤浠g爜
-    industry: "", // 鎵�灞炶涓�
     enforceType: "", // 妫�鏌ユ柟寮�
-    enforceContent: "", // 妫�鏌ュ唴瀹�
     planFrequency: "", // 璁″垝棰戞
-    planFrequencyUnit: "1", // 璁″垝棰戞鍗曚綅
+    planFrequencyUnit: 119, // 璁″垝棰戞鍗曚綅
     planMonth: "", // 璁″垝鏈堜唤
   },
   queryParams: {
     companyName: "",
     enforceReason: "",
-    applyOrgId: "",
+    leadUnitId: "",
     planMonthStart: "", // 璁″垝寮�濮嬫湀浠�
     planMonthEnd: "", // 璁″垝缁撴潫鏈堜唤
     pageNum: 1,
     pageSize: 10,
   },
   rules: {
-    orderNo: [{ required: true, message: "璁″垝缂栧彿涓嶈兘涓虹┖", trigger: "blur" }],
+    planNo: [{ required: true, message: "璁″垝缂栧彿涓嶈兘涓虹┖", trigger: "blur" }],
     enforceReason: [
       { required: true, message: "璁″垝鍚嶇О涓嶈兘涓虹┖", trigger: "blur" },
     ],
-    applyOrgId: [
-      { required: true, message: "鍒跺畾璁″垝鐨勬満鏋勪笉鑳戒负绌�", trigger: "blur" },
+    leadUnitId: [
+      { required: true, message: "鐗靛ご鍗曚綅涓嶈兘涓虹┖", trigger: "blur" },
     ],
     checkdIds: [
       { required: true, message: "琚鏌ュ璞′笉鑳戒负绌�", trigger: "blur" },
@@ -631,15 +686,6 @@
     ],
     companyCode: [
       { required: true, message: "缁熶竴绀句細淇$敤浠g爜涓嶈兘涓虹┖", trigger: "blur" },
-    ],
-    industry: [
-      { required: true, message: "鎵�灞炶涓氫笉鑳戒负绌�", trigger: "blur" },
-    ],
-    enforceContent: [
-      { required: true, message: "妫�鏌ュ唴瀹逛笉鑳戒负绌�", trigger: "blur" },
-    ],
-    applyDeptIds: [
-      { required: true, message: "鎵ц绉戝涓嶈兘涓虹┖", trigger: "blur" },
     ],
     planFrequency: [
       { required: true, message: "璁″垝棰戞涓嶈兘涓虹┖", trigger: "blur" },
@@ -662,13 +708,13 @@
 });
 
 // 鑾峰彇绉戝鍒楄〃
-const getOfficeList = () => {
+const getOfficeList = (orgId, index) => {
   listDept({
     pageNum: 1,
     pageSize: 1000,
-    parentId: form.value.applyOrgId,
+    parentId: orgId,
   }).then((response) => {
-    officeList.value = response.data;
+    mainList.value[index].officeList = response.data;
   });
 };
 
@@ -682,26 +728,35 @@
   form.value.planMonth = value.join(",");
 };
 
-// 鏈烘瀯閫夋嫨
+// 鐗靛ご鍗曚綅閫夋嫨
 const changeTreeHandler = (e) => {
-  form.value.applyOrgId = e.id;
-  form.value.applyOrgName = e.label;
+  form.value.leadUnitId = e.id;
+  form.value.leadUnitName = e.label;
   selectOffices.value = [];
-  form.value.applyDeptIds = "";
-  form.value.applyDeptNames = "";
-  if (e.id) {
-    getOfficeList();
+};
+
+// 妫�鏌ュ崟浣嶉�夋嫨
+const changeMainTreeHandler = (data, item, node, index) => {
+  mainList.value[index].applyOrgId = data.id;
+  mainList.value[index].applyOrgName = data.label;
+  mainList.value[index].applyDeptIds = "";
+  mainList.value[index].applyDeptNames = "";
+  mainList.value[index].selectList = [];
+  mainList.value[index].officeList = [];
+  if (data.id) {
+    getOfficeList(data.id, index);
   }
 };
 
 // 绉戝閫夋嫨
-const handleSelectOffices = (value) => {
-  form.value.applyDeptNames = value
+const handleSelectOffices = (value, index) => {
+  mainList.value[index].applyDeptIds = value.join(",");
+  mainList.value[index].applyDeptNames = value
     .map((item) => {
-      return officeList.value.find((obj) => obj.deptId === item).deptName;
+      return mainList.value[index].officeList.find((obj) => obj.deptId === item)
+        .deptName;
     })
     .join(",");
-  form.value.applyDeptIds = value.join(",");
 };
 
 /*** 璁″垝瀵煎叆鍙傛暟 */
@@ -717,7 +772,9 @@
   // 璁剧疆涓婁紶鐨勮姹傚ご閮�
   headers: { Authorization: "Bearer " + getToken() },
   // 涓婁紶鐨勫湴鍧�
-  url: import.meta.env.VITE_APP_BASE_API + "/comprehensive/enforce/order/importData",
+  url:
+    import.meta.env.VITE_APP_BASE_API +
+    "/comprehensive/enforce/order/importData",
 });
 /**鏂囦欢涓婁紶涓鐞� */
 const handleFileUploadProgress = (event, file, fileList) => {
@@ -773,21 +830,17 @@
 function reset() {
   form.value = {
     enforceReason: "", // 璁″垝鍚嶇О
-    applyOrgId: "", // 鍒跺畾鏈烘瀯id
-    applyOrgName: "", // 鍒跺畾鏈烘瀯
-    applyDeptIds: "", // 鎵ц绉戝id
-    applyDeptNames: "", // 鎵ц绉戝鍚嶇О
+    leadUnitId: "", // 鍒跺畾鏈烘瀯id
+    leadUnitName: "", // 鍒跺畾鏈烘瀯
     checkdIds: "", // 琚鏌ュ璞d
     companyName: "", // 琚鏌ュ璞″悕绉�
     companyCode: "", // 缁熶竴绀句細淇$敤浠g爜
     enforceType: "", // 妫�鏌ユ柟寮�
-    industry: "", // 鎵�灞炶涓�
-    enforceContent: "", // 妫�鏌ュ唴瀹�
     planFrequency: "", // 璁″垝棰戞
-    planFrequencyUnit: "1", // 璁″垝棰戞鍗曚綅
+    planFrequencyUnit: 119, // 璁″垝棰戞鍗曚綅
     planMonth: "", // 璁″垝鏈堜唤
-    orderType: 1,
   };
+  mainList.value = [];
   selectOffices.value = [];
   selectMonth.value = [];
   checkedList.value = [];
@@ -813,7 +866,7 @@
     orderType: 1,
     companyName: "",
     enforceReason: "",
-    applyOrgId: "",
+    leadUnitId: "",
     planMonthStart: "", // 璁″垝寮�濮嬫湀浠�
     planMonthEnd: "", // 璁″垝缁撴潫鏈堜唤
     pageNum: 1,
@@ -823,66 +876,187 @@
   handleQuery();
 }
 function getDetails(id) {
-  getManage(id).then((response) => {
-    form.value = JSON.parse(JSON.stringify(response.data));
-    form.value.planFrequencyUnit = form.value.planFrequencyUnit.toString();
+  getOrder(id).then((response) => {
+    form.value = JSON.parse(JSON.stringify(response.data.info));
+    const list = JSON.parse(JSON.stringify(response.data.list));
+    mainList.value = list.map((obj) => {
+      return {
+        ...obj,
+        selectList: [],
+        officeList: [],
+        isEdit: false,
+      };
+    });
+    form.value.planFrequencyUnit = Number(form.value.planFrequencyUnit);
     form.value.enforceType = Number(form.value.enforceType);
+    form.value.leadUnitId = Number(form.value.leadUnitId);
     selectMonth.value = form.value.planMonth.split(",");
-    selectOffices.value = form.value.applyDeptIds
-      .split(",")
-      .map((item) => Number(item));
-
-    getOfficeList();
     open.value = true;
   });
 }
 
-/** 璇︾粏鎸夐挳鎿嶄綔 */
-function handleView(row) {
-  planOpen.value = true;
-  planDetail.value = row;
-  planOpen.value = true;
+/** 璇︽儏鎸夐挳鎿嶄綔 */
+function handleView(id) {
+  getOrder(id).then((response) => {
+    console.log(response);
+    planDetail.value = response.data.info;
+    planDetailList.value = response.data.list;
+    planOpen.value = true;
+  });
 }
 
 /** 鏂板鎸夐挳鎿嶄綔 */
 function handleAdd(row) {
   if (row) {
     title.value = "缂栬緫璁″垝";
-    getDetails(row.orderId);
+    getDetails(row.id);
   } else {
     title.value = "娣诲姞璁″垝";
     open.value = true;
-    getUserOrgId();
+    mainList.value = [
+      {
+        applyOrgId: "",
+        applyOrgName: "",
+        applyDeptIds: "",
+        applyDeptNames: "",
+        enforceContent: "",
+        selectList: [],
+        officeList: [],
+        isEdit: true,
+      },
+    ];
+    console.log(mainList.value);
   }
   getFirmList();
+}
+
+// 鏂板涓讳綋鍐呭
+function addMainList() {
+  if (mainList.value.length) {
+    const lastObj = JSON.parse(
+      JSON.stringify(mainList.value[mainList.value.length - 1])
+    );
+    if (lastObj.isEdit) {
+      return proxy.$modal.msgError("璇峰厛淇濆瓨褰撳墠淇℃伅");
+    } else {
+      delete lastObj.isEdit;
+      const checkList = [
+        "applyOrgId",
+        "applyOrgName",
+        "applyDeptIds",
+        "applyDeptNames",
+        "enforceContent",
+      ];
+      console.log(lastObj);
+      const check = checkList.every((key) => Boolean(lastObj[key]));
+      if (!check) return proxy.$modal.msgError("璇峰畬鍠勫綋鍓嶄俊鎭�");
+    }
+  }
+  mainList.value.push({
+    applyOrgId: "",
+    applyOrgName: "",
+    applyDeptIds: "",
+    applyDeptNames: "",
+    enforceContent: "",
+    selectList: [],
+    officeList: [],
+    isEdit: true,
+  });
+}
+
+// 缂栬緫琛屼俊鎭�
+function editMainList(row, index) {
+  if (!form.value.id) {
+    mainList.value[index].isEdit = true;
+  } else {
+    if (row.orderStatus > 2) return proxy.$modal.msgError("宸叉墽娉曚笉鑳界紪杈�");
+    mainList.value[index].selectList = row.applyDeptIds
+      .split(",")
+      .map((item) => Number(item));
+    getOfficeList(row.applyOrgId, index);
+    mainList.value[index].isEdit = true;
+  }
+}
+
+// 淇濆瓨琛屼俊鎭�
+function saveRowInfo(row, index) {
+  const rowInfo = JSON.parse(JSON.stringify(row));
+  console.log(rowInfo);
+  delete rowInfo.isEdit;
+  const checkList = [
+    "applyOrgId",
+    "applyOrgName",
+    "applyDeptIds",
+    "applyDeptNames",
+    "enforceContent",
+  ];
+  const check = checkList.every((key) => Boolean(rowInfo[key]));
+  if (!check) return proxy.$modal.msgError("璇峰畬鍠勫綋鍓嶄俊鎭�");
+  mainList.value[index].isEdit = false;
+}
+
+// 鍒犻櫎琛屼俊鎭�
+function delRowInfo(index) {
+  console.log(mainList.value, index);
+  mainList.value.splice(index, 1);
 }
 
 /** 鎻愪氦鎸夐挳 */
 function submitForm() {
   proxy.$refs["deptRef"].validate((valid) => {
     if (valid) {
-      if (form.value.orderId != undefined) {
-        updateManage(form.value).then((response) => {
+      if (form.value.id) {
+        if (mainList.value.some((obj) => obj.isEdit)) {
+          proxy.$modal.msgError("璇峰畬鍠勪富浣撲俊鎭�");
+          return;
+        }
+        updateOrder({
+          info: form.value,
+          list: mainList.value,
+        }).then((response) => {
           proxy.$modal.msgSuccess("淇敼鎴愬姛");
           open.value = false;
           getList();
           reset();
         });
       } else {
-        checkedList.value.forEach((item, index) => {
-          const submitForm = { ...form.value };
-          submitForm.companyId = item.companyId;
-          submitForm.companyName = item.companyName;
-          submitForm.companyCode = item.companyCode;
-          addManage(submitForm).then((response) => {
-            if (index === checkedList.value.length - 1) {
-              proxy.$modal.msgSuccess("鏂板鎴愬姛");
-              open.value = false;
-              getList();
-              reset();
-            }
+        if (mainList.value.some((obj) => obj.isEdit)) {
+          proxy.$modal.msgError("璇峰畬鍠勪富浣撲俊鎭�");
+          return;
+        }
+        // 鍑嗗鎻愪氦鏁版嵁锛氭牴鎹甤heckdIds鍜宲lanMonth鐢熸垚绗涘崱灏旂Н鏁扮粍
+        const submitDataArray = [];
+        // 閬嶅巻姣忎釜閫変腑鐨勪紒涓�
+        for (const company of checkedList.value) {
+          // 閬嶅巻姣忎釜閫変腑鐨勬湀浠�
+          for (const month of selectMonth.value) {
+            // 鍒涘缓鍖呭惈褰撳墠浼佷笟鍜屾湀浠戒俊鎭殑琛ㄥ崟鏁版嵁
+            const companyForm = {
+              ...JSON.parse(JSON.stringify(form.value)),
+              companyId: company.companyId,
+              companyName: company.companyName,
+              companyCode: company.companyCode,
+              planMonth: month,
+              checkdIds: company.companyId,
+            };
+            // 涓烘瘡涓紒涓�-鏈堜唤缁勫悎鐢熸垚瀵瑰簲鐨刴ainList鏁版嵁
+            const formData = companyForm;
+            submitDataArray.push(formData);
+          }
+        }
+        addOrder({
+          companyList: submitDataArray,
+          orgList: mainList.value,
+        })
+          .then((response) => {
+            proxy.$modal.msgSuccess("鏂板鎴愬姛");
+            open.value = false;
+            getList();
+            reset();
+          })
+          .catch(() => {
+            proxy.$modal.msgError("鏂板澶辫触");
           });
-        });
       }
     }
   });
@@ -892,7 +1066,7 @@
   proxy.$modal
     .confirm("鏄惁纭鍒犻櫎璇ユ暟鎹�?")
     .then(function () {
-      return delManage(row.orderId);
+      return delOrder(row.id);
     })
     .then(() => {
       getList();
@@ -966,7 +1140,6 @@
 }
 
 function frequencyToText(data) {
-  console.log(data.planFrequencyUnit);
   if (!data.planFrequencyUnit) {
     return "";
   }
@@ -978,21 +1151,6 @@
 
 function statusToText(status) {
   return statusOptions.value.find((item) => item.value == status).label;
-}
-
-function getUserOrgId() {
-  getOrgId().then((response) => {
-    form.value.applyOrgId = Number(response.data.orgId) || "";
-    form.value.applyDeptIds = response.data.deptId || "";
-    if (form.value.applyDeptIds) {
-      selectOffices.value = form.value.applyDeptIds
-        .split(",")
-        .map((item) => Number(item));
-    }
-    if (form.value.applyOrgId) {
-      getOfficeList();
-    }
-  });
 }
 
 getList();
@@ -1014,4 +1172,19 @@
     }
   }
 }
+
+.sub-title {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: 10px 10px;
+  // height: 40px;
+  // line-height: 40px;
+  font-size: 16px;
+  font-weight: 700;
+  color: #999;
+  background-color: #ebf5ff;
+  box-sizing: border-box;
+  margin-bottom: 10px;
+}
 </style>

--
Gitblit v1.9.1