chengxiangling
2025-05-12 96872a90ce8eb5c3395c31bbebcb93bd7a36027a
src/views/basicData/calendar/index.vue
@@ -8,67 +8,26 @@
      v-show="showSearch"
      label-width="68px"
    >
      <el-row type="flex" justify="right">
        <el-form-item label="日历描述" prop="description">
          <el-input
            style="width: 140px"
            v-model="queryParams.description"
            placeholder="请输入描述关键词"
            clearable
            @keyup.enter="handleQuery"
          />
        </el-form-item>
        <el-form-item label="日历类型" prop="effectiveDate">
          <el-select clearable v-model="dateType" style="width: 90px">
            <el-option
              v-for="(item, index) of dateTypeList"
              :key="index"
              :label="item.name"
              :value="item.name"
              >{{ item.name }}</el-option
      <el-row type="flex" justify="left">
        <el-col :span="6">
          <el-form-item label="日历描述" prop="description">
            <el-input
              style="width: 140px"
              v-model="queryParams.description"
              placeholder="请输入描述关键词"
              clearable
              @keyup.enter="handleQuery"
            />
          </el-form-item>
        </el-col>
        <el-col :span="18" style="text-align: right">
          <el-form-item class="column-with-margin">
            <el-button type="primary" icon="Search" @click="handleQuery"
              >查询</el-button
            >
          </el-select>
        </el-form-item>
        <el-form-item label="生效日期" prop="effectiveDate">
          <el-date-picker
            clearable
            v-model="queryParams.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="queryParams.expiringDate"
          type="date"
          value-format="YYYY-MM-DD"
          placeholder="请选择失效日期">
        </el-date-picker> -->
          <el-input
            style="width: 180px"
            v-model="queryParams.description"
            placeholder="请输入工厂关键词"
            clearable
            @keyup.enter="handleQuery"
          />
        </el-form-item>
      </el-row>
      <el-row type="flex" justify="end">
        <el-form-item class="column-with-margin">
          <el-button type="primary" icon="Search" @click="handleQuery"
            >查询</el-button
          >
          <el-button icon="Refresh" @click="resetQuery">重置</el-button>
          <!-- <el-button
            type="success"
            icon="Plus"
            @click="handleAdd"
            v-hasPermi="['core:calendar:add']"
            >新增日历</el-button
          > -->
        </el-form-item>
            <el-button icon="Refresh" @click="resetQuery">重置</el-button>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
@@ -79,7 +38,7 @@
          plain
          icon="Plus"
          @click="handleAdd"
          v-hasPermi="['core:calendar:add']"
          v-hasPermi="['aps:calendar:add']"
          >新增</el-button
        >
      </el-col>
@@ -90,7 +49,7 @@
          icon="Edit"
          :disabled="single"
          @click="handleUpdate"
          v-hasPermi="['core:calendar:edit']"
          v-hasPermi="['aps:calendar:update']"
          >修改</el-button
        >
      </el-col>
@@ -101,11 +60,11 @@
          icon="Delete"
          :disabled="multiple"
          @click="handleDelete"
          v-hasPermi="['core:calendar:remove']"
          v-hasPermi="['aps:calendar:remove']"
          >删除</el-button
        >
      </el-col>
      <el-col :span="1.5">
      <!-- <el-col :span="1.5">
        <el-button
          type="warning"
          plain
@@ -114,7 +73,7 @@
          v-hasPermi="['core:calendar:export']"
          >导出</el-button
        >
      </el-col>
      </el-col> -->
      <right-toolbar
        v-model:showSearch="showSearch"
        @queryTable="getList"
@@ -126,17 +85,56 @@
      :data="calendarList"
      :loading="loading"
      :height="height"
      ref="tableRef"
      :page="page"
      @changePageNo="changePageNo"
      @changePageSize="changePageSize"
      @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 #content="{ row }">
        <vxe-tag>周工作日</vxe-tag>
      <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 }">
        <vxe-button
          mode="text"
          @click="handleUpdate(row)"
          v-hasPermi="['aps:calendar:update']"
          >修改</vxe-button
        >
        <vxe-button
          mode="text"
          @click="handleDelete(row)"
          v-hasPermi="['aps:calendar:remove']"
          >删除</vxe-button
        >
      </template>
    </HxlhTable>
@@ -153,8 +151,8 @@
        </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 :label="'1'">周工作</el-radio>
            <el-radio :label="'2'">节假日</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="生效时间" prop="effectiveDate">
