Преглед изворни кода

预排销售订单导入,查询修改。已转销售订单查询

zhangqing пре 1 година
родитељ
комит
0566e5a9ed

+ 141 - 0
src/views/aps/presalesorder/import-dialog.vue

@@ -0,0 +1,141 @@
+<template>
+  <!-- 上传 -->
+  <el-dialog :title="defModule" :visible.sync="dialogVisible" width="40%">
+    <el-form label-width="110px" class="zw-criterion">
+      <el-form-item label="选择文件">
+        <el-upload
+          class="avatar-uploader"
+          action="#"
+          :show-file-list="false"
+          :http-request="handlSuccess"
+          :before-upload="beforeUpload"
+        >
+          <el-button icon="el-icon-plus" size="small" type="primary"
+            >文件上传</el-button
+          >
+          <div slot="tip" class="el-upload__tip">
+            只能上传excel文件,点击
+            <el-link
+              type="primary"
+              :underline="false"
+              @click="downLoadTemplate()"
+            >
+              下载模板</el-link
+            >
+          </div>
+        </el-upload>
+      </el-form-item>
+      <el-form-item label="上传列表">
+        <div class="imgs-box">
+          <p v-for="(item, index) in attaments" :key="index" class="imgs-p">
+            <span> {{ item.name }}</span>
+            <el-link @click="delFileList(index)" type="primary">删除</el-link>
+          </p>
+        </div>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button size="small" @click="dialogVisible = false">关 闭</el-button>
+      <el-button size="small" @click="upload" type="primary" :loading="loading">上 传</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { importFile, importTemplate } from '@/api/aps/presalesorder';
+
+export default {
+  props: {
+    // eslint-disable-next-line vue/require-prop-type-constructor
+    defModule: ''
+  },
+  //注册组件
+  data() {
+    return {
+      loading: false, // 加载动画
+      showViewer: false, // 显示查看器
+      dialogVisible: false,
+      uploadShow: false,
+      module: '',
+      attaments: [], //上传文件
+      file: ''
+    };
+  },
+  created() {},
+  methods: {
+    open() {
+      this.attaments = [];
+      this.module = '';
+      this.dialogVisible = true;
+    },
+    //删除附件
+    delFileList(index) {
+      this.attaments.splice(index, 1);
+    },
+    //上传限制
+    beforeUpload(file) {
+      const isLt10M = file.size / 1024 / 1024 < 10;
+      if (!isLt10M) {
+        this.$message.error('导入单文件大小不能超过 10MB!');
+      }
+      return isLt10M;
+    },
+    //图片上传
+    handlSuccess(param) {
+      this.file = param.file;
+      this.attaments.push(param.file);
+    },
+    // 文件上传
+    async upload() {
+      if (this.attaments.length == 0) {
+        return this.$message.warning('文件不能为空!');
+      }
+      const formData = new FormData();
+      this.attaments.forEach((item, index) => {
+        formData.append(`importExcels`, item);
+      });
+      this.loading = true;
+      importFile(formData)
+        .then((res) => {
+          this.$message.success('操作成功!');
+          this.dialogVisible = false;
+          this.$emit('success');
+          this.loading = false;
+        })
+        .catch((data) => {
+          this.loading = false;
+          if (data.code != -1) {
+            this.$message.error(data.message);
+          }
+        })
+    },
+    //下载模板
+    downLoadTemplate(){
+      importTemplate()
+    }
+  }
+};
+</script>
+
+<style lang="scss">
+.zw-table-header {
+  float: right;
+}
+
+.imgs-box .imgs-p {
+  height: 30px;
+  background: #f0f3f3;
+  line-height: 30px;
+  width: 372px;
+  margin-bottom: 5px;
+  padding: 0 10px;
+  display: flex;
+  justify-content: space-between;
+}
+.zw-criterion-normal {
+  padding: 20px 0 0 0;
+}
+.el-main {
+  overflow: hidden;
+}
+</style>

+ 15 - 9
src/views/aps/presalesorder/index.vue

@@ -181,13 +181,13 @@
       </ele-modal>
 
       <!-- 直报系统导入对话框 -->
-      <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <!-- <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
         <el-upload class="avatar-uploader" action="#" :show-file-list="false" :http-request="uploadFile"
           :before-upload="beforeUpload" :on-change="handleChange" ref="uploadFile">
           <el-button type="warning" size="mini">批量导入</el-button>
         </el-upload>
 
