charles
2024-08-06 5ecb7958c96d3f0b6d47b79aff7eb306c2cf690f
src/views/operate/allot/index.vue
@@ -3,35 +3,102 @@
    <div class="top">
      <SearchCommonView
        :add-title="'新建'"
        :placeholder="'请输入单号'"
        :placeholder="'请输入单号/来源单据'"
        :amount-view="false"
        @addCommonClick="addBtnClick"
        @searchClick="getList"
      />
    </div>
    <div class="list-view">
      <div class="table">
        <TableCommonView
          ref="tableListRef"
          :table-list="tableList"
          @selTableCol="selTableCol"
          @tableRowClick="tableRowClick"
        ></TableCommonView>
    <div class="body">
      <div class="content-top">
        <div class="list-view">
          <TableCommonView
            ref="tableListRef"
            :table-list="tableList"
            @selTableCol="selTableCol"
            @tableRowClick="topTableRowClick"
            :selectClassRow="selectRow"
          >
            <template slot="tableButton">
              <el-table-column label="操作" width="120">
                <template slot-scope="scope">
                  <el-button
                    @click="tableRowClick(scope.row, '查看')"
                    type="text"
                    size="small"
                    >查看</el-button
                  >
                  <el-button
                    v-if="scope.row.status !== 4"
                    @click="tableRowClick(scope.row, '编辑')"
                    type="text"
                    size="small"
                    >编辑</el-button
                  >
                  <el-button
                    @click.stop=""
                    type="text"
                    size="small"
                    >删除</el-button
                  >
                </template>
              </el-table-column>
            </template>
          </TableCommonView>
          <div class="btn-pager">
            <PagerView
              class="page"
              :pager-options="pagerOptions"
              v-on="pagerEvents"
            />
          </div>
        </div>
      </div>
      <div class="btn-pager">
        <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
      <div class="content-bottom">
        <div class="bottom-tabs">
          <div
            class="tab-pane"
            @click="getTab(0)"
            :style="{
              background: TabsIndex == 0 ? '#2a78fb' : '#F1F3F8',
              color: TabsIndex == 0 ? '#fff' : '#666',
            }"
          >
            产品信息
          </div>
        </div>
        <div class="list-view">
          <TableCommonView
            :table-list="productTableList"
            @selTableCol="selBottomTableCol"
          >
            <!-- <template slot="tableButton">
              <el-table-column label="操作" width="160" fixed="right">
                <template slot-scope="scope">
                  <el-button @click="viewClick(scope.row)" type="text" size="small">查看</el-button>
                </template>
              </el-table-column>
            </template> -->
          </TableCommonView>
        </div>
      </div>
    </div>
    <!-- 新建/编辑 -->
    <AddOverviewDialog v-if="editConfig.visible" :work-type="'内部调拨'" :edit-common-config="editConfig" />
    <AddOverviewDialog
      v-if="editConfig.visible"
      :show-operation-type="true"
      :work-type="3"
      :edit-common-config="editConfig"
    />
  </div>
