chengxiangling
2025-05-16 c9120650b03c477c27ce5c9c492a416be21df1b0
提交负载统计更正
已修改9个文件
已添加1个文件
1830 ■■■■■ 文件已修改
.env.development 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/basicData/bom/bom.js 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/i18n/locales/plan/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/demand/planManage/index.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mainPlan/gasPlanning/index.vue 981 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mainPlan/gasProduceStatics/index.vue 103 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mainPlan/pipePlanning/index.vue 548 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mainPlan/pipeProduceStatics/index.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dict/index.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.development
@@ -10,4 +10,4 @@
# é…åˆåŽç«¯æœåŠ¡
# VITE_APP_LOCAL = 'int'
# VITE_APP_LOCAL = 'zhl'
VITE_APP_LOCAL = 'int'
VITE_APP_LOCAL = 'cxl'
package.json
@@ -45,6 +45,7 @@
  "devDependencies": {
    "@vitejs/plugin-vue": "5.0.5",
    "moment": "^2.30.1",
    "qs": "^6.14.0",
    "sass": "1.77.5",
    "terser": "^5.39.0",
    "unplugin-auto-import": "^0.17.6",
src/api/basicData/bom/bom.js
@@ -1,67 +1,82 @@
import request from '@/utils/request'
import request from "@/utils/request";
import qs from "qs";
//
export function refreshBomRouteStorageDataList() {
  return request({
    url: "/aps/refreshBomRouteStorageData",
    method: "post",
    headers: {
      "Content-Type": "application/x-www-form-urlencoded", // æ³¨æ„ï¼šé€šå¸¸axios会自动设置正确的Content-Type,除非你特别指定了headers。对于FormData,通常不需要手动设置这个header。
    },
    data: qs.stringify({
      orgCode: "FORTUNA"
    }),
  });
}
// /ApsBomHeader/list
export function listApsBomHeaderList(query) {
  return request({
    url: '/aps/ApsBomHeader/list',
    method: 'get',
    params: query
  })
    url: "/aps/ApsBomHeader/list",
    method: "get",
    params: query,
  });
}
// /ApsBom/list
export function listApsBomLineList(query) {
  return request({
    url: '/aps/ApsBom/list',
    method: 'get',
    params: query
  })
    url: "/aps/ApsBom/list",
    method: "get",
    params: query,
  });
}
// /ApsBomHeader/refreshBomData
export function listApsBomRefreshBomDataList() {
  return request({
    url: '/schedule/job/refreshBomData',
    method: 'post',
  })
    url: "/schedule/job/refreshBomData",
    method: "post",
  });
}
// æŸ¥è¯¢BOM数据管理列表
export function listApsBom(query) {
  return request({
    url: '/aps/ApsBom/list',
    method: 'get',
    params: query
  })
    url: "/aps/ApsBom/list",
    method: "get",
    params: query,
  });
}
// æŸ¥è¯¢BOM数据管理详细
export function getApsBom(id) {
  return request({
    url: '/ApsBom/ApsBom/' + id,
    method: 'get'
  })
    url: "/ApsBom/ApsBom/" + id,
    method: "get",
  });
}
// æ–°å¢žBOM数据管理
export function addApsBom(data) {
  return request({
    url: '/ApsBom/ApsBom',
    method: 'post',
    data: data
  })
    url: "/ApsBom/ApsBom",
    method: "post",
    data: data,
  });
}
// ä¿®æ”¹BOM数据管理
export function updateApsBom(data) {
  return request({
    url: '/ApsBom/ApsBom',
    method: 'put',
    data: data
  })
    url: "/ApsBom/ApsBom",
    method: "put",
    data: data,
  });
}
// åˆ é™¤BOM数据管理
export function delApsBom(id) {
  return request({
    url: '/ApsBom/ApsBom/' + id,
    method: 'delete'
  })
    url: "/ApsBom/ApsBom/" + id,
    method: "delete",
  });
}
src/utils/i18n/locales/plan/index.js
@@ -58,6 +58,7 @@
    selectMonth: "选择月份",
    statistical: "统计方式",
    selectDateRange: "选择区间",
    selectDateMonth: "选择月份",
    requireTraceID: "需求追溯ID",
    itemNumber: "料号",
    pipelineOrderRequire: "管路订单需求",
@@ -283,6 +284,7 @@
    selectMonth: "Select Month",
    statistical: "Statistical method",
    selectDateRange: "Select interval",
    selectDateMonth: "Select Month",
    requireTraceID: "Require track ID",
    itemNumber: "Item number",
    pipelineOrderRequire: "Pipeline order requirements",
src/views/demand/planManage/index.vue
@@ -39,7 +39,7 @@
          plain
          icon="Plus"
          @click="handleAdd"
          v-hasPermi="['aps:calendar:add']"
          v-hasPermi="['aps:management:add']"
          >新增</el-button
        >
      </el-col>
@@ -50,7 +50,7 @@
          icon="Edit"
          :disabled="single"
          @click="handleUpdate(null)"
          v-hasPermi="['aps:calendar:update']"
          v-hasPermi="['aps:management:edit']"
          >修改</el-button
        >
      </el-col>
@@ -61,7 +61,7 @@
          icon="Delete"
          :disabled="multiple"
          @click="handleDelete"
          v-hasPermi="['aps:calendar:remove']"
          v-hasPermi="['aps:management:remove']"
          >删除</el-button
        >
      </el-col>
@@ -88,27 +88,26 @@
          type="primary"
          size="small"
          @click="handleUpdate(row)"
          v-hasPermi="['aps:calendar:update']"
          v-hasPermi="['aps:management:edit']"
          >修改</el-button
        >
        <el-button
          type="default"
          size="small"
          @click="handleSetCycle(row)"
          v-hasPermi="['aps:calendar:remove']"
          v-hasPermi="['aps:planCycle:edit']"
          >计划周期</el-button
        >
        <el-button
          type="success"
          size="small"
          v-hasPermi="['aps:calendar:remove']"
          >生成计划</el-button
        >
        <el-button
          type="danger"
          size="small"
          @click="handleDelete(row)"
          v-hasPermi="['aps:calendar:remove']"
          v-hasPermi="['aps:management:remove']"
          >删除</el-button
        >
      </template>
