dengrui преди 6 месеца
родител
ревизия
af1ae4608e
променени са 4 файла, в които са добавени 481 реда и са изтрити 24 реда
  1. 51 0
      src/api/plan/index.ts
  2. 106 0
      src/components/Search/index.vue
  3. 317 0
      src/views/plan/filtersheet/index.vue
  4. 7 24
      src/views/plan/workOrder/index.vue

+ 51 - 0
src/api/plan/index.ts

@@ -11,3 +11,54 @@ export function getReturnList(id: string) {
     method: "get",
   });
 }
+//通过工单号获取对应管号
+export function getSeqList(workOrderCode: string) {
+  return request({
+    url: `/api/v1/plan/seq/form/getSeqNo/${workOrderCode}`,
+    method: "get",
+  });
+}
+//获取现存赛选单列表
+export function filterList(data: object) {
+  return request({
+    url: `/api/v1/plan/seq/form/page`,
+    method: "post",
+    data,
+  });
+}
+//获取现工单列表
+export function workCodeList(data: object) {
+  return request({
+    url: `/api/v1/plan/workOrder/page`,
+    method: "post",
+    data,
+  });
+}
+export function addFilter(data: object) {
+  return request({
+    url: `/api/v1/plan/seq/form/add`,
+    method: "post",
+    data,
+  });
+}
+export function updateFilter(data: object) {
+  return request({
+    url: `/api/v1/plan/seq/form/update`,
+    method: "post",
+    data,
+  });
+}
+export function delFilter(data: object) {
+  return request({
+    url: `/api/v1/plan/seq/form/del`,
+    method: "post",
+    data,
+  });
+}
+
+export function getProExcel(formSeqId: string) {
+  return request({
+    url: `/api/v1/ProcessFormData/seqExcel/${formSeqId}`,
+    method: "get",
+  });
+}

+ 106 - 0
src/components/Search/index.vue

@@ -0,0 +1,106 @@
+<template>
+  <div class="body">
+    <div class="itembox">
+      <template v-for="(option, index) in searchOptions" :key="index">
+        <div class="item" v-if="option.type == 'input'">
+          <span class="label">{{ option.label }}:</span>
+          <el-input
+            class="tep"
+            v-model="searchForm[option.prop]"
+            placeholder="Please input"
+          />
+        </div>
+        <div class="item" v-if="option.type == 'select'">
+          <span class="label">{{ option.label }}:</span>
+
+          <el-select
+            class="tep"
+            v-model="searchForm[option.prop]"
+            placeholder="Select"
+          >
+            <el-option
+              v-for="item in options"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </div>
+        <div class="item" v-if="option.type == 'daterange'">
+          <span class="label">{{ option.label }}:</span>
+          <el-date-picker
+            v-model="searchForm[option.prop]"
+            type="daterange"
+            class="tep"
+            range-separator="-"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            value-format="YYYY-MM-DD"
+            format="YYYY-MM-DD"
+          />
+        </div>
+      </template>
+    </div>
+    <div class="oprea">
+      <el-button type="primary" class="btn" @click="getData">查询</el-button>
+      <el-button class="btn" @click="reset">重置</el-button>
+    </div>
+  </div>
+</template>
+<script setup>
+const props = defineProps({
+  searchOptions: {
+    default: [],
+    type: Array,
+  },
+});
+const emit = defineEmits(["dataList"]);
+const searchForm = ref({});
+const getData = () => {
+  emit("dataList");
+};
+const reset = () => {
+  for (let key in searchForm.value) {
+    searchForm.value[key] = "";
+  }
+};
+const setSearchFrom = () => {
+  props.searchOptions.forEach((option) => {});
+};
+const options = [
+  {
+    lable: "a",
+    value: "a",
+  },
+];
+defineExpose({ searchForm });
+</script>
+<style lang="scss" scoped>
+.body {
+  width: 100%;
+  height: 30px;
+  display: flex;
+  margin-bottom: 20px;
+  .itembox {
+    flex: 1;
+    display: grid;
+    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
+    gap: 20px;
+    .item {
+      display: flex;
+      align-items: center;
+      .label {
+        white-space: nowrap;
+        margin-right: 5px;
+        font-size: 14px;
+        color: #606266;
+      }
+    }
+  }
+  .oprea {
+    width: 260px;
+    height: 100%;
+    margin-left: 10px;
+  }
+}
+</style>

+ 317 - 0
src/views/plan/filtersheet/index.vue