@@ -177,7 +175,7 @@
          >
          </el-date-picker>
        </el-form-item>
        <div v-if="form.type === 1">
        <div v-if="form.type === '1'">
          <div class="title_bar_line">
            <div class="line_short"></div>
            <div>周工作设置</div>
@@ -190,14 +188,14 @@
          >
            <div class="week_flex_item">{{ item.chineseName }}</div>
            <div class="week_flex_item">
              <el-radio-group v-model="item.work" @change="handleSetWorkDays">
              <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 v-if="form.type === '2'">
          <div class="title_bar_line">
            <div class="line_short"></div>
            <div>节假日设置</div>
@@ -311,10 +309,12 @@
  addCalendar,
  updateCalendar,
} from "@/api/basicData/calendar";
import axios from "axios";
import { listAll_plant } from "@/api/basicData/plant";
import { listAll_shop, listAps_shop } from "@/api/basicData/shop";
import { selectProcessNameList } from "@/api/basicData/processRoute.js";
const { proxy } = getCurrentInstance();
const tableRef = ref();
const calendarList = ref([]);
const open = ref(false);
const loading = ref(true);
@@ -325,7 +325,9 @@
const total = ref(0);
const title = ref("");
const data = reactive({
  form: {},
  form: {
    type: "1",
  },
  queryParams: {
    pageNum: 1,
    pageSize: 10,
@@ -381,9 +383,11 @@
const dateTypeList = ref([
  {
    name: "周工作",
    label: "1",
  },
  {
    name: "节假日",
    label: "2",
  },
]);
const typeRadioNumber = ref(1);
@@ -394,7 +398,7 @@
    work: "y",
  },
  {
    day: "TuesDay",
    day: "Tuesday",
    chineseName: "星期二",
    work: "y",
  },
@@ -432,7 +436,7 @@
const shopList = ref([]);
const allShopList = ref([]);
const processList = ref([]);
const height = ref(document.documentElement.clientHeight - 260 + "px;");
const height = ref(document.documentElement.clientHeight - 220 + "px;");
// 表格配置-列表
const columns = ref([
  { type: "checkbox", width: 60, align: "center" },
@@ -445,28 +449,28 @@
  {
    title: "日历类型",
    field: "type",
    width: 150,
    width: 200,
    align: "center",
    slots: { default: "status" },
  },
  {
    title: "日历生效时间",
    field: "effectiveDate",
    width: 100,
    width: 200,
    align: "center",
  },
  {
    title: "日历失效时间",
    field: "expiringDate",
    width: 150,
    width: 200,
    align: "center",
  },
  {
    title: "日历内容",
    field: "content",
    width: 200,
    width: 230,
    align: "center",
    slots: { default: "content" },
    slots: { default: "mark" },
  },
  {
    title: "适用工厂",
@@ -474,16 +478,11 @@
    width: 200,
    align: "center",
    formatter: ({ cellValue, row, column }) => {
      console.log(cellValue, "000hsudhwhuwhuhwu");
      for (let i = 0; i < plantList.value.length; i++) {
        console.log(
          cellValue,
          plantList.value[i].plantCode,
          plantList.value[i].plantName,
          "111hsudhwhuwhuhwu"
        );
        if (cellValue === plantList.value[i].plantCode) {
          return plantList.value[i].plantName;
      if (cellValue) {
        for (let i = 0; i < plantList.value.length; i++) {
          if (cellValue === plantList.value[i].plantCode) {
            return plantList.value[i].plantName;
          }
        }
      }
    },
@@ -491,37 +490,42 @@
  {
    title: "适用车间",
    field: "applicableWorkshop",
    width: 90,
    width: 200,
    align: "center",
    formatter: ({ cellValue, row, column }) => {
      console.log(row.applicableFactory, "llll");
      listAps_shop({ plantCode: row.applicableFactory }).then((response) => {
        console.log(response.rows, "适用车间");
        shopList.value = response.rows;
      });
      for (let i = 0; i < shopList.value.length; i++) {
        if (cellValue === shopList.value[i].id) {
          return shopList.value[i].shopName;
      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: 90,
    width: 200,
    align: "center",
  },
  {
    title: "创建者",
    field: "createBy",
    width: 90,
    width: 200,
    align: "center",
  },
  {
    title: "创建时间",
    field: "createTime",
    width: 90,
    width: 200,
    align: "center",
  },
  {
    title: "操作",
    width: 100,
    fixed: "right",
    slots: { default: "buttons" },
    align: "center",
  },
]);
@@ -533,15 +537,30 @@
});
/** 查询日历管理列表 */
async function getList() {
function getList() {
  loading.value = true;
  listCalendar(queryParams.value).then((response) => {
    calendarList.value = response.rows;
    total.value = response.total;
    page.value.total = response.total;
    loading.value = false;
  });
  const res = await listAll_plant({});
  plantList.value = res.data;
  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);
    });
}
// 取消按钮
@@ -555,7 +574,7 @@
  form.value = {
    id: null,
    description: null,
    type: null,
    type: "1",
    effectiveDate: null,
    expiringDate: null,
    content: null,
@@ -594,15 +613,10 @@
  reset();
  open.value = true;
  title.value = "添加日历管理";
  const res = await listAll_plant({});
  plantList.value = res.data;
  console.log(res, "sjchhscwhciwhcwi");
}
/** 选择工厂后事件 加载车间 和 工序 **/
function changePlant(plant) {
  listAps_shop({ plantCode: plant }).then((response) => {
    console.log(response, "sbcsuhcuhscschsc");
    shopList.value = response.rows;
  });
  selectProcessNameList({ orgCode: plant }).then((response) => {
@@ -615,6 +629,15 @@
  const _id = row.id || ids.value;
  getCalendar(_id).then((response) => {
    form.value = response.data;
    // form.value.content = JSON.parse(response.data.content.value);
    if (form.value.type === "1") {
      weekDaysSettingList.value = JSON.parse(
        response.data.content.value
      ).weekdays;
    } else if (form.value.type === "2") {
      holidays.value = JSON.parse(response.data.content.value).holidays;
    }
    open.value = true;
    title.value = "修改日历管理";
  });
@@ -625,13 +648,35 @@
  proxy.$refs["calendarRef"].validate((valid) => {
    if (valid) {
      if (form.value.id != null) {
        updateCalendar(form.value).then((response) => {
          proxy.$modal.msgSuccess("修改成功");
          open.value = false;
          getList();
        });
        if (form.value.type === "1") {
          updateCalendar({
            ...form.value,
            content: {
              weekdays: weekDaysSettingList.value,
            },
            applicableWorkshop: form.value.applicableWorkshop,
            applicableProcess: form.value.applicableProcess,
          }).then((response) => {
            proxy.$modal.msgSuccess("修改成功");
            open.value = false;
            getList();
          });
        } else if (form.value.type === "2") {
          updateCalendar({
            ...form.value,
            content: {
              holidays: holidays.value,
            },
            applicableWorkshop: form.value.applicableWorkshop,
            applicableProcess: form.value.applicableProcess,
          }).then((response) => {
            proxy.$modal.msgSuccess("修改成功");
            open.value = false;
            getList();
          });
        }
      } else {
        if (typeRadioNumber.value === 1) {
        if (form.value.type === "1") {
          addCalendar({
            ...form.value,
            content: {
@@ -642,7 +687,7 @@
            open.value = false;
            getList();
          });
        }else if(typeRadioNumber.value === 2){
        } else if (form.value.type === "2") {
          addCalendar({
            ...form.value,
            content: {
@@ -685,18 +730,14 @@
  );
}
function handleSwitchType(e) {
  console.log(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 handleSetWorkDays(e) {
  console.log(weekDaysSettingList.value, "设置周工作日");
}
function changePageNo(currentPage) {
  queryParams.value.pageNum = currentPage;
@@ -709,13 +750,12 @@
  queryParams.value.pageSize = pageSize;
  getList();
}
// function formatType(type) {
//   if(type===1){
//     return "周工作"
//   }else{
//     return "节假日"
//   }
// }
// 多选框选中数据
const handleCheckboxChange = (data) => {
  ids.value = data.records.map((item) => item.id);
  single.value = data.records.length !== 1;
  multiple.value = !data.records.length;
};
onMounted(() => {
  getList();
});
@@ -766,4 +806,13 @@
.factory_use_item {
  margin-top: 10px;
}
.mart5 {
  margin-top: 5px;
}
.custom-height {
  height: 200px; /* 或者使用 min-height */
}
.auto-height-grid .xe-body .xe-body--row {
  height: auto; /* 或者使用 min-height */
}
</style>