ソースを参照

ソース対応

liuxf 4 ヶ月 前
コミット
4eee2b6c29
2 ファイル変更56 行追加63 行削除
  1. 10 10
      src/views/fcbi/sales/sumResult.vue
  2. 46 53
      src/views/fcbi/sales/sumSettings.vue

+ 10 - 10
src/views/fcbi/sales/sumResult.vue

@@ -102,9 +102,9 @@ const data = reactive({
   queryParams: {
     pageNum: 1,
     pageSize: 50,
-    monthYear: '',
-    startMonth: '',
     startYear: '',
+    startMonth: '',
+    annual: '',
     brandCode: [],
     regions: [],
     salesFlag: 0
@@ -116,18 +116,18 @@ const {queryParams} = toRefs(data);
 
 onMounted(() => {
   const {
-    monthYear,
-    startMonth,
     startYear,
+    startMonth,
+    annual,
     brandCodes,
     regionCodes,
     salesFlag,
     aggregationType
   } = surveySalesStore.salesData;
 
-  queryParams.value.monthYear = monthYear;
-  queryParams.value.startMonth = startMonth;
   queryParams.value.startYear = startYear;
+  queryParams.value.startMonth = startMonth;
+  queryParams.value.annual = annual;
   queryParams.value.regionCodes = regionCodes;
   queryParams.value.brandCodes = brandCodes;
   queryParams.value.salesFlag = salesFlag;
@@ -145,10 +145,10 @@ function getSearchList() {
     pageNum: queryParams.value.pageNum,
     pageSize: queryParams.value.pageSize,
     // 月指定参数(仅当月指定时有效)
-    monthYear: queryParams.value.monthYear,
+    startYear: queryParams.value.startYear,
     startMonth: queryParams.value.startMonth,
     // 年度指定参数(仅当年度指定时有效)
-    startYear: queryParams.value.startYear,
+    annual: queryParams.value.annual,
     // FC选择值
     brandCodes: queryParams.value.brandCodes,
     // エリア选择值
@@ -194,10 +194,10 @@ function handleExportCSV() {
     pageNum: queryParams.value.pageNum,
     pageSize: queryParams.value.pageSize,
     // 月指定参数(仅当月指定时有效)
-    monthYear: queryParams.value.monthYear,
+    startYear: queryParams.value.startYear,
     startMonth: queryParams.value.startMonth,
     // 年度指定参数(仅当年度指定时有效)
-    startYear: queryParams.value.startYear,
+    annual: queryParams.value.annual,
     // FC选择值
     brandCodes: queryParams.value.brandCodes,
     // エリア选择值

+ 46 - 53
src/views/fcbi/sales/sumSettings.vue

@@ -46,7 +46,6 @@
             </el-radio>
             <div class="annual-row">
               <div class="date-group">
-                <!-- 日期选择器代码保持不变 -->
                 <el-select v-model="queryParams.annual" placeholder="" class="date-select"
                            :disabled="queryParams.targetPeriodType !== TARGET_PERIOD_TYPE.ANNUAL">
                   <el-option v-for="year in years" :key="year" :label="year" :value="year"></el-option>
@@ -74,7 +73,7 @@
           :show-business-type="false"
       />
       <div class="btn-section" style="padding-left: 78px; margin-top: 25px;">
-        <button class="operate-btn" @click="handleConfirm" v-hasPermi="['fcbi:sales:sum']">集計</button>
+        <button class="operate-btn" @click="handleAggregate" v-hasPermi="['fcbi:sales:sum']">集計</button>
       </div>
     </div>
   </div>
@@ -88,19 +87,20 @@ import { useSurveyStore, useSurveySalesStore } from '@/store/surveyStore';
 import { useRouter } from 'vue-router';
 import { AGGREGATION_TYPE, TARGET_PERIOD_TYPE } from '@/constants';
 
+const currentYear = new Date().getFullYear();
+const years = Array.from({ length: 11 }, (_, i) => currentYear + i);
+const months = Array.from({ length: 12 }, (_, i) => i + 1);
+const error = ref('');
 const { proxy } = getCurrentInstance();
 const surveyStore = useSurveyStore();
 const surveySalesStore = useSurveySalesStore();
 const router = useRouter();
 
-// 导出常量以便在模板中使用
-defineExpose({
-  AGGREGATION_TYPE,
-  TARGET_PERIOD_TYPE
-});
+// テンプレートで定数を使用可能にするため、エクスポートします
+defineExpose({ AGGREGATION_TYPE, TARGET_PERIOD_TYPE });
 
 /**
- * データ辞書から品牌と業務タイプのデータを取得します
+ * データ辞書からブランドと業務タイプのデータを取得します
  */
 const { yamada_fc_brand: yamadaFcBrand } = proxy.useDict('yamada_fc_brand');
 const { yamada_business_type: yamadaBusinessType } = proxy.useDict('yamada_business_type');
@@ -110,10 +110,6 @@ const { yamada_business_type: yamadaBusinessType } = proxy.useDict('yamada_busin
  */
 const regionTree = ref([]);
 const selectedRegions = ref([]);
-const error = ref('');
-const currentYear = new Date().getFullYear();
-const years = Array.from({ length: 11 }, (_, i) => currentYear + i);
-const months = Array.from({ length: 12 }, (_, i) => i + 1);
 
 /**
  * フォームの入力データを保持するオブジェクトです
@@ -137,7 +133,7 @@ const { queryParams } = toRefs(data);
  * 地域ツリーのデータが更新されたときに、選択された地域を更新します
  */
 watch(() => regionTree.value, (newVal) => {
-  if (newVal && newVal.length > 0) {
+  if (newVal?.length) {
     updateSelectedRegions(newVal);
   }
 }, { deep: true });
@@ -164,9 +160,10 @@ onMounted(async () => {
     if (response?.success) {
       const regions = response.data.regions || [];
       regionTree.value = regions;
+      console.log(regions);
       surveyStore.setRegionTree(regions)
-      if (regionTree.value.length > 0) {
-        updateSelectedRegions(regionTree.value);
+      if (regions.length) {
+        updateSelectedRegions(regions);
       }
     } else {
       error.value = response?.message || '地域データの取得に失敗しました';
@@ -174,8 +171,8 @@ onMounted(async () => {
       console.error('地域データの取得に失敗しました:', response);
     }
   } catch (err) {
-    error.value = '地域データの取得中にエラーが発生しました';
-    proxy.$message.error(error.value);
+    const errorMsg = '地域データの取得中にエラーが発生しました';
+    proxy.$message.error(errorMsg);
     console.error('地域データの取得中にエラーが発生しました:', err);
   }
 });
@@ -185,25 +182,23 @@ onMounted(async () => {
  */
 const handleCheckChange = (regionId, isChecked) => {
   const region = findRegionById(regionTree.value, regionId);
-  if (region) {
-    if (isChecked) {
-      if (!selectedRegions.value.some(r => r.regionCode === region.regionCode)) {
-        selectedRegions.value.push({
-          regionCode: region.regionCode
-        });
-      }
-    } else {
-      selectedRegions.value = selectedRegions.value.filter(r => r.regionCode !== region.regionCode);
+  if (!region) return;
+
+  if (isChecked) {
+    if (!selectedRegions.value.some(r => r.regionCode === region.regionCode)) {
+      selectedRegions.value.push({ regionCode: region.regionCode });
     }
-    queryParams.value.regions = [...selectedRegions.value];
+  } else {
+    selectedRegions.value = selectedRegions.value.filter(r => r.regionCode !== region.regionCode);
   }
+  queryParams.value.regions = [...selectedRegions.value];
 };
 
 /**
  * 指定されたIDを持つ地域ノードをツリーから再帰的に検索します
  */
 const findRegionById = (nodes, id) => {
-  if (!nodes || !nodes.length) return null;
+  if (!nodes?.length) return null;
 
   for (const node of nodes) {
     if (node.id === id) {
@@ -223,7 +218,7 @@ const findRegionById = (nodes, id) => {
  * 選択されたすべての地域を再帰的に更新し、サブノードのみを収集します
  */
 const updateSelectedRegions = (nodes) => {
-  if (!nodes || !nodes.length) return;
+  if (!nodes?.length) return;
   selectedRegions.value = [];
   // 最上位ノードは親ノードとしてマークされ、再帰的に子ノードを処理します
   collectSelectedRegions(nodes, true);
@@ -276,33 +271,29 @@ const validateForm = () => {
 };
 
 /**
- * 確認ボタンをクリックしたときの処理関数です
- * @constructor
+ * 集計ボタンをクリックしたときの処理関数です
  */
-const handleConfirm = () => {
-
+const handleAggregate = () => {
   const errors = validateForm();
-
-  if (errors.length > 0) {
-    errors.forEach(error => {
-      proxy.$message.warning(error);
-    });
+  if (errors.length) {
+    errors.forEach(error => proxy.$message.warning(error));
     return;
   }
 
   let salesFlag = 0;
-  const isMonth = queryParams.value.targetPeriodType === TARGET_PERIOD_TYPE.MONTHLY;
+  const isMonthly = queryParams.value.targetPeriodType === TARGET_PERIOD_TYPE.MONTHLY;
+  const { aggregationType } = queryParams.value;
 
-  switch (queryParams.value.aggregationType) {
+  switch (aggregationType) {
     case AGGREGATION_TYPE.FC:
-      const hasArea = queryParams.value.regions && queryParams.value.regions.length > 0;
-      salesFlag = isMonth ? (hasArea ? 1 : 2) : (hasArea ? 3 : 4);
+      const hasArea = queryParams.value.regions?.length > 0;
+      salesFlag = isMonthly ? (hasArea ? 1 : 2) : (hasArea ? 3 : 4);
       break;
     case AGGREGATION_TYPE.AREA:
-      salesFlag = isMonth ? 7 : 8;
+      salesFlag = isMonthly ? 7 : 8;
       break;
     case AGGREGATION_TYPE.STORE:
-      salesFlag = isMonth ? 5 : 6;
+      salesFlag = isMonthly ? 5 : 6;
       break;
     default:
       proxy.$message.warning('集計種別を選択してください');
@@ -311,21 +302,21 @@ const handleConfirm = () => {
 
   const transferData = {
     targetPeriodType: queryParams.value.targetPeriodType,
-    startYear: isMonth ? queryParams.value.startYear : null,
-    startMonth: isMonth ? queryParams.value.startMonth : null,
-    annual: !isMonth ? queryParams.value.annual : null,
+    startYear: isMonthly ? queryParams.value.startYear : null,
+    startMonth: isMonthly ? queryParams.value.startMonth : null,
+    annual: !isMonthly ? queryParams.value.annual : null,
     brandCodes: queryParams.value.brandCode,
-    regionCodes: queryParams.value.regions.map(region => region.regionCode),
+    regionCodes: queryParams.value.regions.map(r => r.regionCode),
     aggregationType: queryParams.value.aggregationType,
     salesFlag: salesFlag
   };
-
+console.log(transferData);
   surveySalesStore.setSalesData(transferData);
   router.push({ name: 'salesSumResult' });
 };
 
 /**
- * キャンセルボタンをクリックしたときの処理関数です
+ * リセットボタンをクリックしたときの処理関数です
  */
 const resetForm = () => {
   queryParams.value.targetPeriodType = TARGET_PERIOD_TYPE.MONTHLY;
@@ -336,15 +327,17 @@ const resetForm = () => {
   queryParams.value.brandCode = [];
   queryParams.value.regions = [];
   selectedRegions.value = [];
-  if (regionTree.value.length > 0) {
+  if (regionTree.value.length) {
     resetRegionTreeCheck(regionTree.value);
   }
 };
-
+/**
+ * 地域ツリーのチェック状態をリセットします
+ */
 const resetRegionTreeCheck = (nodes) => {
   nodes.forEach(node => {
     node.checked = false;
-    if (node.children && node.children.length > 0) {
+    if (node.children?.length) {
       resetRegionTreeCheck(node.children);
     }
   });