typescaript table 组件
表格组件
<script lang="tsx"> import { Component, Vue, Prop, Mixins, Watch } from 'vue-property-decorator'; import { Card, Row, Col, Button, Table, TableColumn } from 'element-ui'; import { TableColumnType } from 'element-ui/types/table-column'; import Pagination from '@/components/Pagination/index.vue'; import SearchAblePage from '@/lib/utils/mixin/searchable'; import cacheSearchQuery from '@/lib/utils/mixin/cacheSearchQuery'; import busEvent, { EventName } from '@/lib/utils/busEvent'; import commonHelper, { deepCopy } from '@/lib/utils/commonHelper'; const isChrome = window.navigator.userAgent.includes('Chrome'); const screenWidth = isChrome ? 0 : 17; // tslint: disable @Component({ components: { Pagination }, }) export default class CommonSearchPage extends Mixins(SearchAblePage, cacheSearchQuery) { @Prop({ required: true, type: Array, default: () => [] }) private columnFields!: any[]; @Prop({ required: true }) protected dataSearchApi!: string; @Prop({ required: true }) protected requestMethod!: string; @Prop({ default: 0 }) private addTopSpace!: number; @Prop({ default: 0 }) private addRightSpace!: number; @Prop({ default: false }) private parentLoading!: boolean; @Prop({ default: 20 }) private setPageSize!: number; @Prop({ default: () => {}, }) @Prop({ default: false }) private orderType!: boolean; private getData!: (data: any,pageQuery) => {}; @Watch('listLoading') loadingChangeHandle(newVal: boolean) { this.$emit('update:parentLoading', newVal); } render() { const { tableActionSection, searchSection, tableSection, manualFooter } = this.$scopedSlots; return ( <div class="app-container table-page"> <Card class="page-card"> <div class="scroll-container" id="scroll-container"> {searchSection && ( <Row class="hengxing-search-section"> {searchSection('')} <Col class="search-col change-btn-padding" span={2}> <Button type="primary" size="medium" icon="el-icon-search" onClick={this.search}> 搜索 </Button> <Button type="primary" size="medium" onClick={this.resetData}> 重置 </Button> </Col> </Row> )} <div class="kdd-table-action">{tableActionSection && tableActionSection('')}</div> {tableSection ? ( tableSection(this.tableDataList) ) : ( <Table v-loading={this.listLoading} header-cell-style={{ height: '58px' }} cell-style={{ height: '58px' }} data={this.tableDataList} fit highlight-current-row class="kdd-table" ref="kdd-table" on={{ 'sort-change': (data: any) => this.sortChangeHandle(data), }} > {this.columnFields.map((column) => ( <TableColumn align={column.align || 'center'} width={column.width} sortable={column.sortable ? 'custom' : false} label={column.title} min-width={column.minWidth} type={column.columnType} class-name={column.className} fixed={column.fixed} prop={column.key} scopedSlots={{ header: ({ row }) => column.renderHeader ? column.renderHeader(this.$createElement, row) : column.title, default: ({ row }) => column.render ? column.render(this.$createElement, row) : commonHelper.getDeepValue(row, column.key), }} ></TableColumn> ))} </Table> )} </div> {manualFooter ? ( manualFooter('') ) : ( <Pagination total={this.totalCount} class="pagination-block" props={{ page: this.pageIndex, limit: this.pageSize }} on={{ pagination: ({ page, limit }: { page: number; limit: number }) => { this.pagination(page, limit); }, 'update:page': (page: number) => (this.pageIndex = page), 'update:limit': (limit: number) => (this.pageSize = limit), }} /> )} </Card> </div> ); } protected searchApi = this.dataSearchApi; protected myMethods = this.requestMethod; // 保存传过来的搜索字段 private originSearchData = deepCopy(this.searchQuery); protected searchFields = this.searchQuery; protected pageSize: number = this.setPageSize; private mounted() { this.startWatchScrollHandle(); } private pagination(page: number, limit: number) { this.pageIndex = page; this.pageSize = limit; this.searchFields.pageIndex = page; this.searchFields.pageSize = limit; this.setCacheData(); this.dataLoad(); } protected async search() { this.pageIndex = 1; this.searchFields.pageIndex = 1; this.setCacheData(); this.dataLoad(); } // 重置数据 private resetData() { Object.keys(this.searchFields).forEach((key) => { this.$set(this.searchFields, key, this.originSearchData[key]); }); this.pageIndex = 1; this.searchFields.pageIndex = 1; this.setCacheData(); this.dataLoad(); } protected operationTabelData(tableList: any) { // console.log(tableList, 'tableList'); if (this.getData) { let pageQuery = { pageNo: this.pageIndex, pageSize: this.pageSize, }; // @ts-ignore this.getData(tableList, pageQuery); } } protected created() { this.columns = this.columnFields; if (this.searchFields.pageIndex && this.searchFields.pageSize) { this.pageIndex = this.searchFields.pageIndex; this.pageSize = this.searchFields.pageSize; } this.dataLoad(); busEvent.$on(EventName.updateCommonTableList + this.$route.name, (data: boolean) => { this.reload(data); }); const tempBus = busEvent as any; Object.keys(tempBus._events).forEach((key) => { try { if (tempBus._events[key].length > 1) { tempBus._events[key].shift(); } } catch (error) {} }); } private sortChangeHandle({ column, prop, order }: any) { if(this.orderType){ if(column.property==="sortShopsCount"){ this.searchFields['sortDepositAvailableAmount']='' }else{ this.searchFields['sortShopsCount']='' } this.searchFields[prop]=order.replace("ending", "").toUpperCase()=='DESC'?1:2 }else{ if (order) { this.searchFields.orderBy = [ { field: prop, direct: order.replace("ending", "").toUpperCase(), }, ]; } else { this.searchFields.orderBy = []; } } this.reload(true); console.log(column, prop, order); } public reload(isResetPageIndex: boolean = false) { if (isResetPageIndex) { this.pageIndex = 1; } this.dataLoad(); } private startWatchScrollHandle() { const container = document.querySelector('#scroll-container') as HTMLElement; const tableHeader = container.querySelector('.el-table__header-wrapper') as HTMLElement; const searchSection = container.querySelector('.hengxing-search-section') as HTMLElement; const actionEle = container.querySelector('.kdd-table-action') as HTMLElement; const searchSectionHeight = searchSection ? (window.getComputedStyle(searchSection).height as string).replace(/(px)$/, '') : 0; const actionEleHeight = actionEle ? (window.getComputedStyle(actionEle).height as string).replace(/(px)$/, '') : 0; const placeEle = document.createElement('div'); placeEle.style.height = '59px'; if (!tableHeader) { return; } container.addEventListener('scroll', () => { const scrllTop = container.scrollTop; if (scrllTop > +actionEleHeight + +searchSectionHeight) { (tableHeader.parentElement as HTMLElement).insertBefore(placeEle, tableHeader); tableHeader.style.position = 'fixed'; this.setTableHeaderPosition(tableHeader); } else { tableHeader.style.position = 'static'; try { (tableHeader.parentElement as HTMLElement).removeChild(placeEle); } catch (error) {} } }); window.addEventListener('resize', this.setTableHeaderPosition.bind(this, tableHeader)); window.addEventListener('scroll', this.setTableHeaderPosition.bind(this, tableHeader)); } private setTableHeaderPosition(tableHeader: HTMLElement) { const innerWidth = window.innerWidth; const tableHeaderChild = tableHeader.querySelector('table') as HTMLElement; tableHeader.style.width = `${tableHeader.parentElement.clientWidth}px`; if (innerWidth < 1300) { const pageXOffset = window.pageXOffset; const count = 1300 - innerWidth - pageXOffset - screenWidth; tableHeader.style.right = count - 21 > 0 ? `-${count - 21}px` : `${21 - count}px`; } else { tableHeader.style.right = `${21 + this.addRightSpace + screenWidth}px`; } tableHeader.style.top = `${71 + this.addTopSpace}px`; tableHeader.style.zIndex = '300'; // tableHeader.style.width = window.getComputedStyle(tableHeaderChild).width; } private removeEvent() { const container = document.querySelector('#scroll-container') as HTMLElement; const tableHeader = container.querySelector('.el-table__header-wrapper') as HTMLElement; window.removeEventListener('scroll', this.setTableHeaderPosition.bind(this, tableHeader)); window.removeEventListener('scroll', this.setTableHeaderPosition.bind(this, tableHeader)); } private destroyed() { this.removeEvent(); } } </script> <style lang="scss" scoped> /deep/.pagination-block { padding: 20px 26px; } .table-page { /deep/.el-table { .el-table__header, .el-table__body { width: unset !important; } tbody { .overflow-hidden { .cell { display: -webkit-box; white-space: normal !important; -webkit-line-clamp: 3; -webkit-box-orient: vertical; } } } } } .scroll-container { flex: 1; overflow: auto; &::-webkit-scrollbar { display: none; } @media screen and (max-width: 1680px) and (min-width: 1600px) { /deep/.change-btn-padding { .el-button.el-button--medium { padding: 8px 9px !important; } } } @media screen and (max-width: 1600px) and (min-width: 1360px) { /deep/.change-btn-padding { .el-button.el-button--medium { padding: 8px 4px !important; } } } } </style>
typescript 组件使用(可能引入文件不全单独使用会报错)
<template>
<div>
<CommonSearchPage
ref="commonSearchPage"
dataSearchApi="/admin/purchase/orderMainList"
:searchQuery="searchFields"
:columnFields="columnFields"
requestMethod="post"
>
<template slot="searchSection">
<el-col :span="22">
<el-col :span="6" class="search-col">
<label class="search-label for-selector">合作商名称</label>
<!-- <kddLoadMoreSelector
:value.sync="searchFields.franchiseeId"
EnumApi="/api/admin/franchisee/franchisees"
searchKeyword="keyword"
:defaultSelectData="searchFields.defaultSelectedFranchiseeData"
@getSelectedData="getSelectedFranchiseeData"
/> -->
<el-select
size="small"
v-model="searchFields.franchiseeId"
clearable
filterable
:defaultSelectData="searchFields.defaultSelectedFranchiseeData"
class="form-field"
>
<el-option
v-for="item in franchiseeList"
:key="item.id"
:value="item.id"
:label="item.name"
></el-option>
</el-select>
</el-col>
<el-col :span="6" class="search-col">
<label class="search-label for-selector">门店名称</label>
<!-- <kddLoadMoreSelector
:value.sync="searchFields.shopId"
EnumApi="/api/admin/shop/shops/list"
searchKeyword="likeKeyword"
:defaultSelectData="searchFields.defaultSelectedShopIdData"
@getSelectedData="getSelectedShopIdData"
/> -->
<el-select
size="small"
filterable
v-model="searchFields.shopId"
:defaultSelectData="searchFields.defaultSelectedShopIdData"
clearable
class="form-field"
>
<el-option
v-for="item in shopList"
:key="item.id"
:value="item.id"
:label="item.name"
></el-option>
</el-select>
</el-col>
<el-col :span="6" class="search-col">
<label class="search-label for-selector">合作商编码</label>
<el-input
placeholder="请输入合作商编码"
size="small"
clearable
v-model="searchFields.franchiseeSn"
@keyup.enter.native="toSearch"
></el-input>
</el-col>
<el-col :span="6" class="search-col">
<label class="search-label for-selector">门店编码</label>
<el-input
placeholder="请输入门店编码"
size="small"
clearable
v-model="searchFields.shopSn"
@keyup.enter.native="toSearch"
></el-input>
</el-col>
<el-col :span="24" class="mt10">
<el-col :span="6" class="search-col">
<label class="search-label for-selector">采购单号</label>
<el-input
placeholder="请输入采购单号"
size="small"
clearable
v-model="searchFields.purchaseOrderSn"
@keyup.enter.native="toSearch"
></el-input>
</el-col>
<el-col :span="6" class="search-col">
<label class="search-label for-selector">入库状态</label>
<el-select
size="small"
v-model="searchFields.storageStatus"
clearable
class="form-field"
>
<el-option
v-for="item in storageStatusList"
:key="item.id"
:value="item.id"
:label="item.label"
></el-option>
</el-select>
</el-col>
<!-- <el-col :span="6" class="search-col">
<label class="search-label for-selector">下发状态</label>
<el-select
size="small"
v-model="searchFields.issueStatus"
clearable
class="form-field"
>
<el-option
v-for="item in issueStatusList"
:key="item.id"
:value="item.id"
:label="item.label"
></el-option>
</el-select>
</el-col> -->
<el-col :span="6" class="search-col">
<label class="search-label for-selector">下发状态</label>
<el-select
size="small"
v-model="searchFields.issueStatus"
clearable
class="form-field"
>
<el-option
v-for="item in issueStatusList"
:key="item.id"
:value="item.id"
:label="item.label"
></el-option>
</el-select>
</el-col>
<el-col :span="6" class="search-col">
<label class="search-label for-selector">单据状态</label>
<el-select
size="small"
v-model="searchFields.status"
clearable
class="form-field"
>
<el-option
v-for="item in statusNameList"
:key="item.id"
:value="item.id"
:label="item.label"
></el-option>
</el-select>
</el-col>
</el-col>
<el-col :span="24" class="mt10">
<el-col :span="6" class="search-col">
<el-date-picker
v-model="searchFields.date"
value-format="yyyy-MM-dd"
start-placeholder="下单开始时间"
end-placeholder="下单结束时间"
:editable="false"
size="small"
:picker-options="pickerOptions"
type="daterange"
style="width: 100%"
></el-date-picker>
</el-col>
<el-col :span="6" class="search-col">
<el-date-picker
v-model="searchFields.payDate"
value-format="yyyy-MM-dd"
start-placeholder="审核开始时间"
end-placeholder="审核结束时间"
:editable="false"
size="small"
:picker-options="pickerOptions"
type="daterange"
style="width: 100%"
></el-date-picker>
</el-col>
<el-col :span="6" class="search-col">
<el-date-picker
v-model="searchFields.deliveryDate"
value-format="yyyy-MM-dd"
start-placeholder="订单完成开始时间"
end-placeholder="订单完成结束时间"
:editable="false"
size="small"
:picker-options="pickerOptions"
type="daterange"
style="width: 100%"
></el-date-picker>
</el-col>
<el-col :span="6" class="search-col">
<label class="search-label for-selector">创建人角色</label>
<el-select
size="small"
v-model="searchFields.creatorRole"
clearable
class="form-field"
>
<el-option
v-for="item in creatorRoleList"
:key="item.id"
:value="item.id"
:label="item.label"
></el-option>
</el-select>
</el-col>
</el-col>
<el-col :span="24" class="mt10">
<el-col :span="6" class="search-col">
<label class="search-label for-selector">排序筛选</label>
<el-select
size="small"
v-model="searchFields.sortType"
clearable
class="form-field"
>
<el-option
v-for="item in sortList"
:key="item.id"
:value="item.id"
:label="item.label"
></el-option>
</el-select>
</el-col>
<el-col :span="6" class="search-col">
<label class="search-label for-selector">门店组合</label>
<el-select
size="small"
v-model="searchFields.combinationId"
clearable
class="form-field"
>
<el-option
v-for="item in combinationList"
:key="item.id"
:value="item.id"
:label="item.name"
></el-option>
</el-select>
</el-col>
</el-col>
</el-col>
</template>
<template slot="tableActionSection">
<!-- <el-button
type="primary"
size="small"
:loading="exportBtnLoading"
v-auth="'franchisee.purchaseOrderMain.export'"
@click="exportPurchaseOrder"
>导出采购单</el-button>
<el-button
type="primary"
size="small"
v-auth="'franchisee.purchaseOrderMain.detailExport'"
:loading="exportSkuLoading"
@click="purchaseOrderMaindetailExport"
>导出采购明细</el-button> -->
<el-button type="primary" size="small" @click="exportPurchaseOrder" :loading="exportBtnLoading"
>导出采购单</el-button
>
<el-button
type="primary"
size="small"
:loading="exportSkuLoading"
@click="purchaseOrderMaindetailExport"
>导出采购明细</el-button>
</template>
</CommonSearchPage>
</div>
</template>
<script lang="ts">
import { Component, Vue, Watch } from "vue-property-decorator";
import CommonSearchPage from "@/components/webPart/commonSearchPage1.vue";
import kddLoadMoreSelector from "@/components/common/kddLoadMoreSelector.vue";
import { DateRangeModule } from "@/store/module/dateRange";
import { Button, Message } from "element-ui";
import busEvent, { EventName } from "@/lib/utils/busEvent";
import { AsyncExportModule } from "@/store/module/asyncExportModule";
import { BreadcrumbModule } from "@/store/module/breadcrumbModule";
import purchaseOrderListApi from "@/apis2/joinIn/purchaseOrderList";
@Component({
components: { CommonSearchPage, kddLoadMoreSelector },
})
export default class PurchaseOrderList extends Vue {
static ROUTER_NAME: string = "purchaseMasterOrderList";
static ROUTER_TITLE: string = "采购主单列表";
private searchFields = {
sortType:1,
creatorRole: "",
franchiseeId: "",
outWarehouseId: "",
shopId: "",
storageStatus: "",
issueStatus: "",
storageWarehouseId: "",
createStartTime: "",
createEndTime: "",
keyword: "",
status: "",
date: "",
payDate: [],
deliveryDate: [],
auditAtStartTime: "",
auditAtEndTime: "",
finishAtStartTime: "",
finishAtEndTime: "",
defaultSelectedWarehouseData: {},
defaultSelectedFranchiseeData: {},
defaultSelectedShopIdData: {},
combinationId:"",
};
// private searchData = {
// defaultSelectedWarehouseData: {},
// defaultSelectedFranchiseeData: {}
// };
// 仓库
private getSelectedWarehouseData({ id, name }) {
this.searchFields.defaultSelectedWarehouseData = { id, name };
}
// 合作商
private getSelectedFranchiseeData({ id, name }) {
this.searchFields.defaultSelectedFranchiseeData = { id, name };
}
// 门店
private getSelectedShopIdData({ id, name }) {
this.searchFields.defaultSelectedShopIdData = { id, name };
}
/**
* 待审核 1
* 待支付 2
* 待入库 3
* 部分入库 4
* 已完成 5
* 已驳回 6
* 已取消 7
*/
private columnFields = [
{ title: "采购主单号", key: "sn" },
{ title: "合作商名称", key: "franchiseeName" },
{ title: "入库仓库", key: "storageWarehouseName" },
{ title: "采购总数量", key: "totalQuantity" },
// { title: '采购总金额', key: 'totalAmountYuan' },
{
title: "采购总金额",
render: (h, row) => {
return h("span", row.totalAmountDecimal);
},
},
{ title: "到货数量", key: "enteredNumber" },
// { title: '入库总金额', key: 'enteredAmountYuan' },
{
title: "到货金额",
render: (h, row) => {
return h("span", row.enteredAmountDecimal);
},
},
{ title: "采购单状态", key: "statusDesc" },
// { title: "同步状态", key: "statusDesc" },
{ title: "下发状态", key: "issueStatusDesc" },
{ title: "入库状态", key: "storageStatusDesc" },
{ title: "创建人角色", key: "creatorRoleDesc" },
{ title: "公司名称", key: "companyName" },
{ title: "创建时间", key: "createdAt" },
{ title: "完成时间", key: "finishAt" },
{
title: "操作",
width: 250,
render: (h, row) =>
h("div", [
h(
Button,
{
props: { type: "text", size: "small" },
// directives: [
// { name: 'auth', value: 'franchisee.purchaseOrderMain.read' },
// ],
on: {
click: () => this.gotoDetail(row.id),
},
},
"查看详情"
),
h(
Button,
{
props: { type: "text", size: "small" },
directives: [
// { name: 'auth', value: 'franchisee.PurchaseOrder.read' },
{ name: 'show', value: (row.status ==3 || row.status == 4|| row.status == 7)},
],
on: {
click: () => this.goPurchaseChildOrderList(row),
},
},
"查看采购子单"
),
h(
Button,
{
props: {
type: "text",
size: "small",
loading: row.cancelLoading,
},
directives: [
// { name: 'auth', value: 'franchisee.PurchaseOrder.read' },
{ name: 'show', value: (row.status ==1 || row.status == 2)},
],
on: {
click: () => this.cancelRowHandle(row),
},
},
"取消"
),
h(
Button,
{
props: {
type: "text",
size: "small",
},
directives: [
// { name: 'auth', value: 'franchisee.PurchaseOrder.read' },
{ name: 'show', value: row.issueStatus !== 1 && (row.storageStatus !== 1 || row.issueStatus !== 4)},
],
on: {
click: () => this.toBatchList(row),
},
},
"查看入库信息"
),
]),
},
];
private statusList = [];
private inWarehousList = [];
private inWarehouseSearchList = [];
private EnumApi = "/api/admin/franchisee/franchisees?status=true";
private pickerOptions = {
shortcuts: DateRangeModule.shortcuts,
};
private formData = {
name: "",
file: undefined,
};
private loading = false;
@Watch("searchFields.date")
private onDateChangeHandle(newVal: any) {
this.searchFields.createStartTime = newVal ? newVal[0] : "";
this.searchFields.createEndTime = newVal ? newVal[1] : "";
}
@Watch("searchFields.payDate")
private onPayDateChange(newVal) {
this.searchFields.auditAtStartTime = newVal ? newVal[0] : "";
this.searchFields.auditAtEndTime = newVal ? newVal[1] : "";
}
@Watch("searchFields.deliveryDate")
private onDeliveryDateChange(newVal) {
this.searchFields.finishAtStartTime = newVal ? newVal[0] : "";
this.searchFields.finishAtEndTime = newVal ? newVal[1] : "";
}
private cancelRowHandle(row) {
this.$confirm("您确定要取消么?", { type: "warning" }).then(async () => {
this.$set(row, "cancelLoading", true);
await purchaseOrderListApi.cancelMainOrder({ id: row.id });
this.$set(row, "cancelLoading", false);
busEvent.$emit(EventName.updateCommonTableList + this.$route.name);
this.$message.success("操作成功");
});
}
// 查看入库信息
private toBatchList(row) {
this.$router.push({
name: "incomingBatchesList",
query: { orderNumbers: row.sn },
});
}
private exportBtnLoading = false;
private exportSkuLoading = false;
// 导出采购单
private async exportPurchaseOrder() {
this.exportBtnLoading = true;
try {
let result= await purchaseOrderListApi.exportOrderMain(this.searchFields);
AsyncExportModule.exportHandleToUrl(result.data.data)
this.exportBtnLoading = false;
} catch (error) {
this.exportBtnLoading = false;
}
}
// 导出采购明细-新增
private async purchaseOrderMaindetailExport() {
this.exportSkuLoading = true;
try {
let result= await purchaseOrderListApi.exportOrderMainSkusList(this.searchFields);
AsyncExportModule.exportHandleToUrl(result.data.data)
this.exportSkuLoading = false;
} catch (error) {
this.exportSkuLoading = false;
}
}
// 回车搜索
private toSearch() {
(this.$refs.commonSearchPage as any).search();
}
// 详情页面
private gotoDetail(id) {
BreadcrumbModule.addBreadcrumbs({
name: "purchaseMasterOrderDetails",
title: "采购主单详情",
});
this.$router.push({
name: "purchaseMasterOrderDetails",
query: { id },
});
}
// 查看子单
private goPurchaseChildOrderList(row) {
this.$router.push({
name: "purchaseChildOrderList",
query: { orderNumbers: row.sn },
});
}
private combinationList=[]
private creatorRoleList = [
{ id: 1, label: "合作商" },
{ id: 2, label: "门店" },
]; // 创建人角色
private sortList=[
{ id: 1, label: "时间倒序" },
{ id: 2, label: "采购总数倒序" },
{ id: 3, label: "采购总金额倒序 " },
]
private storageStatusList = [
{ id: 1, label: "未入库" },
{ id: 2, label: "部分入库" },
{ id: 3, label: "全部入库" },
]; // 入库状态
private issueStatusList = [
{ id: 1, label: "待下发" },
{ id: 2, label: "部分成功" },
{ id: 3, label: "下发成功" },
{ id: 4, label: "停止下发" },
]; // 下发状态
private statusNameList = [
{ id: 1, label: "待审核" },
{ id: 2, label: "待支付" },
{ id: 3, label: "进行中" },
{ id: 4, label: "已完成" },
{ id: 5, label: "已驳回" },
{ id: 6, label: "取消" },
{ id: 7, label: "已终止" },
];
private franchiseeList = [];
private shopList = [];
private created() {
busEvent.$on("announceTableData", (data) => {
// this.statusList = data.syncStatus;
// this.creatorRoleList = data.createRole;
// this.storageStatusList = data.storageStatus;
// this.issueStatusList = data.issueStatus;
// this.statusNameList = data.status;
});
this.getShopList()
this.getFranchiseeList()
this.getCombination()
}
private async getCombination (){
try {
const params = {};
const { data } = await purchaseOrderListApi.selectCombination(params);
this.combinationList = data.data.list;
} catch (error) {
}
}
private async getShopList(){
try {
const params = {};
const { data } = await purchaseOrderListApi.selectShopList(params);
this.shopList = data.data;
} catch (error) {
}
}
private async getFranchiseeList(){
try {
const params = {};
const { data } = await purchaseOrderListApi.franchiseeForShop(params);
this.franchiseeList = data.data;
} catch (error) {
}
}
private destroyed() {
busEvent.$off("announceTableData");
delete BreadcrumbModule.cacheBreadCrumbs.purchaseMasterOrderDetails;
}
}
</script>
<style lang="scss" scoped>
.mt10 {
margin-top: 10px;
}
.post-form {
.el-form-item {
margin-bottom: 0;
}
}
.in-warehouse {
width: 250px;
}
</style>

浙公网安备 33010602011771号