</template>
<script>
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
import { getProductList } from "@/api/product/product"
import pageMixin from "@/components/makepager/pager/mixin/pageMixin";
import { getAllList } from "@/api/overview/overview";
// import DetailProduct from "@/views/productManage/product/DetailProduct"
import AddOverviewDialog from "@/views/overview/AddOverviewDialog"
import AddOverviewDialog from "@/views/overview/AddOverviewDialog";
export default {
  name: "AllotView",
@@ -40,211 +107,392 @@
  mixins: [pageMixin],
  computed: {},
  data() {
     // 产品信息
     const productColumn = [
      { label: "产品编号", prop: "id", default: true },
      { label: "产品名称", prop: "productName" },
      { label: "产品规格", prop: "specs" },
      { label: "产品型号", prop: "model" },
      { label: "计量单位", prop: "unit" },
      { label: "调出位置", prop: "location" },
      { label: "调入位置", prop: "toLocation" },
      { label: "数量", prop: "amount" }
    ]
    return {
      tableList: {},
      showcol: ["从", "至", "联系人", "日期", "来源单据", "公司", "状态"],
      showcol: [
        "调出位置",
        "调入位置",
        "联系人",
        "日期",
        "来源单据",
        "公司",
        "状态",
      ],
      searchOptions: [],
      commonDetail: {
        visible: false,
        title: "新建",
        infomation: {}
      },
      editConfig: {
        visible: false,
        title: "新建",
        infomation: {}
      }
    }
        infomation: {},
      },
      keyword: "",
      TabsIndex: "0",
      productTableList: {},
      showBottomCol: ["产品编号", "产品名称", "产品规格", "产品型号", "计量单位","调出位置","调入位置", "数量"],
      tableBottomColumn: productColumn,
      selectRow: {}
    };
  },
  created() {
    this.setTable()
    this.getData()
    this.setTable();
    this.getData();
  },
  methods: {
    setTable() {
      this.tableList = {
        tableInfomation: [],
        selectBox: true,
        selectBox: false,
        selectIndex: true,
        showcol: this.showcol,
        allcol: [],
        tableColumn: this.setTableColumn(this.showcol)
      }
      let allcol = []
        tableColumn: this.setTableColumn(this.showcol),
      };
      let allcol = [];
      for (let i = 0; i < this.tableList.tableColumn.length; i++) {
        if (!this.tableList.tableColumn[i].default) {
          const label = this.tableList.tableColumn[i].label
          allcol.push(label)
          const label = this.tableList.tableColumn[i].label;
          allcol.push(label);
        }
      }
      this.tableList.allcol = allcol
      this.tableList.allcol = allcol;
      this.setBottomList()
    },
    setTableColumn(showcol) {
      let tableColumn = [
        {
          label: "单号",
          prop: "id",
          prop: "number",
          isShowColumn: true,
          default: true
          default: true,
        },
        {
          label: "从",
          prop: "deviceName",
          isShowColumn: showcol.includes("从"),
          default: false
          label: "调出位置",
          prop: "from",
          isShowColumn: showcol.includes("调出位置"),
          default: false,
        },
        {
          label: "至",
          prop: "id",
          isShowColumn: showcol.includes("至"),
          default: false
          label: "调入位置",
          prop: "to",
          isShowColumn: showcol.includes("调入位置"),
          default: false,
        },
        {
          label: "联系人",
          prop: "deviceId",
          prop: "companyName",
          isShowColumn: showcol.includes("联系人"),
          default: false
          default: false,
        },
        {
          label: "负责人",
          prop: "shopName",
          prop: "contacterName",
          isShowColumn: showcol.includes("负责人"),
          default: false
          default: false,
        },
        {
          label: "日期",
          prop: "preTime",
          prop: "operationDate",
          isShowColumn: showcol.includes("日期"),
          default: false,
          date: true
          date: true,
        },
        {
          label: "产品可用性",
          prop: "status",
          isShowColumn: showcol.includes("产品可用性"),
          width: 100,
          default: false
        },
        {
          label: "截止日期",
          prop: "faultTime",
          isShowColumn: showcol.includes("截止日期"),
          default: false
        },
        {
          label: "实际日期",
          prop: "shopName",
          isShowColumn: showcol.includes("实际日期"),
          default: false
        },
        // {
        //   label: "产品可用性",
        //   prop: "status",
        //   isShowColumn: showcol.includes("产品可用性"),
        //   width: 100,
        //   default: false
        // },
        // {
        //   label: "截止日期",
        //   prop: "faultTime",
        //   isShowColumn: showcol.includes("截止日期"),
        //   default: false
        // },
        // {
        //   label: "实际日期",
        //   prop: "shopName",
        //   isShowColumn: showcol.includes("实际日期"),
        //   default: false
        // },
        {
          label: "来源单据",
          prop: "faultLevel",
          prop: "sourceNumber",
          isShowColumn: showcol.includes("来源单据"),
          default: false
          default: false,
        },
        // {
        //   label: "欠单",
        //   prop: "status",
        //   isShowColumn: showcol.includes("欠单"),
        //   default: false
        // },
        // {
        //   label: "追踪参考",
        //   prop: "status",
        //   isShowColumn: showcol.includes("追踪参考"),
        //   default: false
        // },
        // {
        //   label: "承运商",
        //   prop: "status",
        //   isShowColumn: showcol.includes("承运商"),
        //   default: false
        // },
        // {
        //   label: "目的地",
        //   prop: "status",
        //   isShowColumn: showcol.includes("目的地"),
        //   default: false
        // },
        // {
        //   label: "重量",
        //   prop: "status",
        //   isShowColumn: showcol.includes("重量"),
        //   default: false
        // },
        // {
        //   label: "物流重量",
        //   prop: "status",
        //   isShowColumn: showcol.includes("物流重量"),
        //   default: false
        // },
        {
          label: "欠单",
          prop: "status",
          isShowColumn: showcol.includes("欠单"),
          default: false
        },
        {
          label: "追踪参考",
          prop: "status",
          isShowColumn: showcol.includes("追踪参考"),
          default: false
        },
        {
          label: "承运商",
          prop: "status",
          isShowColumn: showcol.includes("承运商"),
          default: false
        },
        {
          label: "目的地",
          prop: "status",
          isShowColumn: showcol.includes("目的地"),
          default: false
        },
        {
          label: "重量",
          prop: "status",
          isShowColumn: showcol.includes("重量"),
          default: false
        },
        {
          label: "物流重量",
          prop: "status",
          isShowColumn: showcol.includes("物流重量"),
          default: false
        },
        {
          label: "操作类型",
          prop: "faultTime",
          label: "入库类型",
          prop: "operationTypeName",
          isShowColumn: showcol.includes("操作类型"),
          default: false
          default: false,
        },
        {
          label: "公司",
          prop: "faultTime",
          isShowColumn: showcol.includes("公司"),
          default: false
        },
        // {
        //   label: "公司",
        //   prop: "faultTime",
        //   isShowColumn: showcol.includes("公司"),
        //   default: false
        // },
        {
          label: "状态",
          prop: "status",
          width: 120,
          isShowColumn: showcol.includes("状态"),
          default: false,
          status: true
        }
      ]
      return tableColumn
          status: true,
          isCallMethod: true,
          getCallMethod: this.getStatus,
        },
      ];
      return tableColumn;
    },
    selTableCol(val) {
      this.showcol = val
      this.tableList.tableColumn = this.setTableColumn(val)
      this.showcol = val;
      this.tableList.tableColumn = this.setTableColumn(val);
    },
    // 请求数据
    async getData(val, content) {
      await getProductList({
        [val]: content,
    async getData() {
      await getAllList({
        number: this.keyword,
        page: this.pagerOptions.currPage,
        pageSize: this.pagerOptions.pageSize
        pageSize: this.pagerOptions.pageSize,
      }).then((res) => {
        if (res.data.code === 200) {
          const list = res.data.data.list.map((item) => {
        if (res.code === 200) {
          const list = res.data.map((item) => {
            return {
              ...item,
              supplierNumber: item.supplier.number,
              status: "就绪",
              preTime: "2023-09-04 11:20:00"
            }
          })
          this.tableList.tableInfomation = list || []
          this.pagerOptions.totalCount = res.data.data.total
              from: item.location.jointName,
              to: item.toLocation.name,
            };
          });
          this.tableList.tableInfomation = list || [];
          this.pagerOptions.totalCount = res.total;
          if (res.total > 0) {
            this.selectRow = this.tableList.tableInfomation.length > 0 ? this.tableList.tableInfomation[0] : {}
            this.topTableRowClick(this.selectRow)
            this.bottomProductData(this.selectRow)
          }
        }
      })
      });
    },
    // 搜索
    getList(val) {
      console.log(val)
      console.log(val);
      this.keyword = val;
      this.pagerOptions.currPage = 1;
      this.getData();
    },
    // 行点击
    tableRowClick(row) {
      console.log(row)
      this.editConfig.visible = true
      this.editConfig.title = "编辑"
      this.editConfig.infomation = { ...row }
    // 查看 编辑
    tableRowClick(row, val) {
      console.log(row, "查看");
      this.editConfig.visible = true;
      this.editConfig.title = val;
      row.details.map((item) => {
        item.fromLocationId = item.fromLocation.jointName;
        item.toLocationId = item.toLocation.jointName;
      });
      row.location = {
        value: row.location.id || row.location.value,
        label: row.location.jointName || row.location.label,
      };
      row.toLocation = {
        value: row.toLocation.id || row.toLocation.value,
        label: row.toLocation.jointName || row.toLocation.label,
      };
      row.locationID = row.location.jointName;
      row.locationId = row.location.value;
      row.managerObj={
        label:row.manager,
        value:row.managerId
      }
      row.accountantObj={
        label:row.accountant,
        value:row.accountantId
      }
      row.custodianObj={
        label:row.custodian,
        value:row.custodianId
      }
      this.editConfig.infomation = { ...row };
    },
    // 新建
    addBtnClick() {
      this.editConfig.visible = true
      this.editConfig.title = "新建"
    }
  }
}
      this.editConfig.visible = true;
      this.editConfig.title = "新建";
    },
    // 状态
    getStatus(val) {
      return val === 1
        ? "草稿"
        : val === 3
        ? "就绪"
        : val === 4
        ? "完成"
        : "取消";
    },
    // top 行点击
    topTableRowClick(row) {
      this.selectRow = row
      this.bottomProductData(this.selectRow)
    },
    // bottom 产品信息
    // bom 列表
    setBottomList() {
      this.productTableList = {
        selectIndex: true,
        tableInfomation: [],
        allcol: [],
        showcol: this.showBottomCol,
        tableColumn: this.setColumnVisible(this.showBottomCol, this.tableBottomColumn)
      }
      this.setTableList(this.productTableList)
    },
    setTableList(tableList) {
      tableList.allcol = tableList.tableColumn.filter((ele) => !ele.default).map((ele) => ele.label)
      // this.searchOptions = []
      // for (let i = 0; i < tableList.tableColumn.length; i++) {
      //   const label = tableList.tableColumn[i].label
      //   const value = tableList.tableColumn[i].prop
      //   this.searchOptions.push({ value: value, label: label })
      // }
    },
    setColumnVisible(showCol, tableColumn) {
      return tableColumn.map((ele) => {
        return {
          ...ele,
          isShowColumn: showCol.includes(ele.label)
        }
      })
    },
    getTab(tab) {
      this.TabsIndex = tab
    },
    selBottomTableCol(val) {
      this.showBottomCol = val
      this.productTableList.tableColumn = this.setColumnVisible(val, this.tableBottomColumn)
    },
    // bottom产品信息数据处理
    bottomProductData(arr) {
      const list = arr.details.map((item) => {
        return {
          ...item,
          productName: item.product.name,
          unit: item.product.unit,
          location:arr.location.name,
          toLocation:arr.toLocation.name,
        }
      })
      this.productTableList.tableInfomation = list
    },
  },
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped></style>
<style lang="scss" scoped>
.body {
  box-sizing: border-box;
  padding: 10px 20px;
  border-radius: 12px;
  height: calc(100% - 70px);
  .content-top {
    background-color: #fff;
    border-radius: 12px;
    min-height: 70px;
    height: 48%;
    position: relative;
    .list-view {
      height: calc(100% - 50px);
    }
  }
  .btn-pager {
    display: flex;
    margin-top: 0px;
    .page {
      margin-left: auto;
    }
  }
  .content-bottom {
    .bottom-tabs {
      height: 40px;
      line-height: 40px;
      background: #e6ecf2;
      display: flex;
      .tab-pane {
        width: 100px;
        margin-right: 20px;
        font-size: 14px !important;
        text-align: center;
        cursor: pointer;
        background: #2a78fb;
        border-top-left-radius: 20px;
        border-top-right-radius: 20px;
      }
    }
    .lable-view {
      background: #e6ecf2;
      height: 40px;
      line-height: 40px;
      .name {
        border-left: 4px solid #2a78fb;
        padding-left: 10px;
      }
    }
    background-color: #fff;
    border-radius: 12px;
    min-height: 70px;
    height: calc(52% - 60px);
    margin-top: 10px;
    // padding: 10px 20px;
    .list-view {
      height: calc(100% - 10px);
    }
  }
}
</style>