From d33d80732952b59e150911a3195e4245e184b6a9 Mon Sep 17 00:00:00 2001
From: chengxiangling <291105840@qq.com>
Date: 星期四, 15 五月 2025 17:24:10 +0800
Subject: [PATCH] 提交计划管理页面与联调

---
 src/views/demand/planManage/index.vue | 1343 +++++++++++++--------------------------------------------
 1 files changed, 315 insertions(+), 1,028 deletions(-)

diff --git a/src/views/demand/planManage/index.vue b/src/views/demand/planManage/index.vue
index 41bfb19..790cbaf 100644
--- a/src/views/demand/planManage/index.vue
+++ b/src/views/demand/planManage/index.vue
@@ -11,11 +11,11 @@
     >
       <el-row type="flex" justify="left" :gutter="20">
         <el-col :span="5">
-          <el-form-item label="璁″垝鍚嶇О" prop="description">
+          <el-form-item label="璁″垝鍚嶇О" prop="name">
             <el-input
               style="width: 140px"
-              v-model="queryParams.description"
-              placeholder="璇疯緭鍏ユ弿杩板叧閿瘝"
+              v-model="queryParams.name"
+              placeholder="璇疯緭鍏ヨ鍒掑悕绉�"
               clearable
               @keyup.enter="handleQuery"
             />
@@ -49,7 +49,7 @@
           plain
           icon="Edit"
           :disabled="single"
-          @click="handleUpdate"
+          @click="handleUpdate(null)"
           v-hasPermi="['aps:calendar:update']"
           >淇敼</el-button
         >
@@ -65,16 +65,6 @@
           >鍒犻櫎</el-button
         >
       </el-col>
-      <!-- <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['core:calendar:export']"
-          >瀵煎嚭</el-button
-        >
-      </el-col> -->
       <right-toolbar
         v-model:showSearch="showSearch"
         @queryTable="getList"
@@ -93,36 +83,6 @@
       @on-checkbox="handleCheckboxChange"
       class="auto-height-grid"
     >
-      <template #status="{ row }">
-        <vxe-tag v-if="row.type === '1'" status="primary">鍛ㄥ伐浣�</vxe-tag>
-        <vxe-tag v-if="row.type === '2'" status="success">鑺傚亣鏃�</vxe-tag>
-      </template>
-      <template #mark="{ row }">
-        <div v-if="row.type === '1'">
-          <span
-            v-for="(item, index) in JSON.parse(row.content.value).weekdays"
-            :key="index"
-          >
-            <span v-if="item.work === 'y'" status="success" class="mart5"
-              >{{ item.chineseName }}: 宸ヤ綔鏃�;&nbsp;</span
-            >
-            <span v-if="item.work === 'n'" status="info" class="mart5"
-              >{{ item.chineseName }}: 闈炲伐浣滄棩;&nbsp;</span
-            >
-          </span>
-          <!-- <div v-for="(item, index) in JSON.parse(row.content.value).weekdays" :key="index">
-              <vxe-tag v-if="item.work==='y'" status="success" class="mart5">{{item.chineseName}}: 宸ヤ綔鏃�;&nbsp;</vxe-tag>
-              <vxe-tag v-if="item.work==='n'" status="info" class="mart5">{{item.chineseName}}: 闈炲伐浣滄棩;&nbsp;</vxe-tag>
-            </div> -->
-        </div>
-        <div v-if="row.type === '2'">
-          <div>
-            {{ JSON.parse(row.content.value).holidays.startdate }}鑷硔{
-              JSON.parse(row.content.value).holidays.enddate
-            }}
-          </div>
-        </div>
-      </template>
       <template #buttons="{ row }">
         <el-button
           type="primary"
@@ -134,14 +94,13 @@
         <el-button
           type="default"
           size="small"
-          @click="handleSetHolidays(row)"
+          @click="handleSetCycle(row)"
           v-hasPermi="['aps:calendar:remove']"
           >璁″垝鍛ㄦ湡</el-button
         >
         <el-button
           type="success"
           size="small"
-          @click="handleSetHolidays(row)"
           v-hasPermi="['aps:calendar:remove']"
           >鐢熸垚璁″垝</el-button
         >
@@ -158,196 +117,54 @@
     <!-- 娣诲姞鎴栦慨鏀规棩鍘嗙鐞嗗璇濇 -->
     <el-dialog :title="title" v-model="open" width="80%" append-to-body>
       <el-form
-        ref="calendarRef"
+        ref="planManageRef"
         :model="form"
         :rules="rules"
-        label-width="105px"
+        label-width="140px"
       >
-        <el-form-item label="鏃ュ巻鎻忚堪" prop="description">
-          <el-input v-model="form.description" placeholder="璇疯緭鍏ユ弿杩�" />
-        </el-form-item>
-        <el-form-item label="鏃ュ巻绫诲瀷" prop="type">
-          <!-- <el-radio-group v-model="form.type" @change="handleSwitchType">
-            <el-radio :label="'1'">鍛ㄥ伐浣�</el-radio>
-            <el-radio :label="'2'">鑺傚亣鏃�</el-radio>
-          </el-radio-group> -->
-          <el-tag type="primary">鍛ㄥ伐浣�</el-tag>
-        </el-form-item>
-        <el-form-item label="鐢熸晥鏃堕棿" prop="effectiveDate">
-          <el-date-picker
+        <el-form-item label="璁″垝鍚嶇О" prop="name" style="width: 100%">
+          <el-input
+            v-model="form.name"
             clearable
