|
@@ -0,0 +1,157 @@
|
|
|
+<script lang="ts" setup>
|
|
|
+/**
|
|
|
+ * @Name: index.vue
|
|
|
+ * @Description: 市场店铺
|
|
|
+ * @Author: Cheney
|
|
|
+ */
|
|
|
+
|
|
|
+import VerticalDivider from '/src/components/VerticalDivider/index.vue';
|
|
|
+import { RefreshRight, Search } from '@element-plus/icons-vue';
|
|
|
+import { useTableHeight } from '/@/utils/useTableHeight';
|
|
|
+import DataTable from './component/DataTable.vue';
|
|
|
+import { DictionaryStore } from '/@/stores/dictionary';
|
|
|
+import { useTemplateRef } from 'vue';
|
|
|
+import { useCountryInfoStore } from '/@/stores/countryInfo';
|
|
|
+import { useResponse } from '/@/utils/useResponse';
|
|
|
+import * as api from './api';
|
|
|
+
|
|
|
+
|
|
|
+const { data: staticData } = DictionaryStore();
|
|
|
+const countryInfoStore = useCountryInfoStore();
|
|
|
+
|
|
|
+const titleContainer: Ref<HTMLElement | null> = useTemplateRef('titleContainer');
|
|
|
+const queryContainer: Ref<HTMLElement | null> = useTemplateRef('queryContainer');
|
|
|
+const { tableHeight } = useTableHeight(titleContainer, queryContainer);
|
|
|
+
|
|
|
+const tableRef: Ref<any> = useTemplateRef('table');
|
|
|
+
|
|
|
+const btnLoading = ref(false);
|
|
|
+
|
|
|
+const formInline = reactive<any>({
|
|
|
+ country: '',
|
|
|
+ shop: '',
|
|
|
+ region: '',
|
|
|
+ delivery: '',
|
|
|
+ status: '',
|
|
|
+ asin: '',
|
|
|
+ sku: '',
|
|
|
+});
|
|
|
+provide('query-parameter', formInline);
|
|
|
+
|
|
|
+const shopOptions = ref<any>([]);
|
|
|
+
|
|
|
+onBeforeMount(() => {
|
|
|
+ fetchShopOptions();
|
|
|
+})
|
|
|
+
|
|
|
+async function fetchShopOptions() {
|
|
|
+ const res = await useResponse(api.getShopOptions)
|
|
|
+ shopOptions.value = res.data
|
|
|
+}
|
|
|
+
|
|
|
+async function handleQuery() {
|
|
|
+ btnLoading.value = true;
|
|
|
+ await tableRef.value?.fetchList();
|
|
|
+ btnLoading.value = false;
|
|
|
+}
|
|
|
+
|
|
|
+function resetParameter() {
|
|
|
+ for (const key in formInline) {
|
|
|
+ formInline[key] = '';
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<template>
|
|
|
+ <div class="p-5 flex-grow">
|
|
|
+ <el-card class="h-full" style="color: rgba(0, 0, 0, 0.88);">
|
|
|
+ <div ref="titleContainer" class="text-xl font-semibold pb-5">市场店铺</div>
|
|
|
+ <!-- 查询条件 -->
|
|
|
+ <div ref="queryContainer" class="flex justify-between">
|
|
|
+ <div class="flex flex-1">
|
|
|
+ <div class="w-full whitespace-nowrap">
|
|
|
+ <el-row :gutter="20" style="margin-bottom: 16px;">
|
|
|
+ <el-col :span="4">
|
|
|
+ <div class="flex items-center">
|
|
|
+ <span class="mr-2">国 家</span>
|
|
|
+ <el-select v-model="formInline.country" clearable placeholder="请选择国家">
|
|
|
+ <el-option v-for="item in staticData.country_code" :key="item.value" :label="item.label"
|
|
|
+ :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="5">
|
|
|
+ <div class="flex items-center">
|
|
|
+ <span class="mr-2">店 铺</span>
|
|
|
+ <el-select v-model="formInline.shop" clearable placeholder="请选择店铺">
|
|
|
+ <el-option v-for="item in shopOptions" :key="item.id" :label="item.name"
|
|
|
+ :value="item.id" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="5">
|
|
|
+ <div class="flex items-center">
|
|
|
+ <span class="mr-2">站 点</span>
|
|
|
+ <el-select v-model="formInline.region" clearable placeholder="请选择站点">
|
|
|
+ <el-option v-for="item in countryInfoStore.Region" :label="item.name" :value="item.code" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="5">
|
|
|
+ <div class="flex items-center">
|
|
|
+ <span class="mr-2">配送方式</span>
|
|
|
+ <el-select v-model="formInline.delivery" clearable placeholder="请选择配送方式">
|
|
|
+ <el-option label="FBM" value="FBM" />
|
|
|
+ <el-option label="FBA" value="FBA" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <div class="flex items-center">
|
|
|
+ <span class="mr-2">状 态</span>
|
|
|
+ <el-select v-model="formInline.status" clearable placeholder="请选择状态">
|
|
|
+ <el-option label="在售" value="Active" />
|
|
|
+ <el-option label="不在售" value="Inactive" />
|
|
|
+ <el-option label="不完整" value="Incomplete" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="20" style="margin-bottom: 16px;">
|
|
|
+ <el-col :span="6">
|
|
|
+ <div class="flex items-center">
|
|
|
+ <span class="mr-2">ASIN</span>
|
|
|
+ <el-input v-model="formInline.asin" clearable placeholder="请输入ASIN" />
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <div class="flex items-center">
|
|
|
+ <span class="mr-2">SKU</span>
|
|
|
+ <el-input v-model="formInline.sku" clearable placeholder="请输入SKU" />
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <VerticalDivider />
|
|
|
+ <div class="flex flex-col gap-1.5 items-end">
|
|
|
+ <el-button :icon="Search" :loading="btnLoading" class="mb-4" type="primary" @click="handleQuery">
|
|
|
+ 查 询
|
|
|
+ </el-button>
|
|
|
+ <el-button :icon="RefreshRight" color="#ECECF1C9" style="width: 88px; color: #3c3c3c;"
|
|
|
+ @click="resetParameter">
|
|
|
+ 重 置
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <el-divider ref="dividerContainer" style="margin: 20px 0 12px 0;" />
|
|
|
+ <div :style="{ height: tableHeight + 'px' }">
|
|
|
+ <DataTable ref="table" />
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+
|
|
|
+</style>
|