@@ -0,0 +1,317 @@
+<template>
+  <div class="mainContentBox">
+    <Search :searchOptions="searchForm" @data-list="getList" ref="searchRef" />
+    <div class="btns">
+      <el-button type="primary" @click="add">新增</el-button>
+    </div>
+    <el-table :data="tableData" border>
+      <el-table-column type="index" label="序号" width="80" />
+      <el-table-column prop="workOrderCode" label="工单编码" />
+      <el-table-column prop="materialCode" label="物料编码" />
+      <el-table-column prop="materialModel" label="物料型号" />
+      <el-table-column prop="materialName" label="物料名称" />
+      <el-table-column prop="orderCode" label="订单编号" />
+      <el-table-column prop="seqNoList" label="管号">
+        <template #default="scope">
+          {{ scope.row.seqNoList.join(", ") }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="hOrder" label="H级">
+        <template #default="{ row }">
+          {{ row.hOrder == "1" ? "是" : "否" }}
+        </template>
+      </el-table-column>
+      <el-table-column label="操作">
+        <template #default="{ row }">
+          <el-button
+            link
+            type="primary"
+            size="small"
+            @click="deleteSheet(row.id)"
+            >删除</el-button
+          >
+          <el-button
+            link
+            type="primary"
+            size="small"
+            @click="showProExcel(row.id)"
+            >筛选单列表</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <div style="float: right">
+      <pagination
+        v-model:total="paginationObj.total"
+        v-model:page="paginationObj.pageNo"
+        v-model:limit="paginationObj.pageSize"
+        @pagination="getList"
+      />
+    </div>
+
+    <el-dialog
+      v-model="dialog.visible"
+      :title="dialog.title"
+      width="950px"
+      @close="dialog.visible = false"
+      style="padding-bottom: 40px"
+    >
+      <!-- <el-card
+        style="cursor: pointer; font-size: 20px"
+        shadow="always"
+        :key="item"
+        @click="toShowExcel(item)"
+        v-for="item in showProList"
+        >{{ item.formName }}</el-card
+      > -->
+      <el-form
+        :model="form"
+        ref="formRef"
+        label-width="auto"
+        style="max-width: 800px"
+      >
+        <el-form-item
+          label="工单编码"
+          :rules="[
+            {
+              required: true,
+
+              trigger: 'blur',
+            },
+          ]"
+          prop="workOrderCode"
+        >
+          <el-select
+            class="tep"
+            :disabled="!addStatus"
+            v-model="form.workOrderCode"
+            @click="dialog1.visible = true"
+          />
+        </el-form-item>
+
+        <el-form-item
+          label="管号"
+          :rules="[
+            {
+              required: true,
+              trigger: 'blur',
+            },
+          ]"
+          prop="seqNoList"
+        >
+          <el-select class="tep" v-model="form.seqNoList" multiple>
+            <el-option
+              v-for="item in options"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+              :disabled="item.disabled"
+            />
+          </el-select>
+        </el-form-item>
+        <div class="btns" style="float: right">
+          <el-button type="primary" @click="submit">确定</el-button>
+          <el-button @click="cancel">取消</el-button>
+        </div>
+      </el-form>
+    </el-dialog>
+    <el-dialog
+      v-model="dialog1.visible"
+      :title="dialog1.title"
+      width="950px"
+      @close="dialog1.visible = false"
+    >
+      <work-order-page @order-info="materialInfo1" />
+    </el-dialog>
+    <el-dialog
+      v-model="workOderShow"
+      :title="updateTitle"
+      @close="workOderShow = false"
+      width="1600"
+    >
+      <proWorkOrderExcel :data="ExDataObj" @close="closeShow" />
+    </el-dialog>
+    <el-dialog
+      v-model="dialog8.visible"
+      :title="dialog8.title"
+      width="950px"
+      @close="dialog8.visible = false"
+    >
+      <el-card
+        style="cursor: pointer; font-size: 20px"
+        shadow="always"
+        :key="item"
+        @click="toShowExcel(item)"
+        v-for="item in showProList"
+        >{{ item.formName }}</el-card
+      >
+    </el-dialog>
+  </div>
+</template>
+<script setup>
+import { ref } from "vue";
+import dictDataUtil from "@/common/configs/dictDataUtil";
+import {
+  filterList,
+  getSeqList,
+  addFilter,
+  updateFilter,
+  delFilter,
+  getProExcel,
+} from "@/api/plan";
+const updateTitle = ref("筛选单详情");
+const tableData = ref([]);
+const formRef = ref(null);
+const addStatus = ref(false);
+const ExDataObj = ref({});
+const workOderShow = ref(false);
+const showProList = ref([]);
+const showProExcel = async (id) => {
+  const { data, code } = await getProExcel(id);
+  showProList.value = data;
+  dialog8.visible = true;
+};
+const toShowExcel = (item) => {
+  ExDataObj.value = item;
+  workOderShow.value = true;
+};
+const dialog = reactive({
+  visible: false,
+  title: "新增筛选单",
+});
+const dialog1 = reactive({
+  visible: false,
+  title: "工单编码选择",
+});
+const dialog8 = reactive({
+  title: "筛选单列表",
+  visible: false,
+});
+const paginationObj = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  total: 0,
+});
+const submit = async () => {
+  formRef.value.validate((valid) => {
+    if (valid) {
+      if (addStatus.value == true) {
+        toAdd();
+      } else {
+        toEdiet();
+      }
+    } else {
+      ElMessage.warning("请检查表单选项");
+    }
+  });
+};
+const closeShow = () => {
+  workOderShow.value = false;
+};
+const resetForm = () => {
+  form.value.id = "";
+  form.value.seqNoList = [];
+  form.value.workOrderCode = "";
+};
+const toAdd = async () => {
+  const { code } = await addFilter({ ...form.value });
+  if (code == "200") {
+    ElMessage.success("新增成功");
+    resetForm();
+    getList();
+    dialog.visible = false;
+  }
+};
+const toEdiet = async () => {
+  const { code } = await updateFilter({ ...form.value });
+  if (code == "200") {
+    ElMessage.success("修改成功");
+    resetForm();
+    getList();
+    dialog.visible = false;
+  }
+};
+const deleteSheet = async (id) => {
+  const { code } = await delFilter({ id });
+  if (code === "200") {
+    ElMessage.success("删除成功");
+    getList();
+  }
+};
+const options = ref([]);
+const searchRef = ref(null);
+const form = ref({ seqNoList: [] });
+const searchForm = [
+  {
+    label: "工单编码",
+    prop: "workOrderCode",
+    type: "input",
+  },
+  {
+    label: "物料编码",
+    prop: "materialCode",
+    type: "input",
+  },
+  {
+    label: "物料名称",
+    prop: "materialName",
+    type: "input",
+  },
+];
+const materialInfo1 = async (value) => {
+  form.value.workOrderCode = value.workOrderCode;
+  await setSeqList();
+  dialog1.visible = false;
+};
+const setSeqList = async () => {
+  const { data } = await getSeqList(form.value.workOrderCode);
+  options.value = [];
+  data.forEach((element) => {
+    if (element.state == "0") {
+      options.value.push({
+        value: element.seqNo,
+        label: element.seqNo,
+      });
+    } else {
+      options.value.push({
+        value: element.seqNo,
+        label: element.seqNo,
+        disabled: true,
+      });
+    }
+  });
+};
+const getList = async () => {
+  const { data, totalCount } = await filterList({
+    ...searchRef.value.searchForm,
+    pageNo: paginationObj.pageNo,
+    pageSize: paginationObj.pageSize,
+  });
+  tableData.value = data.records;
+  paginationObj.total = data.totalCount;
+};
+const add = () => {
+  resetForm();
+  addStatus.value = true;
+  dialog.visible = true;
+};
+const edit = async (row) => {
+  addStatus.value = false;
+  form.value = row;
+  await setSeqList();
+  dialog.visible = true;
+};
+const cancel = () => {
+  resetForm();
+  dialog.visible = false;
+};
+onMounted(() => {
+  getList();
+});
+</script>
+
+<style lang="scss" scoped>
+.btns {
+  margin-bottom: 10px;
+}
+</style>