-            v-model="form.effectiveDate"
-            type="date"
-            value-format="YYYY-MM-DD"
-            placeholder="閫夋嫨鏃ユ湡"
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="澶辨晥鏃堕棿" prop="expiringDate">
-          <el-date-picker
-            clearable
-            v-model="form.expiringDate"
-            type="date"
-            value-format="YYYY-MM-DD"
-            placeholder="閫夋嫨鏃ユ湡"
-          >
-          </el-date-picker>
-        </el-form-item>
-        <div>
-          <div class="title_bar_line">
-            <div class="line_short"></div>
-            <div>鍛ㄥ伐浣滆缃�</div>
-            <div class="line_long"></div>
-          </div>
-          <div
-            class="week_flex"
-            v-for="(item, index) in weekDaysSettingList"
-            :key="index"
-          >
-            <div class="week_flex_item">{{ item.chineseName }}</div>
-            <div class="week_flex_item">
-              <el-radio-group v-model="item.work">
-                <el-radio :label="'y'">宸ヤ綔鏃�</el-radio>
-                <el-radio :label="'n'">闈炲伐浣滄棩</el-radio>
-              </el-radio-group>
-            </div>
-          </div>
-        </div>
-        <div v-if="form.type === '2'">
-          <div class="title_bar_line">
-            <div class="line_short"></div>
-            <div>鑺傚亣鏃ヨ缃�</div>
-            <div class="line_long"></div>
-          </div>
-          <div class="week_flex mt20">
-            <div class="week_flex_item">鑺傛棩寮�濮嬫椂闂�</div>
-            <div class="week_flex_item">
-              <el-date-picker
-                clearable
-                v-model="holidays.startdate"
-                type="date"
-                value-format="YYYY-MM-DD"
-                placeholder="閫夋嫨鏃ユ湡"
-              >
-              </el-date-picker>
-            </div>
-          </div>
-          <div class="week_flex mt20">
-            <div class="week_flex_item">鑺傛棩缁撴潫鏃堕棿</div>
-            <div class="week_flex_item">
-              <el-date-picker
-                clearable
-                v-model="holidays.enddate"
-                type="date"
-                value-format="YYYY-MM-DD"
-                placeholder="閫夋嫨鏃ユ湡"
-              >
-              </el-date-picker>
-            </div>
-          </div>
-        </div>
-        <!-- <el-form-item
-          label="閫傜敤宸ュ巶"
-          prop="applicableFactory"
-          class="factory_use_item"
-        > -->
-        <div class="select_factory select_factory_dis">
-          <span class="error_require">*</span>
-          <span>閫傜敤宸ュ巶/杞﹂棿/宸ュ簭</span>
-        </div>
-        <!-- <el-row :gutter="20" class="select_factory"> -->
-        <div
-          class="select_factory_dis"
-          v-for="(item, index) in applicableSettingList"
-          :key="index"
-        >
-          <!-- <el-col :span="7"> -->
-          <el-select
-            class="select_content"
-            clearable
-            v-model="item.factory"
-            style="width: 160px"
-            placeholder="璇疯緭鍏ラ�傜敤宸ュ巶"
-            @change="changePlant($event)"
-          >
-            <el-option
-              v-for="plant in aps_factory"
-              :key="plant.value"
-              :label="plant.label"
-              :value="`${plant.value};${plant.label}`"
-            >
-            </el-option>
-          </el-select>
-          <!-- </el-col>
-              <el-col :span="7"> -->
-          <el-select
-            class="select_content"
-            clearable
-            v-model="item.workshop"
-            style="width: 160px"
-            placeholder="璇疯緭鍏ラ�傜敤杞﹂棿"
-            @change="changeWorkshop($event)"
-          >
-            <el-option
-              v-for="shop in shopList"
-              :key="shop.id"
-              :label="shop.shopName"
-              :value="`${shop.id};${shop.shopName}`"
-            >
-            </el-option>
-          </el-select>
-          <!-- </el-col>
-              <el-col :span="7"> -->
-          <el-select
-            class="select_content"
-            clearable
-            v-model="item.process"
-            style="width: 160px"
-            placeholder="璇疯緭鍏ラ�傜敤宸ュ簭"
-          >
-            <el-option
-              v-for="process in processList"
-              :key="process.processNumber"
-              :label="process.processName"
-              :value="`${process.processNumber};${process.processName}`"
-            >
-            </el-option>
-          </el-select>
-          <!-- </el-col>
-              <el-col :span="3"> -->
-          <el-button
-            class="select_content"
-            type="primary"
-            icon="Plus"
-            @click="handleAddFactory(item)"
-            circle
-            size="small"
+            placeholder="璇疯緭鍏ヨ鍒掑悕绉�"
           />
-          <el-button
-            v-if="applicableSettingList.length > 1"
-            class="select_content"
-            type="primary"
-            icon="Minus"
-            @click="handleMinusFactory(item)"
-            circle
-            size="small"
-          />
-          <!-- </el-col> -->
-        </div>
-        <!-- </el-row> -->
-        <!-- </el-form-item> -->
-        <!-- <el-form-item
-          label="閫傜敤杞﹂棿"
-          prop="applicableWorkshop"
-          class="factory_use_item"
-        >
         </el-form-item>
-        <el-form-item
-          label="閫傜敤宸ュ簭"
-          prop="applicableProcess"
-          class="factory_use_item"
-        >
-        </el-form-item> -->
+        <el-form-item label="璁″垝绫诲瀷" prop="type" style="width: 100%">
+          <el-radio-group v-model="form.type">
+            <el-radio :label="'0'">瑁呴厤缃垎瑙h鍒�</el-radio>
+            <el-radio :label="'1'">涓昏鍒�</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="璁″垝鎺掍骇鍖哄煙" prop="area" style="width: 100%">
+          <el-select
+            clearable
+            v-model="form.area"
+            placeholder="璇烽�夋嫨璁″垝鎺掍骇鍖哄煙"
+          >
+            <el-option
+              v-for="area in aps_area"
+              :key="area.value"
+              :label="area.label"
+              :value="area.value"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="璁″垝鎺掍骇瑙勫垯" prop="area" style="width: 100%">
+          <el-select
+            clearable
+            v-model="form.rule"
+            placeholder="璇烽�夋嫨璁″垝鎺掍骇瑙勫垯"
+          >
+            <el-option
+              v-for="rule in aps_plan_rule"
+              :key="rule.value"
+              :label="rule.label"
+              :value="rule.value"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
@@ -356,221 +173,77 @@
         </div>
       </template>
     </el-dialog>
+    <!-- 璁″垝鍛ㄦ湡 -->
     <el-dialog
-      title="璁剧疆鑺傚亣鏃�"
-      v-model="openSetHolidays"
+      title="閰嶇疆璁″垝鍛ㄦ湡"
+      v-model="openSetCycle"
       width="80%"
-      style="height: 570px"
       append-to-body
     >