-      </el-dialog>
+      </el-dialog> -->
 
       <ele-modal title="选择工厂" :visible.sync="factoriesVisible" :before-close="handleCancel"
         :close-on-click-modal="false" :close-on-press-escape="false" append-to-body width="20%" :maxable="true">
@@ -202,7 +202,11 @@
         </div>
       </ele-modal>
     </el-card>
-
+    <importDialog
+      :defModule="upload.title"
+      ref="importDialogRef"
+      @success="reload"
+    />
   </div>
 </template>
 
@@ -211,15 +215,13 @@ import { estimateDeliveryDates, createAll, convertToSalesOrder, importTemplate,
 import { API_BASE_URL, TOKEN_HEADER_NAME, LAYOUT_PATH } from '@/config/setting';
 import { getToken, setToken } from '@/utils/token-util';
 import { download } from '@/utils/request';
-
 import modalTitle from '@/components/modalTitle.vue';
-
 import search from './search.vue';
-
+import importDialog from "./import-dialog.vue";
 export default {
   name: "PreSalesorder",
 
-  components: { modalTitle, search },
+  components: { modalTitle, search, importDialog },
   data() {
     return {
       fullscreen: false,
@@ -455,7 +457,10 @@ export default {
       this.factoryList = res.data;
     },
     datasource({ page, where, limit }) {
-      const res = listSalesorder({ ...where, page, limit });
+      let pageNum = page;
+      let size = limit;
+      where.queryType = 1; //查询类型(1:预销售单页面查询;2:已转销售单页面查询)
+      const res = listSalesorder({ ...where, pageNum, size });
       return res;
     },
     reload(where) {
@@ -627,7 +632,8 @@ export default {
     /** 导入按钮操作 */
     handleImport() {
       this.upload.title = "销售订单数据导入";
-      this.upload.open = true;
+      // this.upload.open = true;
+      this.$refs.importDialogRef.open();
     },
     //文件上传
     uploadFile(param) {

+ 4 - 4
src/views/aps/presalesorder/search.vue

@@ -70,10 +70,10 @@ export default {
           value: '1',
           label: '已预估'
         },
-        {
-          value: '2',
-          label: '已转销售单'
-        }
+        // {
+        //   value: '2',
+        //   label: '已转销售单'
+        // }
       ]
     };
   },

+ 871 - 0
src/views/aps/transferred/index.vue

@@ -0,0 +1,871 @@
+<template>
+
+  <div class="ele-body">
+    <el-card shadow="never" v-loading="loading">
+      <search ref="search" @search="reload"></search>
+
+      <ele-pro-table ref="tableRef" :columns="columns" :datasource="datasource" :pageSize="20"
+        :pageSizes="[20, 30, 40, 50, 100]" row-key="id" @selection-change="handleSelectionChange" :initLoad="false" @select="handleSelect"
+        @done="onDone">
+        <!-- <template v-slot:toolbar>
+          <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleEstimatedDelivery">交期预估</el-button>
+          <el-button style="background-color: #dd2c00;color: white;border-color: #dd2c00" icon="el-icon-delete"
+            size="mini" :disabled="multiple" @click="handleDelete">批量删除</el-button>
+          <el-button style="background-color: #ec407a;color: white;border-color: #ec407a" icon="el-icon-download"
+            size="mini" @click="importTemplate">下载模板</el-button>
+          <el-button type="info" icon="el-icon-upload2" size="mini" @click="handleImport">导入</el-button>
+          <el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
+          <el-button style="background-color: #8bc34a;color: white;border-color: #8bc34a" icon="el-icon-download"
+            size="mini" :disabled="ids.length == 0" @click="handleSaleorder">转销售订单</el-button>
+        </template> -->
+        <template v-slot:status="{ row }">
+          {{ row.status == 0 ? '未预估' : row.status == 1 ? '已预估' : '已转销售单' }}
+        </template>
+
+        <!-- 操作列 -->
+        <!-- <template v-slot:action="{ row }">
+          <el-link type="primary" :underline="false" icon="el-icon-edit" @click="handleUpdate(row)">
+            修改
+          </el-link>
+          <el-popconfirm class="ele-action" title='是否确认删除此数据?' @confirm="handleDelete(row)">
+            <template v-slot:reference>
+              <el-link type="danger" :underline="false" icon="el-icon-delete">
+                删除
+              </el-link>
+            </template>
+          </el-popconfirm>
+        </template> -->
+      </ele-pro-table>
+
+
+
+      <!-- 添加或修改销售订单对话框 -->
+      <ele-modal :title="titleExpect" :visible.sync="openExpect" :before-close="cancelExpect"
+        :close-on-click-modal="false" :close-on-press-escape="false" append-to-body width="70%" :maxable="true">
+        <el-table v-loading="loading" :data="salesOrderExpectList">
+          <el-table-column label="序号" align="center" prop="id" />
+          <el-table-column label="年份" align="center" prop="year" />
+          <el-table-column label="月份" align="center" prop="month" />
+          <el-table-column label="日期" align="center" prop="day" />
+          <el-table-column label="预计交付日期" align="center" prop="deliverDay" />
+          <el-table-column label="规划产能(吨)" align="center" prop="plannedCapacity" />
+          <el-table-column label="已排产产能" align="center" prop="plannedSumCapacity" />
+          <el-table-column label="未排产产能" align="center" prop="unplannedSumCapacity" />
+          <el-table-column label="本次排产产能" align="center" prop="currentPlannedSumCapacity" />
+          <el-table-column label="已排产单号列表" align="center" prop="plannedOrder" />
+          <el-table-column label="已排产产能列表" align="center" prop="plannedOrderCapacity" />
+        </el-table>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="primary" :disabled="single" @click="submitFormExpect">确定交期</el-button>
+          <el-button type="primary" :disabled="multiple" @click="submitFormAllExpect">确定所有交期</el-button>
+          <el-button @click="cancelExpect">取 消</el-button>
+        </div>
+      </ele-modal>
+
+      <!-- 添加或修改销售订单对话框 -->
+      <ele-modal :title="title" :visible.sync="open" :before-close="cancel" :close-on-click-modal="false"
+        :close-on-press-escape="false" append-to-body width="70%" :maxable="true">
+        <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+          <el-row>
+            <el-col :span="8">
+              <el-form-item label="销售订单" prop="preSalesOrderNumber">
+                <el-input v-model="form.preSalesOrderNumber" placeholder="请输入销售订单" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="客户代号" prop="customerCode">
+                <el-input v-model="form.customerCode" placeholder="请输入客户代号" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="客户名称" prop="customerName">
+                <el-input v-model="form.customerName" placeholder="请输入客户名称" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <el-row>
+            <el-col :span="8">
+              <el-form-item label="产品描述" prop="productDescription">
+                <el-input v-model="form.productDescription" type="textarea" placeholder="请输入内容" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="产品编码" prop="productCode">
+                <el-input v-model="form.productCode" placeholder="请输入产品编码" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="订单数量" prop="orderQuantity">
+                <el-input v-model="form.orderQuantity" placeholder="请输入订单数量" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <el-row>
+            <el-col :span="8">
+              <el-form-item label="单位" prop="unit">
+                <el-input v-model="form.unit" placeholder="请输入单位" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="重量" prop="weightKg">
+                <el-input v-model="form.weightKg" placeholder="请输入重量" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="客户交期" prop="customerDeliveryDate">
+                <el-date-picker clearable v-model="form.customerDeliveryDate" type="date" value-format="yyyy-MM-dd"
+                  placeholder="请选择客户交期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="8">
+              <el-form-item label="生产交期" prop="productionDeliveryDate">
+                <el-date-picker clearable v-model="form.productionDeliveryDate" type="date" value-format="yyyy-MM-dd"
+                  placeholder="请选择生产交期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="材料编码" prop="materialCode">
+                <el-input v-model="form.materialCode" placeholder="请输入材料编码" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="材料描述" prop="materialDescription">
+                <el-input v-model="form.materialDescription" type="textarea" placeholder="请输入内容" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="8">
+              <el-form-item label="物料数量" prop="materialQuantity">
+                <el-input v-model="form.materialQuantity" placeholder="请输入物料数量" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="物料单位" prop="materialUnit">
+                <el-input v-model="form.materialUnit" placeholder="请输入物料单位" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="物料重量" prop="materialWeightKg">
+                <el-input v-model="form.materialWeightKg" placeholder="请输入物料重量" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="8">
+              <el-form-item label="编号" prop="productionCodes">
+                <el-input v-model="form.productionCodes" placeholder="请输入编号,用','隔开" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </ele-modal>
+
+      <!-- 直报系统导入对话框 -->
+      <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+        <el-upload class="avatar-uploader" action="#" :show-file-list="false" :http-request="uploadFile"
+          :before-upload="beforeUpload" :on-change="handleChange" ref="uploadFile">
+          <el-button type="warning" size="mini">批量导入</el-button>
+        </el-upload>
+
+      </el-dialog>
+
+      <ele-modal title="选择工厂" :visible.sync="factoriesVisible" :before-close="handleCancel"
+        :close-on-click-modal="false" :close-on-press-escape="false" append-to-body width="20%" :maxable="true">
+        <el-row>
+          <el-select v-model="factoriesId">
+            <el-option v-for="item of factoryList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+          </el-select>
+        </el-row>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="primary" @click="handleSubmit">确 定</el-button>
+          <el-button @click="handleCancel">取 消</el-button>
+        </div>
+      </ele-modal>
+    </el-card>
+
+  </div>
+</template>
+
+<script>
+import { estimateDeliveryDates, createAll, convertToSalesOrder, importTemplate, exportFile, importFile, listSalesorder, getSalesOrder, delSalesorder, addSalesorder, updateSalesorder, listSalesOrderExpect, occupyRes, listSalesOrderOccupyRes, listSalesorderExpectAll, occupyAllRes, getQueryFactory } from "@/api/aps/presalesorder";
+import { API_BASE_URL, TOKEN_HEADER_NAME, LAYOUT_PATH } from '@/config/setting';
+import { getToken, setToken } from '@/utils/token-util';
+import { download } from '@/utils/request';
+
+import modalTitle from '@/components/modalTitle.vue';
+
+import search from './search.vue';
+
+export default {
+  name: "PreSalesorder",
+
+  components: { modalTitle, search },
+  data() {
+    return {
+      fullscreen: false,
+      fileList: [],
+      isSubmitting: true,
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        // headers: {
+        // 	Authorization: "Bearer " +getToken()
+        // },
+        // 上传的地址
+        url: API_BASE_URL + "/aps/presalesorder/importData"
+      },
+      // 遮罩层
+      loading: false,
+      // 选中数组
+      ids: [],
+      selectionData: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 销售订单表格数据
+      salesorderList: [],
+      // 销售订单交期预估表格数据
+      salesOrderExpectList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 弹出层标题
+      titleExpect: "交期确定",
+      // 是否显示弹出层
+      openExpect: false,
+
+      columns: [
+        // {
+        //   width: 45,
+        //   type: 'selection',
+        //   columnKey: 'selection',
+        //   align: 'center',
+        //   reserveSelection: true
+        // },
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'preSalesOrderNumber',
+          label: '销售订单号',
+          showOverflowTooltip: true,
+          align: 'center',
+          width: 140,
+        },
+        {
+          prop: 'customerCode',
+          label: '客户代号',
+          showOverflowTooltip: true,
+          align: 'center',
+        },
+        {
+          prop: 'customerName',
+          label: '客户名称',
+          showOverflowTooltip: true,
+          align: 'center',
+          width: 140,
+        },
+        {
+          prop: 'productDescription',
+          label: '产品描述',
+          showOverflowTooltip: true,
+          align: 'center',
+          width: 140,
+        },
+        {
+          prop: 'productCode',
+          label: '产品编码',
+          showOverflowTooltip: true,
+          align: 'center',
+          width: 140,
+        },
+        {
+          prop: 'orderQuantity',
+          label: '订单数量',
+          showOverflowTooltip: true,
+          align: 'center',
+        },
+        {
+          prop: 'unit',
+          label: '单位',
+          showOverflowTooltip: true,
+          align: 'center',
+        },
+        {
+          prop: 'weightKg',
+          label: '重量',
+          showOverflowTooltip: true,
+          align: 'center',
+        },
+        {
+          prop: 'customerDeliveryDate',
+          label: '客户交期',
+          showOverflowTooltip: true,
+          align: 'center',
+          width: 140,
+        },
+        {
+          prop: 'productionDeliveryDate',
+          label: '生产交期',
+          showOverflowTooltip: true,
+          align: 'center',
+          width: 140,
+        },
+        {
+          prop: 'materialCode',
+          label: '材料编码',
+          showOverflowTooltip: true,
+          align: 'center',
+          width: 140,
+        },
+        {
+          prop: 'materialDescription',
+          label: '材料描述',
+          showOverflowTooltip: true,
+          align: 'center',
+          width: 140,
+        },
+        {
+          prop:'productionCodes',
+          label: '编号',
+          showOverflowTooltip: true,
+          align: 'center',
+          width: 140,
+        },
+        {
+          prop: 'factoriesName',
+          label: '工厂名称',
+          showOverflowTooltip: true,
+          align: 'center',
+          width: 120,
+        },
+        {
+          prop: 'materialQuantity',
+          label: '物料数量',
+          showOverflowTooltip: true,
+          align: 'center',
+        },
+        {
+          prop: 'materialUnit',
+          label: '物料单位',
+          showOverflowTooltip: true,
+          align: 'center',
+        },
+        {
+          prop: 'materialWeightKg',
+          label: '物料重量(kg)',
+          showOverflowTooltip: true,
+          align: 'center',
+        },
+        // {
+        //   prop: 'status',
+        //   slot: 'status',
+        //   width: 120,
+        //   label: '订单状态',
+        //   showOverflowTooltip: true,
+        //   align: 'center',
+        // },
+        // {
+        //   columnKey: 'action',
+        //   label: '操作',
+        //   width: 150,
+        //   align: 'center',
+        //   resizable: false,
+        //   slot: 'action',
+        //   fixed: 'right'
+        // }
+      ],
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        preSalesOrderNumber: [
+          { required: true, message: "销售订单不能为空", trigger: "blur" }
+        ],
+      },
+      selDataIds: [],
+      whereForm: {},
+      factoriesId: '',
+      factoriesVisible: false,
+      factoryList: []
+    };
+  },
+  async created() {
+    await this.reload();
+    await this.getFactoryList();
+  },
+  methods: {
+    handleSelect(selection, row) {
+      const matchField = 'preSalesOrderNumber';
+      const isSelected = selection.some(item => item.id === row.id);
+      const list = this.$refs.tableRef.getData()
+      const matchedRows = list.filter(
+        item => item[matchField] === row[matchField]
+      )
+
+      // 批量设置选择状态
+      this.$nextTick(() => {
+        matchedRows.forEach(item => {
+          this.$refs.tableRef.toggleRowSelection(item, isSelected) 
+        })
+      })
+    },
+
+    async getFactoryList() {
+      const res = await getQueryFactory();
+      console.log(res, 'data工厂')
+      this.factoryList = res.data;
+    },
+    datasource({ page, where, limit }) {
+      where.queryType = 2; //查询类型(1:预销售单页面查询;2:已转销售单页面查询)
+      let pageNum = page;
+      let size = limit;
+      const res = listSalesorder({ ...where, pageNum, size });
+      return res;
+    },
+    reload(where) {
+      console.log(where, 'where22222')
+      this.whereForm = where;
+      this.$nextTick(() => {
+        if (this.$refs.tableRef && this.$refs.tableRef.reload)
+          this.$refs.tableRef.reload({ page: 1, where: where });
+      })
+    },
+    onDone() {
+      this.$nextTick(() => {
+        this.$refs.tableRef.setSelectedRowKeys(this.selDataIds);
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.resetForm();
+      const id = row.id || this.ids
+      getSalesOrder(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改销售订单";
+      });
+    },
+    /** 删除 */
+    handleDelete(row) {
+      let ids = []
+      if (row.id) {
+        ids = [row.id]
+      } else {
+        ids = this.ids
+      }
+      this.$confirm(`是否确认删除该数据?`, '提示')
+        .then(() => {
+          delSalesorder({ ids: ids })
+            .then(() => {
+              this.reload();
+              this.$message.success("删除成功");
+            })
+            .catch((e) => {
+              console.log(e);
+            });
+        })
+        .catch(() => { });
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.selectionData = selection
+      console.log(this.ids, 'selection')
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+
+
+
+      // if (selection.length == 1) {
+      //   const selSalesOrderNumber = selection[0].preSalesOrderNumber;
+      //   const list = this.$refs.tableRef.getData();
+      //   const data = []
+      //   for (let i = 0; i < list.length; i++) {
+      //     if (list[i].preSalesOrderNumber == selSalesOrderNumber) {
+
+      //       data.push(list[i].id);
+      //     }
+      //   }
+
+      //   this.selDataIds = data;
+
+      // }
+      // console.log(this.selDataIds, '勾选')
+      // if (this.selDataIds.length > 0) {
+      //   this.$refs.tableRef.setSelectedRowKeys(this.selDataIds);
+      // }
+
+    },
+
+    async handleEstimatedDelivery() {
+      if (this.ids.length === 0) {
+        this.$message.warning("请选择");
+        return;
+      }
+      this.factoriesId = '';
+      this.factoriesVisible = true;
+    },
+
+    async handleSubmit() {
+      const res = await estimateDeliveryDates({ ids: this.ids, factoriesId: this.factoriesId })
+      if (res.code == 0) {
+        this.$message.success("操作成功");
+        this.factoriesVisible = false;
+        this.reload();
+      }
+    },
+    handleCancel() {
+      this.factoriesVisible = false;
+    },
+    /*交期预估*/
+    async handleExpect(row) {
+      if (this.ids.length === 0) {
+        this.$message.warning("请选择");
+        return;
+      }
+
+      const id = row.id || this.ids;
+
+      const response = await getSalesOrder(id);
+      const saleOrder = response.data;
+      this.form = response.data;
+
+      //如果是已经占用资源,则显示已经占用的资源,不能重复
+      if (saleOrder.status === "1" || saleOrder.status === "2") {
+        const occupyRes = await listSalesOrderOccupyRes(saleOrder);
+        this.salesOrderExpectList = occupyRes;
+        this.single = true;
+        this.multiple = true;
+      } else if (saleOrder.status === "0") {
+        const expectRes = await listSalesOrderExpect(saleOrder);
+        this.salesOrderExpectList = expectRes;
+        this.single = false;
+        this.multiple = true;
+      }
+      console.log(this.salesOrderExpectList.length, 'this.salesOrderExpectList.length')
+      if (this.salesOrderExpectList.length > 0) {
+        this.submitFormAllExpect();
+      }
+    },
+    submitFormAllExpect() {
+      var arr = [];
+      this.salesOrderExpectList.forEach(item => {
+        var node = {};
+        node.id = item.id;
+        node.createTime = item.createTime;
+        node.createUserId = item.createUserId;
+        node.year = item.year;
+        node.month = item.month;
+        node.day = item.day;
+        node.plannedCapacity = item.plannedCapacity;
+        node.unplannedSumCapacity = item.unplannedSumCapacity;
+        node.deliverDay = item.deliverDay;
+        node.currentPlannedSumCapacity = item.currentPlannedSumCapacity;
+        node.plannedSumCapacity = item.plannedSumCapacity;
+        node.plannedOrder = item.plannedOrder;
+        node.plannedOrderCapacity = item.plannedOrderCapacity;
+        node.plannedOrderDate = item.plannedOrderDate;
+        arr.push(node);
+      });
+      console.log(arr, 'arr')
+      occupyAllRes(arr).then(response => {
+        //console.log(response)
+        // this.openExpect = false;
+        this.reload();
+
+        this.$message.success("占用成功");
+      });
+    },
+    //全部预估
+    // handleAllExpect() {
+
+    //   listSalesorderExpectAll().then(response => {
+
+    //     this.salesOrderExpectList = response;
+    //     this.openExpect = true;
+    //     this.single = true;
+    //     this.multiple = false;
+    //   });
+    // },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "销售订单数据导入";
+      this.upload.open = true;
+    },
+    //文件上传
+    uploadFile(param) {
+      let fd = new FormData();
+      this.fileList.forEach((item) => {
+        fd.append('importExcel', item.raw);
+      });
+      importFile(fd)
+        .then((res) => {
+          this.$refs.uploadFile.clearFiles();
+
+          this.upload.open = false;
+          this.reload();
+        })
+        .catch((data) => {
+          if (data.code != -1) {
+            this.$message.error(data.message);
+          }
+        })
+        .finally(() => {
+          this.$refs.uploadFile.clearFiles();
+        });
+    },
+    //上传限制
+    beforeUpload(file) {
+      const isLt10M = file.size / 1024 / 1024 < 10;
+      if (!isLt10M) {
+        this.$message.error('上传文件大小不能超过 10MB!');
+      }
+      return isLt10M;
+    },
+    handleChange(file, fileList) {
+      this.fileList = fileList;
+      console.log(fileList);
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      console.log(this.whereForm, 'this.whereForm')
+
+      this.loading = true;
+      let params = this.whereForm ? this.whereForm : []
+      exportFile(params).then(res => {
+        this.loading = false;
+
+      });
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      importTemplate(this.whereForm).then(res => {
+        this.$message.success("模板下载成功");
+      });
+    },
+
+    /** 转销售单按钮操作 */
+    handleSaleorder(row) {
+      if (this.ids.length == 0) {
+        this.$message.warning("请选择");
+        return;
+      }
+
+      const filteredData = this.selectionData.filter((item) => item.status == 1);
+      console.log(filteredData, 'filteredData');
+      if (filteredData.length > 0) {
+        const ids = filteredData.map(item => item.id)
+        convertToSalesOrder({ ids: ids }).then(response => {
+          this.$message.success("转换成功");
+          this.reload();
+        });
+      } else {
+        this.$message.warning("请选择状态为未提交的数据!");
+        return;
+      }
+
+
+      // const id = row.id || this.ids
+
+      // getSalesOrder(id).then(response => {
+      //   let saleorder = response.data;
+      //   this.form = response.data;
+      //   console.log(saleorder);
+      //   //如果是已经占用资源,则显示已经占用的资源,不能重复
+      //   if (saleorder.status == "1") {
+      //     convertToSalesOrder(this.ids).then(response => {
+      //       this.$message.success("转换成功");
+      //     });
+      //     return;
+      //   }
+      //   else if (saleorder.status == "0") {
+      //     //如果没有
+      //     this.$message.success("没有交期预估");
+      //   } else if (saleorder.status == "2") {
+      //     //如果没有
+      //     this.$message.success("已经转换过了");
+      //   }
+      // });
+    },
+    // 表单重置
+    resetForm() {
+      this.form = {
+        id: null,
+        preSalesOrderNumber: null,
+        customerCode: null,
+        customerName: null,
+        productDescription: null,
+        productCode: null,
+        orderQuantity: null,
+        unit: null,
+        weightKg: null,
+        customerDeliveryDate: null,
+        productionDeliveryDate: null,
+        materialCode: null,
+        materialDescription: null,
+        materialQuantity: null,
+        materialUnit: null,
+        materialWeightKg: null,
+        status: null,
+      };
+    },
+
+
+
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.resetForm();
+    },
+    // 取消按钮
+    cancelExpect() {
+      this.openExpect = false;
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            if (this.form.productionCodes) {
+              this.form.productionCodes = this.form.productionCodes.replace(/,/g, ",")
+            }
+            updateSalesorder(this.form).then(response => {
+              this.$message.success("修改成功");
+              this.open = false;
+              this.reload();
+            });
+          } else {
+            addSalesorder(this.form).then(response => {
+              this.$message.success("新增成功");
+              this.open = false;
+              this.reload();
+            });
+          }
+        }
+      });
+    },
+    /** 提交交期确定按钮 */
+    submitFormExpect() {
+      const id = this.ids
+      getSalesOrder(id).then(response => {
+        // console.log(response);
+        let saleorder = response.data;
+        if (saleorder.status == "1" || saleorder.status == "2") {
+          this.$message.success("已经分配过资源");
+          return;
+        }
+        var i = 0;
+        this.salesOrderExpectList.forEach(item => {
+          i++;
+          item.plannedOrder = saleorder.preSalesOrderNumber + "-" + saleorder.materialCode + "";
+          item.plannedOrderCapacity = item.currenPlannedSumCapacity;
+          item.plannedSumCapacity = item.currenPlannedSumCapacity;
+        });
+
+        var lastNode = this.salesOrderExpectList[this.salesOrderExpectList.length - 1];
+        console.log(lastNode, 'lastNode');
+        var productDay = lastNode.deliverDay;
+        saleorder.productionDeliveryDate = productDay;
+        console.log(saleorder.productionDeliveryDate);
+
+        var arr = [];
+        this.salesOrderExpectList.forEach(item => {
+          var node = {};
+          node.id = item.id;
+          node.createTime = item.createTime;
+          node.createUserId = item.createUserId;
+          node.year = item.year;
+          node.month = item.month;
+          node.day = item.day;
+          node.plannedCapacity = item.plannedCapacity;
+          node.unplannedSumCapacity = item.unplannedSumCapacity;
+          node.deliverDay = item.deliverDay;
+          node.currenPlannedSumCapacity = item.currenPlannedSumCapacity;
+          node.plannedSumCapacity = item.plannedSumCapacity;
+          node.plannedOrder = item.plannedOrder;
+          node.plannedOrderCapacity = item.plannedOrderCapacity;
+          node.plannedOrderDate = item.plannedOrderDate;
+          arr.push(node);
+        });
+        occupyRes(arr).then(response => {
+          this.$message.success("占用成功");
+
+          saleorder.status = "1";
+          console.log(saleorder);
+          updateSalesorder(saleorder).then(response => {
+            this.$message.success("修改成功");
+            this.openExpect = false;
+            this.reload();
+          });
+        });
+
+
+      });
+    },
+
+    /** 转销售单按钮操作 */
+    handleAllSaleorder() {
+
+      this.loading = true;
+      let saleorder = {};
+      //如果是已经占用资源,则显示已经占用的资源,不能重复
+      createAll(saleorder).then(response => {
+        this.$message.success("转换成功");
+        this.loading = false;
+      });
+    },
+
+
+    // // 提交上传文件
+    // submitFileForm() {
+    //   this.$refs.upload.submit();
+    // },
+    // // 文件上传中处理
+    // handleFileUploadProgress(event, file, fileList) {
+    //   this.upload.isUploading = true;
+    // },
+    // // 文件上传成功处理
+    // handleFileSuccess(response, file, fileList) {
+    //   this.upload.open = false;
+    //   this.upload.isUploading = false;
+    //   this.$refs.upload.clearFiles();
+    //   this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+    //     response.msg + "</div>", "导入结果", {
+    //     dangerouslyUseHTMLString: true
+    //   });
+    //   this.reload();
+    // },
+  }
+};
+</script>