+ 7 - 24
src/views/plan/workOrder/index.vue

@@ -302,21 +302,6 @@
         multipleKey="workOrderCode"
       />
     </el-dialog>
-    <el-dialog
-      v-model="dialog8.visible"
-      :title="dialog8.title"
-      width="950px"
-      @close="dialog8.visible = false"
-    >
-      <el-card
-        style="cursor: pointer; font-size: 20px"
-        shadow="always"
-        :key="item"
-        @click="toShowExcel(item)"
-        v-for="item in showProList"
-        >{{ item.formName }}</el-card
-      >
-    </el-dialog>
   </div>
 </template>
 <script setup>
@@ -352,15 +337,13 @@ const excelData = ref([]);
 const showProList = ref([]);
 const showProExcel = async (id) => {
   const { data, code } = await getProExcel(id);
-  showProList.value = data;
-  dialog8.visible = true;
-  // if (code == "200") {
-  //   ExDataObj.value = data;
-  //   workOderShow.value = true;
-  // } else {
-  //   ExDataObj.value = {};
-  //   workOderShow.value = false;
-  // }
+  if (code == "200") {
+    ExDataObj.value = data;
+    workOderShow.value = true;
+  } else {
+    ExDataObj.value = {};
+    workOderShow.value = false;
+  }
 };
 const toShowExcel = (item) => {
   ExDataObj.value = item;