-      <div class="height_dialog">
-        <div class="height_dialog_scroll">
-          <div class="grey_bg">
-            <div v-if="expand">
-              <div class="flex_item">
-                <div>宸ヤ綔鏃ュ巻锛�&nbsp;</div>
-                <div>{{ form.description }}</div>
-              </div>
-              <div class="flex_item">
-                <div>鐢熸晥鏃堕棿锛�&nbsp;</div>
-                <div>{{ form.effectiveDate }}</div>
-              </div>
-              <div class="flex_item">
-                <div>澶辨晥鏃堕棿锛�&nbsp;</div>
-                <div>{{ form.expiringDate }}</div>
-              </div>
-              <div class="flex_item">
-                <div>閫傜敤宸ュ巶锛�&nbsp;</div>
-                <div class="flex_item_dis">
-                  <div
-                    class="flex_item"
-                    v-for="(item, index) in form.applicableTranslate"
-                    :key="index"
-                  >
-                    {{ item }}
-                    <div v-if="item[0].factory">{{ item[0].factory }}</div>
-                    <div v-if="item[2].workshop">-</div>
-                    <div v-if="item[2].workshop">{{ item[2].workshop }}</div>
-                    <div v-if="item[1].process">-</div>
-                    <div v-if="item[1].process">{{ item[1].process }}</div>
-                  </div>
-                </div>
-              </div>
-            </div>
-            <div class="flex_item_expand_end" @click="handleToggleExpand">
-              <el-icon :size="18" v-if="expand"><ArrowUpBold /></el-icon>
-              <el-icon v-else><ArrowDownBold /></el-icon>
-            </div>
-          </div>
-          <div class="title_flex">
-            <div class="holiday_title">鑺傚亣鏃ュ垪琛�</div>
-            <el-button type="primary" size="small" @click="hanldeAddHolidays"
-              >娣诲姞鑺傚亣鏃�</el-button
-            >
-          </div>
-          <div class="grey_bg">
-            <div
-              class="flex_holidays_set"
-              v-for="(item, index) in formHolidays.holidays"
-              :key="index"
-            >
-              <div class="dis_error_wrap">
-                <div class="flex_item">
-                  <div class="flex_item_title">
-                    <span class="error_require">*</span><span>鑺傚亣鏃ユ弿杩�</span>
-                  </div>
-                  <div>
-                    <el-input
-                      style="width: 130px"
-                      v-model="item.describe"
-                      placeholder="璇疯緭鍏ユ弿杩�"
-                    />
-                  </div>
-                </div>
-                <div class="error_text" v-if="item.describe == ''">
-                  璇疯緭鍏ヨ妭鍋囨棩鎻忚堪
-                </div>
-              </div>
-              <div class="dis_error_wrap">
-                <div class="flex_item">
-                  <div class="flex_item_title">
-                    <span class="error_require">*</span><span>寮�濮嬫椂闂�</span>
-                  </div>
-                  <div>
-                    <el-date-picker
-                      style="width: 130px"
-                      clearable
-                      v-model="item.startdate"
-                      type="date"
-                      :disabled-date="handleDisabledDate"
-                      :default-value="form.effectiveDate"
-                      placeholder="閫夋嫨鏃ユ湡"
-                    >
-                    </el-date-picker>
-                  </div>
-                </div>
-                <div class="error_text" v-if="item.startdate == ''">
-                  璇疯緭鍏ュ紑濮嬫椂闂�
-                </div>
-              </div>
-              <div class="dis_error_wrap">
-                <div class="flex_item">
-                  <div class="flex_item_title">
-                    <span class="error_require">*</span><span>缁撴潫鏃堕棿</span>
-                  </div>
-                  <div>
-                    <el-date-picker
-                      style="width: 130px"
-                      clearable
-                      v-model="item.enddate"
-                      type="date"
-                      :disabled-date="handleDisabledDate"
-                      :default-value="form.expiringDate"
-                      placeholder="閫夋嫨鏃ユ湡"
-                    >
-                    </el-date-picker>
-                  </div>
-                </div>
-                <div class="error_text" v-if="item.enddate == ''">
-                  璇疯緭鍏ョ粨鏉熸椂闂�
-                </div>
-              </div>
-              <div class="dis_error_wrap">
-                <div class="flex_item">
-                  <el-button
-                    v-if="formHolidays.length > 1"
-                    type="danger"
-                    size="small"
-                    @click="handleDelSettingHolidays(item)"
-                    >鍒犻櫎</el-button
-                  >
-                </div>
-              </div>
-            </div>
-            <!-- <el-form
-              class="mart10"
-              ref="holidaysRef"
-              :model="item"
-              :rules="holidayRules"
-              :inline="true"
-              label-width="105px"
-            >
-              <div v-for="(item, index) in formHolidays.holidays" :key="index">
-                <el-form-item
-                  label="鑺傚亣鏃ユ弿杩�"
-                  :prop="'holidays.' + index + '.describe'"
-                  :rules="{
-                    required: true,
-                    message: '璇疯緭鍏ヨ妭鍋囨棩鎻忚堪',
-                    trigger: 'blur',
-                  }"
-                >
-                  <el-input
-                    style="width: 130px"
-                    v-model="item.describe"
-                    placeholder="璇疯緭鍏ユ弿杩�"
-                  />
-                </el-form-item>
-                <el-form-item
-                  label="寮�濮嬫椂闂�"
-                  :prop="'holidays.' + index + '.startdate'"
-                  :rules="{
-                    required: true,
-                    message: '璇疯緭鍏ュ紑濮嬫椂闂�',
-                    trigger: 'blur',
-                  }"
-                >
-                  <el-date-picker
-                    style="width: 130px"
-                    clearable
-                    v-model="item.startdate"
-                    type="date"
-                    :disabled-date="handleDisabledDate"
-                    :default-value="form.effectiveDate"
-                    placeholder="閫夋嫨鏃ユ湡"
-                  >
-                  </el-date-picker>
-                </el-form-item>
-                <el-form-item
-                  label="缁撴潫鏃堕棿"
-                  :prop="'holidays.' + index + '.enddate'"
-                  :rules="{
-                    required: true,
-                    message: '璇疯緭鍏ョ粨鏉熸椂闂�',
-                    trigger: 'blur',
-                  }"
-                >
-                  <el-date-picker
-                    style="width: 130px"
-                    clearable
-                    v-model="item.enddate"
-                    type="date"
-                    placeholder="閫夋嫨鏃ユ湡"
-                    :disabled-date="handleDisabledDate"
-                    :default-value="form.expiringDate"
-                  >
-                  </el-date-picker>
-                </el-form-item>
-                <el-form-item label="" prop="">
-                  <el-button
-                    v-if="formHolidays.length > 1"
-                    type="danger"
-                    size="small"
-                    @click="handleDelSettingHolidays(item)"
-                    >鍒犻櫎</el-button
-                  >
-                </el-form-item>
-              </div>
-            </el-form> -->
-          </div>
-        </div>
-      </div>
+      <el-form
+        ref="planManageRef"
+        :model="formCycle.cycle"
+        :rules="rules"
+        label-width="140px"
+      >
+        <el-form-item label="鍛ㄦ湡绫诲瀷" prop="type" style="width: 100%">
+          <el-radio-group
+            v-model="formCycle.cycle.type"
+            @change="handleChangeTypeMonthDay"
+          >
+            <el-radio :label="'0'">鏃�</el-radio>
+            <el-radio :label="'1'">鏈�</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="婊氬姩鏂瑰紡" prop="rollType" style="width: 100%">
+          <el-radio-group
+            v-model="formCycle.cycle.rollType"
+            @change="handleChangeTypeMonthDay"
+          >
+            <el-radio :label="'0'">鏃ユ粴鍔�</el-radio>
+            <el-radio :label="'1'">鏈堟粴鍔�</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="璁″垝鍛ㄦ湡" prop="period" style="width: 100%">
+          <el-input-number
+            v-model="formCycle.cycle.period"
+            size="mini"
+            @change="handleChangeTypeMonthDay"
+          />
+        </el-form-item>
+        <el-form-item
+          label="鍛ㄦ湡寮�濮嬫椂闂�"
+          prop="periodStart"
+          style="width: 100%"
+        >
+          <el-date-picker
+            clearable
+            v-model="formCycle.cycle.periodStart"
+            type="date"
+            :disabled-date="handleDisabledDate"
+            :default-value="formCycle.cycle.periodStart"
+            placeholder="閫夋嫨鏃ユ湡"
+            @change="handleChangeTypeMonthDay"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="鍛ㄦ湡缁撴潫鏃堕棿" prop="periodEnd" style="width: 100%">
+          <el-date-picker
+            clearable
+            disabled
+            v-model="formCycle.cycle.periodEnd"
+            type="date"
+            :default-value="formCycle.cycle.periodEnd"
+            placeholder="閫夋嫨鏃ユ湡"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+
       <template #footer>
         <div class="dialog-footer">