+ 94 - 0
src/views/aps/transferred/search.vue

@@ -0,0 +1,94 @@
+<!-- 搜索表单 -->
+
+<template>
+  <el-form label-width="80px" class="ele-form-search" @keyup.enter.native="search" @submit.native.prevent>
+    <el-row :gutter="24">
+      <el-col :span="4">
+        <el-form-item label="销售订单" prop="preSalesOrderNumber">
+          <el-input v-model="where.preSalesOrderNumber" placeholder="请输入销售订单" clearable />
+        </el-form-item>
+      </el-col>
+      <el-col :span="4">
+        <el-form-item label="客户代号" prop="customerCode">
+          <el-input v-model="where.customerCode" placeholder="请输入客户代号" clearable />
+        </el-form-item>
+      </el-col>
+      <el-col :span="4">
+        <el-form-item label="客户名称" prop="customerName">
+          <el-input v-model="where.customerName" placeholder="请输入客户名称" clearable />
+        </el-form-item>
+      </el-col>
+      <el-col :span="4">
+        <el-form-item label="产品编码" prop="productCode">
+          <el-input v-model="where.productCode" placeholder="请输入产品编码" clearable />
+        </el-form-item>
+      </el-col>
+      <!-- <el-col :span="4">
+        <el-form-item label="订单状态" prop="status">
+          <el-select v-model="where.status" placeholder="请选择订单状态" clearable @change="search">
+            <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value">
+            </el-option>
+          </el-select>
+        </el-form-item>
+      </el-col> -->
+      <el-col style="display: flex; justify-content: flex-end" :span="8">
+        <div class="ele-form-actions">
+          <el-button type="primary" icon="el-icon-search" class="ele-btn-icon" @click="search">
+            查询
+          </el-button>
+          <el-button @click="reset">重置</el-button>
+        </div>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+
+<script>
+
+export default {
+  data() {
+    // 默认表单数据
+    const defaultWhere = {
+      preSalesOrderNumber: '',
+      customerCode: '',
+      customerName: '',
+      productCode: '',
+      status: null,
+      queryType: 2 //查询类型(1:预销售单页面查询;2:已转销售单页面查询)
+    };
+    return {
+      defaultWhere,
+      // 表单数据
+      where: { ...defaultWhere },
+      statusOptions: [
+        {
+          value: '0',
+          label: '未预估'
+        },
+        {
+          value: '1',
+          label: '已预估'
+        },
+        {
+          value: '2',
+          label: '已转销售单'
+        }
+      ]
+    };
+  },
+  computed: {
+
+  },
+  methods: {
+    /* 搜索 */
+    search() {
+      this.$emit('search', this.where);
+    },
+    /*  重置 */
+    reset() {
+      this.where = { ...this.defaultWhere };
+      this.search();
+    }
+  }
+};
+</script>