@@ -264,6 +263,7 @@
const router = useRouter();
const { aps_area } = proxy.useDict("aps_area");
const { aps_plan_rule } = proxy.useDict("aps_plan_rule");
const { aps_plan_type } = proxy.useDict("aps_plan_type");
const tableRef = ref();
const calendarList = ref([]);
const open = ref(false);
@@ -354,6 +354,15 @@
    field: "type",
    width: 200,
    align: "center",
    formatter: ({ cellValue, row, column }) => {
      if (cellValue) {
        for (let i = 0; i < aps_plan_type.value.length; i++) {
          if (cellValue === aps_plan_type.value[i].value) {
            return aps_plan_type.value[i].label;
          }
        }
      }
    },
  },
  {
    title: "计划排产区域",
@@ -511,6 +520,7 @@
// è®¡åˆ’周期
function handleSetCycle(row) {
  openSetCycle.value = true;
  console.log(row,row.id,"==========")
  if (!row.cycle) {
    formCycle.value = {
      cycle: {
@@ -519,6 +529,7 @@
        period: "1",
        periodStart: moment(Date.now()).format("YYYY-MM-DD"),
        periodEnd: "",
        planId: row.id
      },
    };
    let nowTime = moment(formCycle.value.cycle.periodStart)
@@ -530,7 +541,7 @@
  } else {
    formCycle.value = row;
  }
  console.log(formCycle.value, "formCycle.value");
  console.log(formCycle.value, "formCycle.value+++++===");
}
function handleToggleExpand() {
  expand.value = !expand.value;
@@ -572,14 +583,15 @@
  });
}
function submitFormCycle() {
  console.log(formCycle.value,"formCycle.value=====")
  redundantOrderList({
    ...formCycle.value.cycle,
    planId: formCycle.value.id,
  })
    .then((res) => {
      if (res.code === 200) {
        proxy.$modal.msgSuccess("更新成功");
        openSetCycle.value = false;
        getList();
      } else {
        openSetCycle.value = false;
      }
@@ -587,7 +599,6 @@
    .catch(() => {
      openSetCycle.value = false;
    });
  getList();
}
function handleGoToCycle() {
  router.push({
src/views/mainPlan/gasPlanning/index.vue
@@ -9,7 +9,11 @@
    >
      <el-row type="flex" justify="left">
        <el-col :span="8">
          <el-form-item :style="{ width: '100%' }" :label="$t('plan.query.selectMonth')" prop="description">
          <el-form-item
            :style="{ width: '100%' }"
            :label="$t('plan.query.selectMonth')"
            prop="description"
          >
            <el-date-picker
              clearable
              v-model="queryParams.date"
@@ -20,477 +24,275 @@
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="16" style="text-align: right">
          <el-form-item class="column-with-margin">
            <el-button type="primary" icon="Search" @click="handleQuery"
              >{{$t("common.common.query")}}</el-button
        <el-col :span="8">
          <el-form-item
            :label="$t('basic.table.applicableFactories')"
            style="width: 100%"
            prop="plant"
          >
            <el-select
              clearable
              v-model="queryParams.applicableFactory"
              :placeholder="$t('basic.table.applicableFactories')"
            >
            <el-button icon="Refresh" @click="resetQuery">{{$t("common.common.reset")}}</el-button>
              <el-option
                v-for="item in aps_factory"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="8" style="text-align: right">
          <el-form-item class="column-with-margin">
            <el-button type="primary" icon="Search" @click="handleQuery">{{
              $t("common.common.query")
            }}</el-button>
            <el-button icon="Refresh" @click="resetQuery">{{
              $t("common.common.reset")
            }}</el-button>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <div class="box_container">
      <el-row>
        <el-col :span="!clickedTableRef?22:20">
          <div class="title_text">{{$t('plan.title.pipePlanCapacity')}}</div>
        </el-col>
        <el-col :span="1" v-if="!clickedTableRef">
          <el-button
            class="title_btn"
            type="default"
            @click="editRowEvent" >{{$t("common.common.edit")}}</el-button>
        </el-col>
        <el-col :span="1.8" v-if="clickedTableRef">
          <el-button
            class="title_btn"
            type="primary"
            @click="saveRowEvent"
            v-hasPermi="['aps:gasPipelineCapacityPlan:add']"
          >
            {{$t("common.common.save")}}
          </el-button>
        </el-col>
        <el-col :span="1" v-if="clickedTableRef">
          <el-button
            class="title_btn ml20"
            type="default"
            @click="handleCancleStaus">{{$t("common.common.cancel")}}</el-button>
        </el-col>
      </el-row>
      <div class="tabel_container">
        <!-- <HxlhTable
    <!-- <div class="box_container"> -->
    <el-row v-if="!clickedTableRefGas">
      <el-col :span="24" style="text-align: right; margin-bottom: 10px">
        <el-button class="title_btn" type="default" @click="editRowEventGas">{{
          $t("common.common.edit")
        }}</el-button>
      </el-col>
    </el-row>
    <el-row v-if="clickedTableRefGas">
      <el-col :span="24" style="text-align: right; margin-bottom: 10px">
        <el-button
          class="title_btn"
          type="primary"
          @click="saveRowEvent1"
          v-hasPermi="['aps:gasPipelineCapacityPlan:add']"
        >
          {{ $t("common.common.save") }}
        </el-button>
        <el-button
          class="title_btn ml20"
          type="default"
          @click="handleCancleStausGas"
          >{{ $t("common.common.cancel") }}</el-button
        >
      </el-col>
    </el-row>
    <!-- <div class="tabel_container"> -->
    <!-- <HxlhTable
          style="width: 100%"
          :columns="columns"
          :data="routePlanList"
          :data="gasPlanList"
          :loading="loading"
          :height="height"
          :editConfig="editConfig"
        >
          <template #edit_role="{ row }">
            <vxe-select
        </HxlhTable> -->
    <vxe-table
      border
      ref="tableRef1"
      show-overflow
      size="small"
      :loading="loading2"
      :height="height"
      :column-config="{ resizable: true, useKey: true }"
      :data="gasPlanList"
    >
      <vxe-column
        :width="locale === 'zh' ? '150px' : '200px'"
        field="processName"
        :title="$t('plan.table.satndardProcessName')"
        fixed="left"
      >
      </vxe-column>
      <vxe-column
        field="orgCode"
        :width="locale === 'zh' ? '150px' : '200px'"
        :title="$t('plan.table.applicableFactories')"
        fixed="left"
      >
        <template #default="{ row }">
          {{ formatTypeLabelPlant([row.orgCode]) }}
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '150px' : '200px'"
        field="dayProduceType"
        :title="$t('plan.table.dayProduceType')"
      >
        <!-- <template #edit="{ row }">
              <el-select
                clearable
                v-model="row.dayProduceType"
                style="width: 140px"
              >
                <el-option
                  v-for="type in dayProduceTypeOptions"
                  :key="type.value"
                  :label="type.label"
                  :value="type.value"
                >
                </el-option>
              </el-select>
            </template> -->
        <template #default="{ row }">
          <div v-if="!clickedTableRefGas">
            <span>{{ formatTypeLabel([row.dayProduceType]) }}</span>
          </div>
          <div v-else>
            <el-select
              clearable
              v-model="row.dayProduceType"
              :options="dayProduceTypeOptions"
              filterable
            ></vxe-select>
          </template>
        </HxlhTable> -->
        <vxe-table
          border
          ref="tableRef"
          show-overflow
          :loading="loading"
          :height="height"
          :column-config="{ resizable: true, useKey: true }"
          :data="routePlanList"
          size="small"
        >
          <vxe-column field="processName" :width="locale === 'zh' ? '150px' : '200px'" :title="$t('plan.table.satndardProcessName')" fixed="left">
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '150px' : '200px'"
            field="dayProduceType"
            :title="$t('plan.table.dayProduceType')"
          >
            <!-- <template #edit="{ row }">
              <el-select
                clearable
                v-model="row.dayProduceType"
                style="width: 140px"
              style="width: 140px"
              @change="handlechangeDayproduceType($event, row)"
            >
              <el-option
                v-for="type in dayProduceTypeOptions"
                :key="type.value"
                :label="type.label"
                :value="type.value"
              >
                <el-option
                  v-for="type in dayProduceTypeOptions"
                  :key="type.value"
                  :label="type.label"
                  :value="type.value"
                >
                </el-option>
              </el-select>
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRef">
                <span>{{ formatTypeLabel([row.dayProduceType]) }}</span>
              </div>
              <div v-else>
                <el-select
                  clearable
                  v-model="row.dayProduceType"
                  style="width: 140px"
                  @change="handlechangeDayproduceType($event,row)"
                >
                  <el-option
                    v-for="type in dayProduceTypeOptions"
                    :key="type.value"
                    :label="type.label"
                    :value="type.value"
                  >
                  </el-option>
                </el-select>
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '180px' : '200px'"
            field="dayProduceNum"
           :title="$t('plan.table.dayProduceNum')"
          >
            <!-- <template #edit="{ row }">
              </el-option>
            </el-select>
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '180px' : '200px'"
        field="dayProduceNum"
        :title="$t('plan.table.dayProduceNum')"
      >
        <!-- <template #edit="{ row }">
              <el-input-number v-model="row.dayProduceNum" size="mini" />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRef">
                <span>{{ row.dayProduceNum }}</span>
              </div>
              <div v-else>
                <el-input-number @change="cellClickEvent($event,row)" v-model="row.dayProduceNum" size="mini" />
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '150px' : '200px'"
            field="dayProduceUnit"
            :title="$t('plan.table.dayProduceUnit')"
          >
            <!-- <template #edit="{ row }">
        <template #default="{ row }">
          <div v-if="!clickedTableRefGas">
            <span>{{ row.dayProduceNum }}</span>
          </div>
          <div v-else>
            <el-input-number
              @change="cellClickEvent($event, row)"
              v-model="row.dayProduceNum"
              size="mini"
            />
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '150px' : '200px'"
        field="dayProduceUnit"
        :title="$t('plan.table.dayProduceUnit')"
      >
        <!-- <template #edit="{ row }">
              <el-input v-model="row.dayProduceUnit" />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRef">
                <span>{{ row.dayProduceUnit }}</span>
              </div>
              <div v-else>
                <el-input v-model="row.dayProduceUnit" />
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '180px' : '200px'"
            field="personnelNumber"
            :title="$t('plan.table.personnelNumber')"
          >
            <!-- <template #edit="{ row }">
        <template #default="{ row }">
          <div v-if="!clickedTableRefGas">
            <span>{{ row.dayProduceUnit }}</span>
          </div>
          <div v-else>
            <el-input v-model="row.dayProduceUnit" />
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '180px' : '200px'"
        field="personnelNumber"
        :title="$t('plan.table.personnelNumber')"
      >
        <!-- <template #edit="{ row }">
              <el-input-number v-model="row.personnelNumber" />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRef">
                <span>{{ row.personnelNumber }}</span>
              </div>
              <div v-else>
                <el-input-number @change="cellClickEvent($event,row)" v-model="row.personnelNumber" />
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '180px' : '200px'"
            field="dayProduceAllNum"
            :title="$t('plan.table.dayProduceAllNum')"
          >
            <!-- <template #edit="{ row }">
        <template #default="{ row }">
          <div v-if="!clickedTableRefGas">
            <span>{{ row.personnelNumber }}</span>
          </div>
          <div v-else>
            <el-input-number
              @change="cellClickEvent($event, row)"
              v-model="row.personnelNumber"
            />
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '180px' : '200px'"
        field="dayProduceAllNum"
        :title="$t('plan.table.dayProduceAllNum')"
      >
        <!-- <template #edit="{ row }">
              <el-input-number v-model="row.dayProduceAllNum" disabled />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRef">
                <span>{{ row.dayProduceAllNum }}</span>
              </div>
              <div v-else>
                <el-input-number v-model="row.dayProduceAllNum" disabled />
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '180px' : '200px'"
            field="days"
           :title="$t('plan.table.days')"
          >
            <!-- <template #edit="{ row }">
        <template #default="{ row }">
          <div v-if="!clickedTableRefGas">
            <span>{{ row.dayProduceAllNum }}</span>
          </div>
          <div v-else>
            <el-input-number v-model="row.dayProduceAllNum" disabled />
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '180px' : '200px'"
        field="days"
        :title="$t('plan.table.days')"
      >
        <!-- <template #edit="{ row }">
              <el-input-number v-model="row.days" />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRef">
                <span>{{ row.days }}</span>
              </div>
              <div v-else>
                <el-input-number @change="cellClickEvent($event,row)" v-model="row.days" />
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '180px' : '200px'"
            field="monthProduceAllNum"
            :title="$t('plan.table.monthProduceAllNum')"
          >
            <!-- <template #edit="{ row }">
        <template #default="{ row }">
          <div v-if="!clickedTableRefGas">
            <span>{{ row.days }}</span>
          </div>
          <div v-else>
            <el-input-number
              @change="cellClickEvent($event, row)"
              v-model="row.days"
            />
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '180px' : '200px'"
        field="monthProduceAllNum"
        :title="$t('plan.table.monthProduceAllNum')"
      >
        <!-- <template #edit="{ row }">
              <el-input-number v-model="row.monthProduceAllNum" disabled />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRef">
                <span>{{ row.monthProduceAllNum }}</span>
              </div>
              <div v-else>
                <el-input-number v-model="row.monthProduceAllNum" disabled/>
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '150px' : '200px'"
            field="remark"
            :title="$t('plan.table.remark')"
          >
          <!-- :edit-render="{ autoFocus: 'input' }" -->
            <!-- <template #edit="{ row }">
        <template #default="{ row }">
          <div v-if="!clickedTableRefGas">
            <span>{{ row.monthProduceAllNum }}</span>
          </div>
          <div v-else>
            <el-input-number v-model="row.monthProduceAllNum" disabled />
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '150px' : '200px'"
        field="remark"
        :title="$t('plan.table.remark')"
      >
        <!-- <template #edit="{ row }">
              <el-input
                type="text"
                v-model="row.remark"
              />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRef">
                <span>{{ row.remark }}</span>
              </div>
              <div v-else>
                <el-input
                  type="text"
                  v-model="row.remark"
                />
              </div>
            </template>
          </vxe-column>
          <!-- <vxe-column title="操作" width="200" fixed="right">
            <template #default="{ row }">
              <template v-if="hasEditStatus(row)">
                <el-button
                  @click="saveRowEvent(row)"
                  v-hasPermi="['aps:gasPipelineCapacityPlan:add']"
                  >保存</el-button
                >
                <el-button @click="cancelRowEvent()">取消</el-button>
              </template>
              <template v-else>
                <el-button @click="editRowEvent(row)">编辑</el-button>
              </template>
            </template>
          </vxe-column> -->
        </vxe-table>
      </div>
    </div>
    <div class="box_container">
      <el-row>
        <el-col :span="!clickedTableRefGas?22:20">
          <div class="title_text">{{$t("plan.title.gasPlanCapacity")}}</div>
        </el-col>
        <el-col :span="1" v-if="!clickedTableRefGas">
          <el-button
            class="title_btn"
            type="default"
            @click="editRowEventGas" >{{$t("common.common.edit")}}</el-button>
        </el-col>
        <el-col :span="1.8" v-if="clickedTableRefGas">
          <el-button
            class="title_btn"
            type="primary"
            @click="saveRowEvent1"
            v-hasPermi="['aps:gasPipelineCapacityPlan:add']"
          >
            {{$t("common.common.save")}}
          </el-button>
        </el-col>
        <el-col :span="1" v-if="clickedTableRefGas">
          <el-button
            class="title_btn ml20"
            type="default"
            @click="handleCancleStausGas">{{$t("common.common.cancel")}}</el-button>
        </el-col>
      </el-row>
      <div class="tabel_container">
        <!-- <HxlhTable
          style="width: 100%"
          :columns="columns"
          :data="gasPlanList"
          :loading="loading"
          :height="height"
        >
        </HxlhTable> -->
        <vxe-table
          border
          ref="tableRef1"
          show-overflow
          size="small"
          :loading="loading2"
          :height="height"
          :column-config="{ resizable: true, useKey: true }"
          :data="gasPlanList"
        >
          <vxe-column :width="locale === 'zh' ? '150px' : '200px'" field="processName" :title="$t('plan.table.satndardProcessName')" fixed="left">
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '150px' : '200px'"
            field="dayProduceType"
            :title="$t('plan.table.dayProduceType')"
          >
            <!-- <template #edit="{ row }">
              <el-select
                clearable
                v-model="row.dayProduceType"
                style="width: 140px"
              >
                <el-option
                  v-for="type in dayProduceTypeOptions"
                  :key="type.value"
                  :label="type.label"
                  :value="type.value"
                >
                </el-option>
              </el-select>
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRefGas">
                <span>{{ formatTypeLabel([row.dayProduceType]) }}</span>
              </div>
              <div v-else>
                <el-select
                  clearable
                  v-model="row.dayProduceType"
                  style="width: 140px"
                  @change="handlechangeDayproduceType($event,row)"
                >
                  <el-option
                    v-for="type in dayProduceTypeOptions"
                    :key="type.value"
                    :label="type.label"
                    :value="type.value"
                  >
                  </el-option>
                </el-select>
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '180px' : '200px'"
            field="dayProduceNum"
           :title="$t('plan.table.dayProduceNum')"
          >
            <!-- <template #edit="{ row }">
              <el-input-number v-model="row.dayProduceNum" size="mini" />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRefGas">
                <span>{{ row.dayProduceNum }}</span>
              </div>
              <div v-else>
                <el-input-number @change="cellClickEvent($event,row)" v-model="row.dayProduceNum" size="mini" />
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '150px' : '200px'"
            field="dayProduceUnit"
            :title="$t('plan.table.dayProduceUnit')"
          >
            <!-- <template #edit="{ row }">
              <el-input v-model="row.dayProduceUnit" />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRefGas">
                <span>{{ row.dayProduceUnit }}</span>
              </div>
              <div v-else>
                <el-input v-model="row.dayProduceUnit" />
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '180px' : '200px'"
            field="personnelNumber"
            :title="$t('plan.table.personnelNumber')"
          >
            <!-- <template #edit="{ row }">
              <el-input-number v-model="row.personnelNumber" />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRefGas">
                <span>{{ row.personnelNumber }}</span>
              </div>
              <div v-else>
                <el-input-number @change="cellClickEvent($event,row)" v-model="row.personnelNumber" />
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '180px' : '200px'"
            field="dayProduceAllNum"
            :title="$t('plan.table.dayProduceAllNum')"
          >
            <!-- <template #edit="{ row }">
              <el-input-number v-model="row.dayProduceAllNum" disabled />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRefGas">
                <span>{{ row.dayProduceAllNum }}</span>
              </div>
              <div v-else>
                <el-input-number v-model="row.dayProduceAllNum" disabled />
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '180px' : '200px'"
            field="days"
            :title="$t('plan.table.days')"
          >
            <!-- <template #edit="{ row }">
              <el-input-number v-model="row.days" />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRefGas">
                <span>{{ row.days }}</span>
              </div>
              <div v-else>
                <el-input-number @change="cellClickEvent($event,row)" v-model="row.days" />
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '180px' : '200px'"
            field="monthProduceAllNum"
            :title="$t('plan.table.monthProduceAllNum')"
          >
            <!-- <template #edit="{ row }">
              <el-input-number v-model="row.monthProduceAllNum" disabled />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRefGas">
                <span>{{ row.monthProduceAllNum }}</span>
              </div>
              <div v-else>
                <el-input-number v-model="row.monthProduceAllNum" disabled/>
              </div>
            </template>
          </vxe-column>
          <vxe-column
            :width="locale === 'zh' ? '150px' : '200px'"
            field="remark"
            :title="$t('plan.table.remark')"
          >
            <!-- <template #edit="{ row }">
              <el-input
                type="text"
                v-model="row.remark"
              />
            </template> -->
            <template #default="{ row }">
              <div v-if="!clickedTableRefGas">
                <span>{{ row.remark }}</span>
              </div>
              <div v-else>
                <el-input
                  type="text"
                  v-model="row.remark"
                />
              </div>
            </template>
          </vxe-column>
          <!-- <vxe-column title="操作" width="200" fixed="right">
        <template #default="{ row }">
          <div v-if="!clickedTableRefGas">
            <span>{{ row.remark }}</span>
          </div>
          <div v-else>
            <el-input type="text" v-model="row.remark" />
          </div>
        </template>
      </vxe-column>
      <!-- <vxe-column title="操作" width="200" fixed="right">
            <template #default="{ row }">
              <template v-if="hasEditStatus1(row)">
                <el-button
@@ -505,27 +307,28 @@
              </template>
            </template>
          </vxe-column> -->
        </vxe-table>
        <!-- <div class="btn_center">
    </vxe-table>
    <!-- <div class="btn_center">
          <el-button type="primary" @click="handleSave2">保存</el-button>
        </div> -->
      </div>
    </div>
    <!-- </div> -->
    <!-- </div> -->
  </div>
</template>
<script setup name="GasPlanning">
// import { ElMessage } from "element-plus";
import { listGasPlan, getGasPlanSave } from "@/api/mainPlan/gasPlanning";
const height = ref(document.documentElement.clientHeight - 400 + "px;");
import { useI18n } from "vue-i18n"; //要在js中使用国际化
const height = ref(document.documentElement.clientHeight - 230 + "px;");
const { t, locale } = useI18n();
const loading = ref(false);
const { proxy } = getCurrentInstance();
const { aps_factory } = proxy.useDict("aps_factory");
const loading2 = ref(false);
const clickedQuery = ref(false);
const clickedQuery2 = ref(false);
const data = reactive({
  queryParams: {
    date: "",
    applicableFactory: "",
  },
});
const tableRef = ref();
@@ -552,150 +355,31 @@
  }
  return "";
};
// è¡¨æ ¼é…ç½®
// const columns = ref([
//   // {
//   //   title: "规划年份",
//   //   field: "year",
//   //   width: 150,
//   // },
//   // {
//   //   title: "规划月份",
//   //   field: "month",
//   // },
//   // {
//   //   title: "专业",
//   //   field: "major",
//   //   width: 100,
//   // },
//   {
//     title: "标准工序名称",
//     field: "processName",
//     width: 100,
//   },
//   {
//     title: "日产出类型",
//     field: "dayProduceType",
//     width: 140,
//     editRender: {},
//     slots: { edit: "edit_role", default: "default_role" },
//   },
//   {
//     title: "日产出数量",
//     field: "dayProduceNum",
//     width: 140,
//     // editRender: { autoFocus: "input" },
//     // slots: { edit: "edit_name", default: "default_name" },
//   },
//   {
//     title: "日产出数量单位",
//     field: "dayProduceUnit",
//     width: 140,
//   },
//   {
//     title: "人员数量",
//     field: "personnelNumber",
//     width: 140,
//     type: "html",
//   },
//   {
//     title: "日产出总数量",
//     field: "dayProduceAllNum",
//     width: 140,
//     type: "html",
//   },
//   {
//     title: "天数",
//     field: "days",
//     width: 120,
//     // format: 'YYYY-MM-DD'
//   },
//   {
//     title: "月产出总数量",
//     field: "monthProduceAllNum",
//     width: 140,
//     type: "html",
//   },
//   {
//     title: "备注",
//     field: "remark",
//     width: 140,
//     type: "html",
//   },
// ]);
// const hasEditStatus = (row) => {
//   const $table = tableRef.value;
//   if ($table) {
//     return $table.isEditByRow(row);
//   }
// };
const editRowEvent = () => {
  clickedTableRef.value = true;
const formatTypeLabelPlant = (list) => {
  if (list) {
    return list
      .map((type) => {
        const item = aps_factory.value.find(
          (item) => item.value === type
        );
        return item ? item.label : type;
      })
      .join("");
  }
  return "";
};
const editRowEventGas = () => {
  clickedTableRefGas.value = true;
};
const saveRowEvent = (row) => {
  if (!queryParams.value.date) {
    ElMessage({
      message: "请选择年月",
      type: "error",
    });
    return;
  }
  const $table = tableRef.value;
  if ($table) {
    $table.clearEdit().then(() => {
      loading.value = true
      // setTimeout(() => {
      //   loading.value = false
      //   VxeUI.modal.message({ content: `保存成功!name=${row.name}`, status: 'success' })
      // }, 300)
      handleSave("管路");
      clickedTableRef.value = false;
    });
  }
};
const handleCancelAllStatus = ()=>{
  handleCancleStaus();
  handleCancleStausGas();
}
const handleCancleStaus = () => {
  clickedTableRef.value = false;
  if(!clickedQuery.value){
    return
  }
  const year = queryParams.value.date.split("-")[0];
  const month = parseInt(queryParams.value.date.split("-")[1]);
  getRouteList(year, month);
};
const handleCancleStausGas = () => {
  clickedTableRefGas.value = false;
  if(!clickedQuery2.value){
    return
  if (!clickedQuery2.value) {
    return;
  }
  const year = queryParams.value.date.split("-")[0];
  const month = parseInt(queryParams.value.date.split("-")[1]);
  getGasList(year, month);
}
// const cancelRowEvent = () => {
//   const $table = tableRef.value;
//   if ($table) {
//     $table.clearEdit();
//   }
// };
// const hasEditStatus1 = (row) => {
//   const $table = tableRef1.value;
//   if ($table) {
//     return $table.isEditByRow(row);
//   }
// };
// const editRowEvent1 = (row) => {
//   const $table = tableRef1.value;
//   if ($table) {
//     $table.setEditRow(row);
//   }
// };
};
const saveRowEvent1 = (row) => {
  if (!queryParams.value.date) {
    ElMessage({
@@ -723,50 +407,19 @@
//     $table.clearEdit();
//   }
// };
async function getRouteList(year, month) {
  loading.value = true;
  const res = await listGasPlan({
    major: "管路",
    year,
    month,
  });
  routePlanList.value = res.rows;
  routePlanList.value = routePlanList.value.map((item, index) => {
    return {
      ...item,
      dayProduceType:
        item.dayProduceType == null ? "1" : item.dayProduceType,
      dayProduceNum: item.dayProduceNum == null ? "0" : item.dayProduceNum,
      dayProduceUnit:
        item.dayProduceUnit == null ? "小时" : item.dayProduceUnit,
      personnelNumber:
        item.personnelNumber == null ? "1" : item.personnelNumber,
      dayProduceAllNum:
        item.dayProduceAllNum == null
          ? "0"
          : item.dayProduceNum * item.personnelNumber,
      days: item.days == null ? "22" : item.days,
      monthProduceAllNum:
        item.monthProduceAllNum == null
          ? "0"
          : item.dayProduceAllNum * item.days,
    };
  });
  loading.value = false;
}
async function getGasList(year, month) {
  loading2.value = true;
  const res = await listGasPlan({
    major: "气柜",
    year,
    month,
    orgCode: queryParams.value.applicableFactory,
  });
  gasPlanList.value = res.rows;
  gasPlanList.value = gasPlanList.value.map((item, index) => {
    return {
      ...item,
      dayProduceType:
        item.dayProduceType == null ? "1" : item.dayProduceType,
      dayProduceType: item.dayProduceType == null ? "1" : item.dayProduceType,
      dayProduceNum: item.dayProduceNum == null ? "0" : item.dayProduceNum,
      dayProduceUnit:
        item.dayProduceUnit == null ? "小时" : item.dayProduceUnit,
@@ -790,27 +443,26 @@
//   if(row.dayProduceType==="1"){
//     row.dayProduceAllNum = row.dayProduceNum * row.personnelNumber;
//   }else{
//     row.dayProduceAllNum = row.dayProduceNum
//   }
//   row.monthProduceAllNum = row.dayProduceAllNum * row.days;
// }
function cellClickEvent(e, row) {
  if(row.dayProduceType==="1"){
  if (row.dayProduceType === "1") {
    row.dayProduceAllNum = row.dayProduceNum * row.personnelNumber;
  }else{
    row.dayProduceAllNum = row.dayProduceNum
  } else {
    row.dayProduceAllNum = row.dayProduceNum;
  }
  row.monthProduceAllNum = row.dayProduceAllNum * row.days;
}
function handlechangeDayproduceType(e,row){
function handlechangeDayproduceType(e, row) {
  row.dayProduceAllNum = "0";
  row.monthProduceAllNum = "0";
  if(e=="1"){
  if (e == "1") {
    row.dayProduceAllNum = row.dayProduceNum * row.personnelNumber;
  }else if(e=="2"){
    row.dayProduceAllNum = row.dayProduceNum
  } else if (e == "2") {
    row.dayProduceAllNum = row.dayProduceNum;
  }
  row.monthProduceAllNum = row.dayProduceAllNum * row.days;
}
@@ -824,14 +476,13 @@
  }
  const year = queryParams.value.date.split("-")[0];
  const month = parseInt(queryParams.value.date.split("-")[1]);
  getRouteList(year, month);
  // getRouteList(year, month);
  getGasList(year, month);
  clickedQuery.value = true;
  clickedQuery2.value = true
  clickedQuery2.value = true;
}
function resetQuery() {
  queryParams.value.date = "";
  clickedQuery.value = false;
  queryParams.value.applicableFactory = "";
  clickedQuery2.value = false;
  gasPlanList.value = [];
  routePlanList.value = [];
@@ -839,71 +490,27 @@
async function handleSave(major) {
  const year = queryParams.value.date.split("-")[0];
  const month = parseInt(queryParams.value.date.split("-")[1]);
  if (major === "管路") {
    routePlanList.value = routePlanList.value.map((item) => {
      return {
        ...item,
        major: "管路",
        year,
        month,
      };
    });
    await getGasPlanSave([...routePlanList.value]);
  } else {
  if (major === "气柜") {
    gasPlanList.value = gasPlanList.value.map((item) => {
      return {
        ...item,
        major: "气柜",
        year,
        month,
        orgCode: queryParams.value.applicableFactory,
      };
    });
    await getGasPlanSave([...gasPlanList.value]);
    const res = await getGasPlanSave([...gasPlanList.value]);
    if (res.code == 200) {
      ElMessage({
        message: "数据保存成功",
        type: "success",
      });
      loading2.value = false;
      handleQuery();
    }
  }
  ElMessage({
    message: "数据保存成功",
    type: "success",
  });
  loading.value = false;
  loading2.value = false;
  handleQuery();
}
// async function handleSave2(row) {
//   const year = queryParams.value.date.split("-")[0];
//   const month = parseInt(queryParams.value.date.split("-")[1]);
//   console.log(row, "baocun");
//   // gasPlanList.value = gasPlanList.value.map((item) => {
//   //   return {
//   //     ...item,
//   //     major: "气体",
//   //     year,
//   //     month,
//   //   };
//   // });
//   // routePlanList.value = routePlanList.value.map((item) => {
//   //   return {
//   //     ...item,
//   //     major: "管路",
//   //     year,
//   //     month,
//   //   };
//   // });
//   const res = await getGasPlanSave([
//     {
//       ...row,
//       major: "气柜",
//       year,
//       month,
//     },
//   ]);
//   ElMessage({
//     message: "数据保存成功",
//     type: "success",
//   });
//   handleQuery();
//   console.log(res, "akiwjciwj");
// }
</script>
<style lang="scss" scoped>
.column-with-margin {
@@ -921,8 +528,8 @@
  }
  .title_btn {
    margin-top: 20px;
    &.ml20{
      margin-left:20px;
    &.ml20 {
      margin-left: 20px;
    }
  }
  .tabel_container {
src/views/mainPlan/gasProduceStatics/index.vue
@@ -10,11 +10,12 @@
    >
      <el-row :gutter="20">
        <el-col :span="8">
          <el-form-item :label="$t('plan.query.statistical')" :style="{ width: '100%' }">
          <el-form-item :label="$t('plan.query.statistical')" >
            <el-select
              v-model="queryParams.searchType"
              placeholder="Select"
              @change="handleChangeSelectType"
              :style="{ width: '270px' }"
            >
              <el-option
                v-for="item in options"
@@ -26,9 +27,10 @@
          </el-form-item>
        </el-col>
        <el-col :span="8">
          <el-form-item :label="$t('plan.query.selectDateRange')" :style="{ width: '100%' }">
          <el-form-item :label="!dayCom?$t('plan.query.selectDateRange'):$t('plan.query.selectDateMonth')">
            <div v-if="!dayCom">
              <el-date-picker
                :style="{ width: '240px' }"
                v-model="queryParams.monthRange"
                type="monthrange"
                :range-separator="$t('plan.placeholder.to')"
@@ -38,6 +40,7 @@
            </div>
            <div v-else>
              <el-date-picker
                :style="{ width: '200px' }"
                v-model="queryParams.monthDays"
                type="month"
                :placeholder="$t('plan.placeholder.selectMonth')"
@@ -45,7 +48,27 @@
            </div>
          </el-form-item>
        </el-col>
        <el-col :span="8" style="text-align:right;">
        <el-col :span="8" v-if="!dayCom">
          <el-form-item
            :label="$t('basic.table.applicableFactories')"
            prop="plant"
          >
            <el-select
              :style="{ width: '300px' }"
              clearable
              v-model="queryParams.applicableFactory"
              :placeholder="$t('basic.table.applicableFactories')"
            >
              <el-option
                v-for="item in aps_factory"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
            </el-select>
          </el-form-item>
        </el-col>
        <!-- <el-col :span="8" style="text-align:right;">
          <el-form-item class="column-with-margin">
            <el-button type="primary" icon="Search" @click="handleQuery">{{
              $t("common.common.query")
@@ -54,7 +77,7 @@
              $t("common.common.reset")
            }}</el-button>
          </el-form-item>
        </el-col>
        </el-col> -->
      </el-row>
    </el-form>
    <el-row :gutter="10" class="mb8">
@@ -80,7 +103,7 @@
          >{{ $t("common.common.update") }}</el-button
        >
      </el-col>
      <right-toolbar @queryTable="handleQuery" :search="false"></right-toolbar>
      <right-toolbar @queryTable="handleQuery"></right-toolbar>
    </el-row>
    <vxe-grid ref="gridRef" v-bind="gridOptions" :loading="loading"></vxe-grid>
  </div>
@@ -97,12 +120,12 @@
import { useI18n } from "vue-i18n"; //要在js中使用国际化
const { t, locale } = useI18n();
const { proxy } = getCurrentInstance();
const { aps_factory } = proxy.useDict("aps_factory");
const loading = ref(false);
const gridRef = ref();
const height = ref(document.documentElement.clientHeight - 180 + "px;");
const headers = ref([]);
const exportData = ref([]);
// const exportData = ref([]);
const showSearch = ref(true);
const data = reactive({
  queryParams: {
@@ -139,7 +162,7 @@
const dayCom = ref(false);
let tableColumn = [];
let tableData = [];
let merges = [];
// let merges = [];
watch(
  locale,
  (newLocale) => {
@@ -196,11 +219,24 @@
    eYearMonth: `${eYear}-${eMonth.toString().padStart(2, "0")}`,
  };
}
const formatTypeLabelPlant = (list) => {
  if (list) {
    return list
      .map((type) => {
        const item = aps_factory.value.find(
          (item) => item.value === type
        );
        return item ? item.label : type;
      })
      .join("");
  }
  return "";
};
function getGasList() {
  let rowKey = 0;
  let colKey = 0;
  headers.value = [];
  exportData.value = [];
  // exportData.value = [];
  tableColumn = [];
  tableData = [];
  loading.value = true;
@@ -222,8 +258,10 @@
        loading.value = false;
        return;
      }
      headersOne.push(t("plan.table.dateYearMonth"));
      headersTwo.push(t("plan.table.processName"));
      // headersOne.push("");//t("plan.table.dateYearMonth")
      // headersOne.push("");
      // headersTwo.push(t("plan.table.processName"));
      // headersTwo.push(t("plan.table.applicableFactories"));
      colList.push({
        field: "dateCol",
        title: t("plan.table.dateYearMonth"),
@@ -235,16 +273,22 @@
            width: 250,
            type: "html",
          },
          {
            field: `resourceGroupName`,
            title: t("plan.table.applicableFactories"),
            width: 250,
            type: "html",
          },
        ],
        width: 160,
      });
      response.data.planTitle.forEach((item) => {
        headersOne.push(item);
        headersOne.push("");
        headersOne.push("");
        headersTwo.push(t("plan.table.designWorkingHours"));
        headersTwo.push(t("plan.table.requiredWorkingHours"));
        headersTwo.push(t("plan.table.capacityLoad"));
        // headersOne.push(item);
        // headersOne.push("");
        // headersOne.push("");
        // headersTwo.push(t("plan.table.designWorkingHours"));
        // headersTwo.push(t("plan.table.requiredWorkingHours"));
        // headersTwo.push(t("plan.table.capacityLoad"));
        colKey++;
        colList.push({
          field: `dateColTime${colKey}`,
@@ -271,25 +315,25 @@
        });
      });
      headers.value.push(headersOne);
      headers.value.push(headersTwo);
      // headers.value.push(headersOne);
      // headers.value.push(headersTwo);
      const columnList = [...tableColumn, ...colList];
      const dataList = [];
      let startCol = 1;
      // let startCol = 1;
      //获取map
      response.data.planTable.map((mapItem) => {
        rowKey++;
        let lastCol = startCol + 2;
        merges.push({ s: { r: 0, c: startCol }, e: { r: 0, c: lastCol } });
        startCol = lastCol + 1;
        // let lastCol = startCol + 2;
        // merges.push({ s: { r: 0, c: startCol }, e: { r: 0, c: lastCol } });
        // startCol = lastCol + 1;
        let data = [];
        const item = {
          id: `${rowKey}`,
        };
        for (const [key, listValue] of Object.entries(mapItem)) {
          data.push(key);
          // data.push(key);
          let tableKey = 0;
          let flag = false;
@@ -302,9 +346,9 @@
              listItem.requireTimes,
              listItem.capacityLoad
            );
            data.push(listItem.designTimes);
            data.push(listItem.requireTimes);
            data.push(listItem.capacityLoad + "%");
            // data.push(listItem.designTimes);
            // data.push(listItem.requireTimes);
            // data.push(listItem.capacityLoad + "%");
            // if (listItem.capacityLoad > 100) {
            //   flag = true;
            // }
@@ -313,9 +357,10 @@
          // item[`resourceName`] = flag
          //   ? `<div class='el-badge'><sup class="el-badge__content is-fixed is-dot"></sup>${key}</div>`
          //   : key;
          item[`resourceName`] = key;
          item[`resourceName`] = key.split("_")[0];
          item[`resourceGroupName`] = formatTypeLabelPlant([key.split("_")[1]]);
        }
        exportData.value.push(data);
        // exportData.value.push(data);
        dataList.push(item);
      });
src/views/mainPlan/pipePlanning/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,548 @@
<template>
  <div class="app-container">
    <el-form
      class="responsive-form"
      :model="queryParams"
      ref="queryRef"
      :inline="true"
      label-position="left"
    >
      <el-row type="flex" justify="left">
        <el-col :span="8">
          <el-form-item
            :style="{ width: '100%' }"
            :label="$t('plan.query.selectMonth')"
            prop="description"
          >
            <el-date-picker
              clearable
              v-model="queryParams.date"
              type="month"
              value-format="YYYY-MM"
              :placeholder="$t('plan.query.selectMonth')"
            >
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="8">
          <el-form-item :label="$t('basic.table.applicableFactories')" style="width: 100%" prop="plant">
            <el-select
              clearable
              v-model="queryParams.applicableFactory"
              :placeholder="$t('basic.table.applicableFactories')"
            >
              <el-option
                v-for="item in aps_factory"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="8" style="text-align: right">
          <el-form-item class="column-with-margin">
            <el-button type="primary" icon="Search" @click="handleQuery">{{
              $t("common.common.query")
            }}</el-button>
            <el-button icon="Refresh" @click="resetQuery">{{
              $t("common.common.reset")
            }}</el-button>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <!-- <div class="box_container"> -->
    <el-row v-if="!clickedTableRef">
      <!-- <el-col :span="!clickedTableRef?22:20">
          <div class="title_text">{{$t('plan.title.pipePlanCapacity')}}</div>
        </el-col> -->
      <el-col
        :span="24"
        style="text-align: right; margin-bottom: 10px"
      >
        <el-button class="title_btn" type="default" @click="editRowEvent">{{
          $t("common.common.edit")
        }}</el-button>
      </el-col>
    </el-row>
    <el-row v-if="clickedTableRef">
      <el-col :span="24" style="text-align: right; margin-bottom: 10px" >
        <el-button
          class="title_btn"
          type="primary"
          @click="saveRowEvent"
          v-hasPermi="['aps:gasPipelineCapacityPlan:add']"
        >
          {{ $t("common.common.save") }}
        </el-button>
        <el-button
          class="title_btn ml20"
          type="default"
          @click="handleCancleStaus"
          >{{ $t("common.common.cancel") }}</el-button
        >
      </el-col>
    </el-row>
    <vxe-table
      border
      ref="tableRef"
      show-overflow
      :loading="loading"
      :height="height"
      :column-config="{ resizable: true, useKey: true }"
      :data="routePlanList"
      size="small"
    >
      <vxe-column
        field="processName"
        :width="locale === 'zh' ? '150px' : '200px'"
        :title="$t('plan.table.satndardProcessName')"
        fixed="left"
      >
      </vxe-column>
      <vxe-column
        field="orgCode"
        :width="locale === 'zh' ? '150px' : '200px'"
        :title="$t('plan.table.applicableFactories')"
        fixed="left"
      >
        <template #default="{ row }">
          {{ formatTypeLabelPlant([row.orgCode]) }}
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '150px' : '200px'"
        field="dayProduceType"
        :title="$t('plan.table.dayProduceType')"
      >
        <!-- <template #edit="{ row }">
              <el-select
                clearable
                v-model="row.dayProduceType"
                style="width: 140px"
              >
                <el-option
                  v-for="type in dayProduceTypeOptions"
                  :key="type.value"
                  :label="type.label"
                  :value="type.value"
                >
                </el-option>
              </el-select>
            </template> -->
        <template #default="{ row }">
          <div v-if="!clickedTableRef">
            <span>{{ formatTypeLabel([row.dayProduceType]) }}</span>
          </div>
          <div v-else>
            <el-select
              clearable
              v-model="row.dayProduceType"
              style="width: 140px"
              @change="handlechangeDayproduceType($event, row)"
            >
              <el-option
                v-for="type in dayProduceTypeOptions"
                :key="type.value"
                :label="type.label"
                :value="type.value"
              >
              </el-option>
            </el-select>
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '180px' : '200px'"
        field="dayProduceNum"
        :title="$t('plan.table.dayProduceNum')"
      >
        <!-- <template #edit="{ row }">
              <el-input-number v-model="row.dayProduceNum" size="mini" />
            </template> -->
        <template #default="{ row }">
          <div v-if="!clickedTableRef">
            <span>{{ row.dayProduceNum }}</span>
          </div>
          <div v-else>
            <el-input-number
              @change="cellClickEvent($event, row)"
              v-model="row.dayProduceNum"
              size="mini"
            />
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '150px' : '200px'"
        field="dayProduceUnit"
        :title="$t('plan.table.dayProduceUnit')"
      >
        <!-- <template #edit="{ row }">
              <el-input v-model="row.dayProduceUnit" />
            </template> -->
        <template #default="{ row }">
          <div v-if="!clickedTableRef">
            <span>{{ row.dayProduceUnit }}</span>
          </div>
          <div v-else>
            <el-input v-model="row.dayProduceUnit" />
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '180px' : '200px'"
        field="personnelNumber"
        :title="$t('plan.table.personnelNumber')"
      >
        <!-- <template #edit="{ row }">
              <el-input-number v-model="row.personnelNumber" />
            </template> -->
        <template #default="{ row }">
          <div v-if="!clickedTableRef">
            <span>{{ row.personnelNumber }}</span>
          </div>
          <div v-else>
            <el-input-number
              @change="cellClickEvent($event, row)"
              v-model="row.personnelNumber"
            />
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '180px' : '200px'"
        field="dayProduceAllNum"
        :title="$t('plan.table.dayProduceAllNum')"
      >
        <!-- <template #edit="{ row }">
              <el-input-number v-model="row.dayProduceAllNum" disabled />
            </template> -->
        <template #default="{ row }">
          <div v-if="!clickedTableRef">
            <span>{{ row.dayProduceAllNum }}</span>
          </div>
          <div v-else>
            <el-input-number v-model="row.dayProduceAllNum" disabled />
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '180px' : '200px'"
        field="days"
        :title="$t('plan.table.days')"
      >
        <!-- <template #edit="{ row }">
              <el-input-number v-model="row.days" />
            </template> -->
        <template #default="{ row }">
          <div v-if="!clickedTableRef">
            <span>{{ row.days }}</span>
          </div>
          <div v-else>
            <el-input-number
              @change="cellClickEvent($event, row)"
              v-model="row.days"
            />
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '180px' : '200px'"
        field="monthProduceAllNum"
        :title="$t('plan.table.monthProduceAllNum')"
      >
        <!-- <template #edit="{ row }">
              <el-input-number v-model="row.monthProduceAllNum" disabled />
            </template> -->
        <template #default="{ row }">
          <div v-if="!clickedTableRef">
            <span>{{ row.monthProduceAllNum }}</span>
          </div>
          <div v-else>
            <el-input-number v-model="row.monthProduceAllNum" disabled />
          </div>
        </template>
      </vxe-column>
      <vxe-column
        :width="locale === 'zh' ? '150px' : '200px'"
        field="remark"
        :title="$t('plan.table.remark')"
      >
        <!-- :edit-render="{ autoFocus: 'input' }" -->
        <!-- <template #edit="{ row }">
              <el-input
                type="text"
                v-model="row.remark"
              />
            </template> -->
        <template #default="{ row }">
          <div v-if="!clickedTableRef">
            <span>{{ row.remark }}</span>
          </div>
          <div v-else>
            <el-input type="text" v-model="row.remark" />
          </div>
        </template>
      </vxe-column>
      <!-- <vxe-column title="操作" width="200" fixed="right">
            <template #default="{ row }">
              <template v-if="hasEditStatus(row)">
                <el-button
                  @click="saveRowEvent(row)"
                  v-hasPermi="['aps:gasPipelineCapacityPlan:add']"
                  >保存</el-button
                >
                <el-button @click="cancelRowEvent()">取消</el-button>
              </template>
              <template v-else>
                <el-button @click="editRowEvent(row)">编辑</el-button>
              </template>
            </template>
          </vxe-column> -->
    </vxe-table>
    <!-- </div> -->
    <!-- </div> -->
  </div>
</template>
<script setup name="GasPlanning">
// import { ElMessage } from "element-plus";
import { listGasPlan, getGasPlanSave } from "@/api/mainPlan/gasPlanning";
const height = ref(document.documentElement.clientHeight - 230 + "px;");
import { useI18n } from "vue-i18n"; //要在js中使用国际化
const { t, locale } = useI18n();
const { proxy } = getCurrentInstance();
const { aps_factory } = proxy.useDict("aps_factory");
const loading = ref(false);
const clickedQuery = ref(false);
const clickedQuery2 = ref(false);
const data = reactive({
  queryParams: {
    date: "",
    applicableFactory:""
  },
});
const tableRef = ref();
const tableRef1 = ref();
const { queryParams } = toRefs(data);
const gasPlanList = ref([]);
const routePlanList = ref([]);
const dayProduceTypeOptions = ref([
  { label: "单人日产出", value: "1" },
  { label: "固定日产出", value: "2" },
]);
const clickedTableRef = ref(false);
const clickedTableRefGas = ref(false);
const formatTypeLabel = (list) => {
  if (list) {
    return list
      .map((type) => {
        const item = dayProduceTypeOptions.value.find(
          (item) => item.value === type
        );
        return item ? item.label : type;
      })
      .join("");
  }
  return "";
};
const formatTypeLabelPlant = (list) => {
  if (list) {
    return list
      .map((type) => {
        const item = aps_factory.value.find(
          (item) => item.value === type
        );
        return item ? item.label : type;
      })
      .join("");
  }
  return "";
};
const editRowEvent = () => {
  clickedTableRef.value = true;
};
const saveRowEvent = (row) => {
  if (!queryParams.value.date) {
    ElMessage({
      message: "请选择年月",
      type: "error",
    });
    return;
  }
  const $table = tableRef.value;
  if ($table) {
    $table.clearEdit().then(() => {
      loading.value = true;
      // setTimeout(() => {
      //   loading.value = false
      //   VxeUI.modal.message({ content: `保存成功!name=${row.name}`, status: 'success' })
      // }, 300)
      handleSave("管路");
      clickedTableRef.value = false;
    });
  }
};
// const handleCancelAllStatus = () => {
//   handleCancleStaus();
//   handleCancleStausGas();
// };
const handleCancleStaus = () => {
  clickedTableRef.value = false;
  if (!clickedQuery.value) {
    return;
  }
  const year = queryParams.value.date.split("-")[0];
  const month = parseInt(queryParams.value.date.split("-")[1]);
  getRouteList(year, month);
};
// const handleCancleStausGas = () => {
//   clickedTableRefGas.value = false;
//   if (!clickedQuery2.value) {
//     return;
//   }
//   const year = queryParams.value.date.split("-")[0];
//   const month = parseInt(queryParams.value.date.split("-")[1]);
//   getGasList(year, month);
// };
async function getRouteList(year, month) {
  loading.value = true;
  const res = await listGasPlan({
    major: "管路",
    year,
    month,
    orgCode:queryParams.value.applicableFactory
  });
  routePlanList.value = res.rows;
  routePlanList.value = routePlanList.value.map((item, index) => {
    return {
      ...item,
      dayProduceType: item.dayProduceType == null ? "1" : item.dayProduceType,
      dayProduceNum: item.dayProduceNum == null ? "0" : item.dayProduceNum,
      dayProduceUnit:
        item.dayProduceUnit == null ? "小时" : item.dayProduceUnit,
      personnelNumber:
        item.personnelNumber == null ? "1" : item.personnelNumber,
      dayProduceAllNum:
        item.dayProduceAllNum == null
          ? "0"
          : item.dayProduceNum * item.personnelNumber,
      days: item.days == null ? "22" : item.days,
      monthProduceAllNum:
        item.monthProduceAllNum == null
          ? "0"
          : item.dayProduceAllNum * item.days,
    };
  });
  loading.value = false;
}
// function cellClickEvent({ row, column }) {
//   console.log(row,column,"cellClickEvent")
//   if(row.dayProduceType==="1"){
//     row.dayProduceAllNum = row.dayProduceNum * row.personnelNumber;
//   }else{
//     row.dayProduceAllNum = row.dayProduceNum
//   }
//   row.monthProduceAllNum = row.dayProduceAllNum * row.days;
// }
function cellClickEvent(e, row) {
  if (row.dayProduceType === "1") {
    row.dayProduceAllNum = row.dayProduceNum * row.personnelNumber;
  } else {
    row.dayProduceAllNum = row.dayProduceNum;
  }
  row.monthProduceAllNum = row.dayProduceAllNum * row.days;
}
function handlechangeDayproduceType(e, row) {
  row.dayProduceAllNum = "0";
  row.monthProduceAllNum = "0";
  if (e == "1") {
    row.dayProduceAllNum = row.dayProduceNum * row.personnelNumber;
  } else if (e == "2") {
    row.dayProduceAllNum = row.dayProduceNum;
  }
  row.monthProduceAllNum = row.dayProduceAllNum * row.days;
}
function handleQuery() {
  if (!queryParams.value.date) {
    ElMessage({
      message: "请选择年月",
      type: "error",
    });
    return;
  }
  const year = queryParams.value.date.split("-")[0];
  const month = parseInt(queryParams.value.date.split("-")[1]);
  getRouteList(year, month);
  // getGasList(year, month);
  clickedQuery.value = true;
  // clickedQuery2.value = true;
}
function resetQuery() {
  queryParams.value.date = "";
  queryParams.value.applicableFactory = "";
  clickedQuery.value = false;
  // clickedQuery2.value = false;
  gasPlanList.value = [];
  routePlanList.value = [];
}
async function handleSave(major) {
  const year = queryParams.value.date.split("-")[0];
  const month = parseInt(queryParams.value.date.split("-")[1]);
  if (major === "管路") {
    routePlanList.value = routePlanList.value.map((item) => {
      return {
        ...item,
        major: "管路",
        year,
        month,
        orgCode: queryParams.value.applicableFactory,
      };
    });
    const res = await getGasPlanSave([...routePlanList.value]);
    if(res.code == 200){
      ElMessage({
        message: "数据保存成功",
        type: "success",
      });
      loading.value = false;
      handleQuery();
    }
  }
}
</script>
<style lang="scss" scoped>
.column-with-margin {
  margin-right: 0px;
}
.box_container {
  width: 100%;
  margin: 20px auto;
  background: #fff;
  border-radius: 5px;
  box-shadow: 1px 1px 1px 4px#f1f1f1;
  .title_text {
    padding-top: 20px;
    margin-left: 20px;
  }
  .title_btn {
    margin-top: 20px;
    &.ml20 {
      margin-left: 20px;
    }
  }
  .tabel_container {
    width: 98%;
    margin: 20px auto;
  }
}
.btn_center {
  display: flex;
  justify-content: center;
  align-items: center;
  margin-top: 20px;
  padding-bottom: 20px;
}
</style>
src/views/mainPlan/pipeProduceStatics/index.vue
@@ -101,7 +101,7 @@
import { useI18n } from "vue-i18n"; //要在js中使用国际化
const { t, locale } = useI18n();
const { proxy } = getCurrentInstance();
const { aps_factory } = proxy.useDict("aps_factory");
const loading = ref(false);
const gridRef = ref();
const height = ref(document.documentElement.clientHeight - 180 + "px;");
@@ -200,6 +200,19 @@
    eYearMonth: `${eYear}-${eMonth.toString().padStart(2, "0")}`,
  };
}
const formatTypeLabelPlant = (list) => {
  if (list) {
    return list
      .map((type) => {
        const item = aps_factory.value.find(
          (item) => item.value === type
        );
        return item ? item.label : type;
      })
      .join("");
  }
  return "";
};
/** æŸ¥è¯¢é›¶ä»¶ç»Ÿè®¡è¡¨åˆ—表 */
function getPipeList() {
  let rowKey = 0;
@@ -220,15 +233,15 @@
    major: "piping",
  }).then((response) => {
    const colList = [];
    let headersOne = [];
    let headersTwo = [];
    // let headersOne = [];
    // let headersTwo = [];
    if (response.code == "200") {
      if (!response.data.planTitle) {
        loading.value = false;
        return;
      }
      headersOne.push(t("plan.table.dateYearMonth"));
      headersTwo.push(t("plan.table.processName"));
      // headersOne.push(t("plan.table.dateYearMonth"));
      // headersTwo.push(t("plan.table.processName"));
      colList.push({
        field: "dateCol",
        title: t("plan.table.dateYearMonth"),
@@ -240,16 +253,16 @@
            width: 250,
            type: "html",
          },
          {
            field: `resourceGroupName`,
            title: t("plan.table.applicableFactories"),
            width: 250,
            type: "html",
          },
        ],
        width: 160,
      });
      response.data.planTitle.forEach((item) => {
        headersOne.push(item);
        headersOne.push("");
        headersOne.push("");
        headersTwo.push(t("plan.table.designWorkingHours"));
        headersTwo.push(t("plan.table.requiredWorkingHours"));
        headersTwo.push(t("plan.table.capacityLoad"));
        colKey++;
        colList.push({
          field: `dateColTime${colKey}`,
@@ -275,27 +288,16 @@
          width: 160,
        });
      });
      headers.value.push(headersOne);
      headers.value.push(headersTwo);
      const columnList = [...tableColumn, ...colList];
      const dataList = [];
      let startCol = 1;
      //获取map
      response.data.planTable.map((mapItem) => {
        rowKey++;
        let lastCol = startCol + 2;
        merges.push({ s: { r: 0, c: startCol }, e: { r: 0, c: lastCol } });
        startCol = lastCol + 1;
        let data = [];
        const item = {
          id: `${rowKey}`,
        };
        for (const [key, listValue] of Object.entries(mapItem)) {
          data.push(key);
          let tableKey = 0;
          let flag = false;
          listValue.forEach((listItem) => {
@@ -307,24 +309,14 @@
              listItem.requireTimes,
              listItem.capacityLoad
            );
            // 0-100 ç»¿è‰²ï¼Œ101-120黄色,大于120红色
            // listItem.capacityLoad <= 100
            //   ? `<font color="red">${listItem.capacityLoad}%</font>`
            //   : listItem.capacityLoad + "%";
            data.push(listItem.designTimes);
            data.push(listItem.requireTimes);
            data.push(listItem.capacityLoad + "%");
            // if (listItem.capacityLoad > 100) {
            //   flag = true;
            // }
          });
          // item[`resourceName`] = flag
          //   ? `<div class='el-badge'><sup class="el-badge__content is-fixed is-dot"></sup>${key}</div>`
          //   : key;
          item[`resourceName`] = key;
          item[`resourceName`] = key.split("_")[0];
          item[`resourceGroupName`] = formatTypeLabelPlant([key.split("_")[1]]);
        }
        exportData.value.push(data);
        dataList.push(item);
      });
src/views/system/dict/index.vue
@@ -122,6 +122,17 @@
          >更新排产区域</el-button
        >
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="success"
          plain
          icon="Refresh"
          :disabled="loadingRefresh"
          @click="handleRefreshData"
          v-hasPermi="['system:dict:remove']"
          >刷新缓存BOM、工艺路线、库存数据</el-button
        >
      </el-col>
      <right-toolbar
        v-model:showSearch="showSearch"
        @queryTable="getList"
@@ -259,13 +270,14 @@
  refreshCache,
  refreshApsArea
} from "@/api/system/dict/type";
import { refreshBomRouteStorageDataList } from "@/api/basicData/bom/bom.js"
const { proxy } = getCurrentInstance();
const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
const typeList = ref([]);
const open = ref(false);
const loading = ref(true);
const loadingRefresh = ref(false);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
@@ -426,5 +438,18 @@
  });
  handleQuery();
}
function handleRefreshData() {
  loadingRefresh.value = true;
  refreshBomRouteStorageDataList().then(res=>{
    if(res.code==200){
      proxy.$modal.msgSuccess("更新成功");
      loadingRefresh.value = false;
    }else{
      loadingRefresh.value = false;
    }
  }).catch(()=>{
    loadingRefresh.value = false;
  })
}
getList();
</script>