-          <el-button @click="openSetHolidays = false">鍙� 娑�</el-button>
-          <el-button type="primary" @click="handleSaveHolidaysForm"
-            >淇濆瓨</el-button
-          >
+          <el-button @click="openSetCycle = false">鍙� 娑�</el-button>
+          <el-button type="primary" @click="submitFormCycle">淇濆瓨</el-button>
         </div>
       </template>
     </el-dialog>
@@ -581,24 +254,20 @@
 import moment from "moment";
 import HxlhTable from "@/components/HxlhTable";
 import {
-  listCalendar,
-  getCalendar,
-  delCalendar,
-  addCalendar,
-  updateCalendar,
-} from "@/api/basicData/calendar";
-import axios from "axios";
-import { listAll_plant, listByWorkShop } from "@/api/basicData/plant";
-import { listAll_shop, listAps_shop } from "@/api/basicData/shop";
-import { selectProcessNameList } from "@/api/basicData/processRoute.js";
-import { ElMessage } from "element-plus";
+  getApsPlanManagementList,
+  apsPlanManagementSave,
+  delApsPlanManagementList,
+  redundantOrderList,
+  apsPlanManagementUpdate,
+} from "@/api/demand/planManage";
 const { proxy } = getCurrentInstance();
-const holidaysRef = ref(null);
-const { aps_factory } = proxy.useDict("aps_factory");
+const router = useRouter();
+const { aps_area } = proxy.useDict("aps_area");
+const { aps_plan_rule } = proxy.useDict("aps_plan_rule");
 const tableRef = ref();
 const calendarList = ref([]);
 const open = ref(false);
-const openSetHolidays = ref(false);
+const openSetCycle = ref(false);
 const expand = ref(true);
 const loading = ref(true);
 const showSearch = ref(true);
@@ -609,229 +278,113 @@
 const title = ref("");
 const data = reactive({
   form: {
-    type: "1",
-    applicable: [
-      {
-        factory: "",
-        workshop: "",
-        process: "",
-      },
-    ],
-    applicableTranslate: [{ factory: "" }, { workshop: "" }, { process: "" }],
+    name: "",
+    rule: "",
+    area: "",
+    type: "0",
   },
-  formHolidays: {
-    holidays: [
-      {
-        enddate: "",
-        startdate: "",
-        describe: "",
-      },
-    ],
+  formCycle: {
+    cycle: {
+      type: "0",
+      rollType: "0",
+      period: "1",
+      periodStart: moment(Date.now()).format("YYYY-MM-DD"),
+      periodEnd: "",
+    },
   },
   queryParams: {
     pageNum: 1,
     pageSize: 10,
-    description: null,
-    plant: null,
-    type: null,
-    effectiveDate: null,
-    expiringDate: null,
-    content: null,
-    applicableFactory: null,
-    applicableWorkshop: null,
-    applicableProcess: null,
+    name: "",
   },
   rules: {
-    description: [
+    name: [
       {
         required: true,
-        message: "璇疯緭鍏ユ棩鍘嗘弿杩�",
+        message: "璇疯緭鍏ヨ鍒掑悕绉�",
         trigger: "blur",
       },
     ],
-    // type: [
-    //   {
-    //     required: true,
-    //     message: "璇烽�夋嫨鏃ュ巻绫诲瀷",
-    //     trigger: "blur",
-    //   },
-    // ],
-    effectiveDate: [
+    type: [
       {
         required: true,
-        message: "璇烽�夋嫨鏃ュ巻鐢熸晥鏃堕棿",
+        message: "璇烽�夋嫨璁″垝绫诲瀷",
         trigger: "blur",
       },
     ],
-    expiringDate: [
+    area: [
       {
         required: true,
-        message: "璇烽�夋嫨鏃ュ巻澶辨晥鏃堕棿",
+        message: "璇烽�夋嫨璁″垝鎺掍骇鍖哄煙",
+        trigger: "blur",
+      },
+    ],
+    rule: [
+      {
+        required: true,
+        message: "璇烽�夋嫨璁″垝鎺掍骇瑙勫垯",
         trigger: "blur",
       },
     ],
   },
-  // holidayRules: {
-  //   describe: [
-  //     {
-  //       required: true,
-  //       message: "璇疯緭鍏ヨ妭鍋囨棩鎻忚堪",
-  //       trigger: "blur",
-  //     },
-  //   ],
-  //   startdate: [
-  //     {
-  //       required: true,
-  //       message: "璇疯緭鍏ュ紑濮嬫椂闂�",
-  //       trigger: "blur",
-  //     },
-  //   ],
-  //   enddate: [
-  //     {
-  //       required: true,
-  //       message: "璇疯緭鍏ョ粨鏉熸椂闂�",
-  //       trigger: "blur",
-  //     },
-  //   ],
-  // },
 });
-const holidayRules = {
-  holidays: [{ required: true, message: "鑺傚亣鏃ユ槸蹇呭~椤�", trigger: "blur" }],
-};
-const { queryParams, form, rules, formHolidays } = toRefs(data);
-const dateType = ref("鍛ㄥ伐浣�");
-const dateTypeList = ref([
-  {
-    name: "鍛ㄥ伐浣�",
-    label: "1",
-  },
-  {
-    name: "鑺傚亣鏃�",
-    label: "2",
-  },
-]);
-const typeRadioNumber = ref(1);
-const applicableSettingList = ref([
-  { factory: "", workshop: "", process: "", id: 0 },
-]);
-const weekDaysSettingList = ref([
-  {
-    day: "Monday",
-    chineseName: "鏄熸湡涓�",
-    work: "y",
-  },
-  {
-    day: "Tuesday",
-    chineseName: "鏄熸湡浜�",
-    work: "y",
-  },
-  {
-    day: "Wednesday",
-    chineseName: "鏄熸湡涓�",
-    work: "y",
-  },
-  {
-    day: "Thursday",
-    chineseName: "鏄熸湡鍥�",
-    work: "y",
-  },
-  {
-    day: "Friday",
-    chineseName: "鏄熸湡浜�",
-    work: "y",
-  },
-  {
-    day: "Saturday",
-    chineseName: "鏄熸湡鍏�",
-    work: "y",
-  },
-  {
-    day: "Sunday",
-    chineseName: "鏄熸湡鏃�",
-    work: "y",
-  },
-]);
-const holidays = ref({
-  startdate: "",
-  enddate: "",
-});
-const plantList = ref([]);
+const { queryParams, form, rules, formCycle } = toRefs(data);
+const checkedRow = ref({});
 const shopList = ref([]);
 const allShopList = ref([]);
 const processList = ref([]);
 const height = ref(document.documentElement.clientHeight - 220 + "px;");
 // 琛ㄦ牸閰嶇疆-鍒楄〃
 const columns = ref([
-//   { type: "checkbox", width: 60, align: "center" },
+  { type: "checkbox", width: 60, align: "center" },
   {
-    title: "婊氬姩鏂瑰紡",
-    field: "description",
+    title: "璁″垝ID",
+    field: "id",
     width: 150,
     align: "center",
   },
   {
-    title: "璁″垝鍛ㄦ湡",
+    title: "璁″垝鍚嶇О",
+    field: "name",
+    width: 200,
+    align: "center",
+  },
+  {
+    title: "璁″垝绫诲瀷",
     field: "type",
     width: 200,
     align: "center",
-    slots: { default: "status" },
   },
   {
-    title: "鍛ㄦ湡寮�濮嬫椂闂�",
-    field: "effectiveDate",
+    title: "璁″垝鎺掍骇鍖哄煙",
+    field: "area",
     width: 200,
     align: "center",
+    formatter: ({ cellValue, row, column }) => {
+      if (cellValue) {
+        for (let i = 0; i < aps_area.value.length; i++) {
+          if (cellValue === aps_area.value[i].value) {
+            return aps_area.value[i].label;
+          }
+        }
+      }
+    },
   },
   {
-    title: "鍛ㄦ湡缁撴潫鏃堕棿",
-    field: "expiringDate",
-    width: 200,
-    align: "center",
-  },
-  {
-    title: "璁″垝ID",
-    field: "content",
+    title: "璁″垝鎺掍骇瑙勫垯",
+    field: "rule",
     width: 230,
     align: "center",
-    slots: { default: "mark" },
+    formatter: ({ cellValue, row, column }) => {
+      if (cellValue) {
+        for (let i = 0; i < aps_plan_rule.value.length; i++) {
+          if (cellValue === aps_plan_rule.value[i].value) {
+            return aps_plan_rule.value[i].label;
+          }
+        }
+      }
+    },
   },
-  // {
-  //   title: "閫傜敤宸ュ巶",
-  //   field: "applicableFactory",
-  //   width: 200,
-  //   align: "center",
-  //   formatter: ({ cellValue, row, column }) => {
-  //     if (cellValue) {
-  //       for (let i = 0; i < plantList.value.length; i++) {
-  //         if (cellValue === plantList.value[i].plantCode) {
-  //           return plantList.value[i].plantName;
-  //         }
-  //       }
-  //     }
-  //   },
-  // },
-  // {
-  //   title: "閫傜敤杞﹂棿",
-  //   field: "applicableWorkshop",
-  //   width: 200,
-  //   align: "center",
-  //   formatter: ({ cellValue, row, column }) => {
-  //     if (cellValue) {
-  //       for (let i = 0; i < shopList.value.length; i++) {
-  //         if (cellValue === shopList.value[i].id) {
-  //           return shopList.value[i].shopName;
-  //         }
-  //       }
-  //     }
-  //     return "";
-  //   },
-  // },
-  // {
-  //   title: "閫傜敤宸ュ簭",
-  //   field: "applicableProcess",
-  //   width: 200,
-  //   align: "center",
-  // },
   {
     title: "鍒涘缓鑰�",
     field: "createBy",
@@ -844,15 +397,15 @@
     width: 200,
     align: "center",
   },
-    {
+  {
     title: "鏇存柊鑰�",
-    field: "createBy",
+    field: "updateBy",
     width: 200,
     align: "center",
   },
   {
     title: "鏇存柊鏃堕棿",
-    field: "createTime",
+    field: "updateTime",
     width: 200,
     align: "center",
   },
@@ -870,31 +423,50 @@
   current: 1,
   size: 10,
 });
-
+// 绂佺敤鏃ユ湡
+function handleDisabledDate(time) {
+  return time.getTime() < Date.now() - 86400000 * 1;
+}
+function handleChangeTypeMonthDay() {
+  console.log(formCycle.value.cycle.periodStart);
+  if (formCycle.value.cycle.type == 0) {
+    if (formCycle.value.cycle.rollType == 0) {
+      let nowTime = moment(formCycle.value.cycle.periodStart)
+        .startOf("day")
+        .valueOf();
+      let period = formCycle.value.cycle.period * 86400000 * 1;
+      let endDate = nowTime * 1 + period * 1;
+      formCycle.value.cycle.periodEnd = moment(endDate).format("YYYY-MM-DD");
+    } else {
+      let nowTime = moment(formCycle.value.cycle.periodStart)
+        .startOf("day")
+        .add(formCycle.value.cycle.period, "months")
+        .valueOf();
+      formCycle.value.cycle.periodEnd = moment(nowTime).format("YYYY-MM-DD");
+    }
+  } else {
+    let nowTime = moment(formCycle.value.cycle.periodStart)
+      .startOf("day")
+      .add(formCycle.value.cycle.period, "months")
+      .valueOf();
+    formCycle.value.cycle.periodEnd = moment(nowTime).format("YYYY-MM-DD");
+  }
+}
+function handleSetPeriod(e) {
+  console.log(e);
+  formCycle.value.periodEnd;
+}
 /** 鏌ヨ鏃ュ巻绠$悊鍒楄〃 */
 function getList() {
   loading.value = true;
-  listCalendar(queryParams.value).then((response) => {
-    calendarList.value = response.rows;
-    page.value.total = response.total;
-    loading.value = false;
-  });
-  axios
-    .all([
-      /** 鏌ヨ宸ュ巶鍒楄〃 */
-      listAll_plant({}),
-      /** 鏌ヨ杞﹂棿鍒楄〃 */
-      listAll_shop({}),
-    ])
-    .then(
-      axios.spread((response1, response2) => {
-        plantList.value = response1.data;
-        shopList.value = response2.data;
-        loading.value = false;
-      })
-    )
-    .catch((error) => {
-      console.error("璇锋眰鍑洪敊:", error);
+  getApsPlanManagementList(queryParams.value)
+    .then((response) => {
+      calendarList.value = response.rows;
+      page.value.total = response.total;
+      loading.value = false;
+    })
+    .catch(() => {
+      loading.value = false;
     });
 }
 
@@ -914,415 +486,127 @@
   proxy.resetForm("queryRef");
   handleQuery();
 }
-
-// 澶氶�夋閫変腑鏁版嵁
-function handleSelectionChange(selection) {
-  ids.value = selection.map((item) => item.id);
-  single.value = selection.length != 1;
-  multiple.value = !selection.length;
-}
-
 /** 鏂板鎸夐挳鎿嶄綔 */
 async function handleAdd() {
   open.value = true;
   form.value = {
-    type: "1",
-    description: "",
-    expiringDate: "",
-    effectiveDate: "",
-    applicable: [
-      {
-        factory: "",
-        workshop: "",
-        process: "",
-      },
-    ],
-    applicableTranslate: [{ factory: "" }, { workshop: "" }, { process: "" }],
+    name: "",
+    rule: "",
+    area: "",
   };
-  weekDaysSettingList.value = [
-    {
-      day: "Monday",
-      chineseName: "鏄熸湡涓�",
-      work: "y",
-    },
-    {
-      day: "Tuesday",
-      chineseName: "鏄熸湡浜�",
-      work: "y",
-    },
-    {
-      day: "Wednesday",
-      chineseName: "鏄熸湡涓�",
-      work: "y",
-    },
-    {
-      day: "Thursday",
-      chineseName: "鏄熸湡鍥�",
-      work: "y",
-    },
-    {
-      day: "Friday",
-      chineseName: "鏄熸湡浜�",
-      work: "y",
-    },
-    {
-      day: "Saturday",
-      chineseName: "鏄熸湡鍏�",
-      work: "y",
-    },
-    {
-      day: "Sunday",
-      chineseName: "鏄熸湡鏃�",
-      work: "y",
-    },
-  ];
-  title.value = "娣诲姞鏃ュ巻绠$悊";
+  title.value = "鏂板璁″垝";
 }
-/** 閫夋嫨宸ュ巶鍚庝簨浠� 鍔犺浇杞﹂棿 鍜� 宸ュ簭 **/
-function changePlant(plant) {
-  console.log(plant);
-  listAps_shop({ plantCode: plant.split(";")[0] }).then((response) => {
-    shopList.value = response.rows;
-  });
-  // selectProcessNameList({ orgCode: plant }).then((response) => {
-  //   processList.value = response.rows;
-  // });
-}
-function changeWorkshop(workShop) {
-  console.log(workShop.split(";")[0]);
-  listByWorkShop({ workShop: workShop.split(";")[0] }).then((res) => {
-    console.log(res, "workShop");
-    processList.value = res.rows;
-  });
-}
-function handleAddFactory(row) {
-  console.log(row);
-  applicableSettingList.value.push({ ...row, id: ++row.id });
-}
-function handleMinusFactory(row) {
-  applicableSettingList.value = applicableSettingList.value.filter(
-    (item, index) => item !== row
-  );
-}
+
 /** 淇敼鎸夐挳鎿嶄綔 */
 function handleUpdate(row) {
-  const _id = row.id || ids.value;
+  console.log(checkedRow.value, row, "淇敼璁″垝绠$悊000");
   open.value = true;
-  title.value = "淇敼鏃ュ巻绠$悊";
-  getCalendar(_id).then((response) => {
-    form.value = response.data;
-    applicableSettingList.value = JSON.parse(response.data.applicableTranslate);
-    console.log(response.data, "response.data");
-    form.value.content = JSON.parse(response.data.content.value);
-    weekDaysSettingList.value = response.data.content.weekdays;
-
-    //  else if (form.value.type === "2") {
-    //   holidays.value = JSON.parse(response.data.content.value).holidays;
-    // }
-  });
-}
-// 璁剧疆鑺傚亣鏃�
-function handleSetHolidays(row) {
-  let applicableTranslateArr = JSON.parse(row.applicableTranslate).map(
-    (item) => {
-      return Object.keys(item).map((n) => {
-        console.log(item);
-        let arrObj = {};
-        if (item[n] && item[n].indexOf(";") > 0) {
-          arrObj[n] = item[n].split(";")[1];
-        } else {
-          arrObj[n] = item[n];
-        }
-        return arrObj;
-      });
-    }
-  );
-  console.log(applicableTranslateArr, "applicableTranslateArr");
-  form.value = {
-    ...row,
-    applicableTranslate: applicableTranslateArr,
-  };
-  if (!row.holidays) {
-    formHolidays.value = {
-      holidays: [
-        {
-          enddate: "",
-          startdate: "",
-          describe: "",
-        },
-      ],
-    };
-  } else {
-    formHolidays.value.holidays = JSON.parse(row.holidays.value);
+  title.value = "淇敼璁″垝绠$悊";
+  if (!row) {
+    form.value = checkedRow.value;
+    return;
   }
-  // console.log(formHolidays.value.holidays, "formHolidays.value");
-  openSetHolidays.value = true;
+  form.value = row;
 }
-// 绂佺敤鏃ユ湡
-function handleDisabledDate(date) {
-  const targetDate = moment(date).valueOf();
-  const startDate = moment(form.value.effectiveDate).valueOf();
-  const endDate = moment(form.value.expiringDate).valueOf();
-  return targetDate < startDate || targetDate > endDate;
-}
-// 鍒犻櫎鑺傚亣鏃ヨ缃�
-function handleDelSettingHolidays(row) {
-  formHolidays.value.holidays = formHolidays.value.holidays.filter((item) => {
-    return item != row;
-  });
-}
-// 娣诲姞鑺傚亣鏃�
-function hanldeAddHolidays() {
-  formHolidays.value.holidays.push({
-    enddate: "",
-    startdate: "",
-    describe: "",
-  });
+// 璁″垝鍛ㄦ湡
+function handleSetCycle(row) {
+  openSetCycle.value = true;
+  if (!row.cycle) {
+    formCycle.value = {
+      cycle: {
+        type: "0",
+        rollType: "0",
+        period: "1",
+        periodStart: moment(Date.now()).format("YYYY-MM-DD"),
+        periodEnd: "",
+      },
+    };
+    let nowTime = moment(formCycle.value.cycle.periodStart)
+      .startOf("day")
+      .valueOf();
+    let period = formCycle.value.cycle.period * 86400000 * 1;
+    let endDate = nowTime * 1 + period * 1;
+    formCycle.value.cycle.periodEnd = moment(endDate).format("YYYY-MM-DD");
+  } else {
+    formCycle.value = row;
+  }
+  console.log(formCycle.value, "formCycle.value");
 }
 function handleToggleExpand() {
   expand.value = !expand.value;
 }
-// const confirmClick = () => {
-//     let formList = [predictionFormRef]
-//     let resultArr = [];
-//     let validate = (form) => {
-//         let result = new Promise((resolve, reject) => {
-//             form.value.validate(valid => {
-//                 if (valid) {
-//                     resolve()
-//                 } else {
-//                     reject()
-//                 }
-//             })
-//         })
-//         resultArr.push(result)
-//     }
-//     formList.forEach(item => {
-//         validate(item)
-//     })
-//     Promise.all(resultArr).then(() => {
-//         saveRule() // 鏍¢獙鎴愬姛涔嬪悗 淇濆瓨鏁版嵁鐨勬柟娉�
-//     })
-// }
-// const submitForm = () => {
-//   formRef.value.validate((valid) => {
-//     if (valid) {
-//       alert('submit!');
-//     } else {
-//       alert('Form is not valid.');
-//       return false;
-//     }
-//   });
-// };
-function checkFieldsEmpty(arr) {
-  let filteredArr = arr.filter((item) => {
-    return Object.values(item).some(
-      (value) => value == null || value == "" || value == undefined
-    );
-  });
-  return filteredArr;
-}
-// 鎻愪氦鑺傚亣鏃�
-function handleSaveHolidaysForm() {
-  const hasValidDates = checkFieldsEmpty(formHolidays.value.holidays);
-  console.log(hasValidDates, "hasValidDates");
-  if (hasValidDates.length == 0) {
-    updateCalendar({
-      id: form.value.id,
-      holidays: formHolidays.value.holidays.map((item) => {
-        return {
-          startdate: moment(item.startdate).format("YYYY-MM-DD"),
-          enddate: moment(item.enddate).format("YYYY-MM-DD"),
-          describe: item.describe,
-        };
-      }),
-    }).then((response) => {
-      proxy.$modal.msgSuccess("鏂板鎴愬姛");
-      openSetHolidays.value = false;
-      getList();
-    });
-  }
-  // holidaysRef.value.validate((valid) => {
-  //   if (!valid) {
-  //     proxy.$modal.msgSuccess("蹇呭~椤逛笉鑳戒负绌�");
-  //   }
-  //   if (valid) {
-  // if (!hasValidDates) {
-  // updateCalendar({
-  //   id: form.value.id,
-  //   holidays: formHolidays.value.holidays.map((item) => {
-  //     return {
-  //       startdate: moment(item.startdate).format("YYYY-MM-DD"),
-  //       enddate: moment(item.enddate).format("YYYY-MM-DD"),
-  //       describe: item.describe,
-  //     };
-  //   }),
-  // }).then((response) => {
-  //   proxy.$modal.msgSuccess("鏂板鎴愬姛");
-  //   open.value = false;
-  //   getList();
-  // });
-  //   }
-  // });
-  //if (valid) {
-  // if (!hasValidDates) {
-  //   updateCalendar({
-  //     id: form.value.id,
-  //     holidays: formHolidays.value.holidays.map((item) => {
-  //       return {
-  //         startdate: moment(item.startdate).format("YYYY-MM-DD"),
-  //         enddate: moment(item.enddate).format("YYYY-MM-DD"),
-  //         describe: item.describe,
-  //       };
-  //     }),
-  //   }).then((response) => {
-  //     proxy.$modal.msgSuccess("鏂板鎴愬姛");
-  //     open.value = false;
-  //     getList();
-  //   });
-  // }
-  // });
-}
 /** 鎻愪氦鎸夐挳 */
 function submitForm() {
-  proxy.$refs["calendarRef"].validate((valid) => {
+  proxy.$refs["planManageRef"].validate((valid) => {
     if (valid) {
-      if (applicableSettingList.value[0].factory === "") {
-        ElMessage({
-          type: "error",
-          message: "鑷冲皯閫夋嫨涓�涓�傜敤宸ュ巶",
-        });
-        return;
-      }
       if (form.value.id != null) {
-        updateCalendar({
-          // ...form.value,
-          id: form.value.id,
-          expiringDate: form.value.expiringDate,
-          effectiveDate: form.value.effectiveDate,
-          description: form.value.description,
-          content: {
-            weekdays: weekDaysSettingList.value,
-          },
-          // holidays: holidays.value,
-          applicable: applicableSettingList.value.map((item) => {
-            return {
-              factory: item.factory
-                ? item.factory.indexOf(";") > 0
-                  ? item.factory.split(";")[0]
-                  : item.factory
-                : "",
-              process: item.process
-                ? item.process.indexOf(";") > 0
-                  ? item.process.split(";")[0]
-                  : item.process
-                : "",
-              workshop: item.workshop
-                ? item.workshop.indexOf(";") > 0
-                  ? item.workshop.split(";")[0]
-                  : item.workshop
-                : "",
-            };
-          }),
-          applicableTranslate: JSON.stringify(
-            applicableSettingList.value.map((item) => {
-              return {
-                factory: item.factory ? item.factory : "",
-                process: item.process ? item.process : "",
-                workshop: item.workshop ? item.workshop : "",
-              };
-            })
-          ),
-          type: "1",
-        }).then((response) => {
-          proxy.$modal.msgSuccess("淇敼鎴愬姛");
-          open.value = false;
-          getList();
-        });
-        // }
-      } else {
-        addCalendar({
+        apsPlanManagementUpdate({
           ...form.value,
-          content: {
-            weekdays: weekDaysSettingList.value,
-          },
-          // holidays: holidays.value,
-          applicable: applicableSettingList.value.map((item) => {
-            return {
-              factory: item.factory
-                ? item.factory.indexOf(";") > 0
-                  ? item.factory.split(";")[0]
-                  : item.factory
-                : "",
-              process: item.process
-                ? item.process.indexOf(";") > 0
-                  ? item.process.split(";")[0]
-                  : item.process
-                : "",
-              workshop: item.workshop
-                ? item.workshop.indexOf(";") > 0
-                  ? item.workshop.split(";")[0]
-                  : item.workshop
-                : "",
-            };
-          }),
-          applicableTranslate: JSON.stringify(
-            applicableSettingList.value.map((item) => {
-              return {
-                factory: item.factory ? item.factory : "",
-                process: item.process ? item.process : "",
-                workshop: item.workshop ? item.workshop : "",
-              };
-            })
-          ),
-          type: "1",
-          // applicableCn:
-          //},
-        }).then((response) => {
-          proxy.$modal.msgSuccess("鏂板鎴愬姛");
-          open.value = false;
-          getList();
-        });
-        // }
+        })
+          .then((res) => {
+            if (res.code == 200) {
+              proxy.$modal.msgSuccess("淇敼鎴愬姛");
+              open.value = false;
+              getList();
+            }
+          })
+          .catch(() => {
+            open.value = false;
+          });
+      } else {
+        apsPlanManagementSave({
+          ...form.value,
+        })
+          .then((res) => {
+            if (res.code == 200) {
+              proxy.$modal.msgSuccess("鏂板鎴愬姛");
+              open.value = false;
+              getList();
+            }
+          })
+          .catch(() => {
+            open.value = false;
+          });
       }
     }
   });
 }
-
+function submitFormCycle() {
+  redundantOrderList({
+    ...formCycle.value.cycle,
+    planId: formCycle.value.id,
+  })
+    .then((res) => {
+      if (res.code === 200) {
+        proxy.$modal.msgSuccess("鏇存柊鎴愬姛");
+        openSetCycle.value = false;
+      } else {
+        openSetCycle.value = false;
+      }
+    })
+    .catch(() => {
+      openSetCycle.value = false;
+    });
+  getList();
+}
+function handleGoToCycle() {
+  router.push({
+    path: "/demand/planManageCycle",
+  });
+}
 /** 鍒犻櫎鎸夐挳鎿嶄綔 */
 function handleDelete(row) {
   const _ids = row.id || ids.value;
   proxy.$modal
-    .confirm('鏄惁纭鍒犻櫎鏃ュ巻绠$悊缂栧彿涓�"' + _ids + '"鐨勬暟鎹」锛�')
+    .confirm('鏄惁纭鍒犻櫎璁″垝绠$悊缂栧彿涓�"' + _ids + '"鐨勬暟鎹」锛�')
     .then(function () {
-      return delCalendar(_ids);
+      return delApsPlanManagementList(_ids);
     })
     .then(() => {
       getList();
       proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
     })
     .catch(() => {});
-}
-
-/** 瀵煎嚭鎸夐挳鎿嶄綔 */
-function handleExport() {
-  proxy.download(
-    "core/calendar/export",
-    {
-      ...queryParams.value,
-    },
-    `calendar_${new Date().getTime()}.xlsx`
-  );
-}
-function handleSwitchType(e) {
-  typeRadioNumber.value = e;
-  form.value.type = e;
-  form.value.effectiveDate = null;
-  form.value.expiringDate = null;
-  form.value.content = null;
-  form.value.applicableFactory = null;
-  form.value.applicableWorkshop = null;
-  form.value.applicableProcess = null;
 }
 function changePageNo(currentPage) {
   queryParams.value.pageNum = currentPage;
@@ -1340,6 +624,9 @@
   ids.value = data.records.map((item) => item.id);
   single.value = data.records.length !== 1;
   multiple.value = !data.records.length;
+  if (data.records.length === 1) {
+    checkedRow.value = data.records[0];
+  }
 };
 onMounted(() => {
   getList();

--
Gitblit v1.9.3