Commit 50ca4ee0 authored by limengyang's avatar limengyang

fix(lmy):eslint修复

parent 2c097084
<script lang="ts" setup> <script lang="ts" setup>
import { ref, computed } from 'vue'; import { ref, computed } from 'vue';
import { message } from 'ant-design-vue'; import { message } from 'ant-design-vue';
import { import { Input, Button } from 'ant-design-vue';
Input, import { RightOutlined, LeftOutlined } from '@ant-design/icons-vue';
Button, const emit = defineEmits(['close']);
} from 'ant-design-vue'; import {
import { RightOutlined, LeftOutlined } from '@ant-design/icons-vue';
const emit = defineEmits(['close'])
import {
regionalSpotManageBrandListApi, regionalSpotManageBrandListApi,
regionalSpotManageGetAreaListApi, regionalSpotManageGetAreaListApi,
regionalSpotManageOpsAddProductApi regionalSpotManageOpsAddProductApi,
} from '/@/api/regionalSpotManage'; } from '/@/api/regionalSpotManage';
import { getAuthCache } from '/@/utils/auth'; import { getAuthCache } from '/@/utils/auth';
const userInfo: any = getAuthCache('USER__INFO__') const userInfo: any = getAuthCache('USER__INFO__');
const ghsCode = userInfo.supplier.ghsCode const ghsCode = userInfo.supplier.ghsCode;
let searchBrand = ref('') let searchBrand = ref('');
let searchItemNo = ref('') let searchItemNo = ref('');
let searchBrandList = ref<any[]>([]) let searchBrandList = ref<any[]>([]);
const handleSearch = async (value) => { const handleSearch = async (value) => {
const res = await regionalSpotManageBrandListApi({brand: value}); const res = await regionalSpotManageBrandListApi({ brand: value });
if (res.code === 20000) { if (res.code === 20000) {
searchBrandList.value = res.data searchBrandList.value = res.data;
} else { } else {
searchBrandList.value = [] searchBrandList.value = [];
} }
} };
const closeModal = () => { const closeModal = () => {
emit('close', false) emit('close', false);
} };
const leftData = ref<any[]>([]) const leftData = ref<any[]>([]);
const leftColumns = [ const leftColumns = [
{ title: '商品名称', dataIndex: 'productName', key: 'productName', width: '25%', align: 'center'}, {
{ title: '品牌', dataIndex: 'brand', key: 'brand', width: '25%', align: 'center'}, title: '商品名称',
{ title: '货号', dataIndex: 'goodsNo', key: 'goodsNo', width: '20%', align: 'center'}, dataIndex: 'productName',
{ title: '规格', dataIndex: 'spec', key: 'spec', width: '20%', align: 'center'}, key: 'productName',
] width: '25%',
const pagination = ref({ align: 'center',
},
{ title: '品牌', dataIndex: 'brand', key: 'brand', width: '25%', align: 'center' },
{ title: '货号', dataIndex: 'goodsNo', key: 'goodsNo', width: '20%', align: 'center' },
{ title: '规格', dataIndex: 'spec', key: 'spec', width: '20%', align: 'center' },
];
const pagination = ref({
size: 'small', size: 'small',
pageSize: 10, pageSize: 10,
current: 1, current: 1,
total: 0, total: 0,
showTotal: total => `共 ${total} 条`, showTotal: (total) => `共 ${total} 条`,
hideOnSinglePage: false, hideOnSinglePage: false,
showQuickJumper: true, showQuickJumper: true,
showSizeChanger: true, showSizeChanger: true,
pageSizeOptions: ['10', '20', '30', '50', '100'], pageSizeOptions: ['10', '20', '30', '50', '100'],
onChange: (current) => { onChange: (current) => {
pagination.value.current = current pagination.value.current = current;
getLeftData() getLeftData();
}, },
onShowSizeChange: (size) => { onShowSizeChange: (size) => {
pagination.value.pageSize = size pagination.value.pageSize = size;
getLeftData() getLeftData();
} },
}) });
const getLeftData = () => { const getLeftData = () => {
leftData.value = [ leftData.value = [
{ {
productName: '测试产品1', productName: '测试产品1',
brand: '测试品牌1', brand: '测试品牌1',
goodsNo: '213651', goodsNo: '213651',
spec: '100ml', spec: '100ml',
sysid: '1' sysid: '1',
}, },
{ {
productName: '测试产品2', productName: '测试产品2',
brand: '测试品牌2', brand: '测试品牌2',
goodsNo: '213652', goodsNo: '213652',
spec: '100ml', spec: '100ml',
sysid: '2' sysid: '2',
}, },
{ {
productName: '测试产品3', productName: '测试产品3',
brand: '测试品牌3', brand: '测试品牌3',
goodsNo: '213653', goodsNo: '213653',
spec: '100ml', spec: '100ml',
sysid: '3' sysid: '3',
}, },
{ {
productName: '测试产品4', productName: '测试产品4',
brand: '测试品牌4', brand: '测试品牌4',
goodsNo: '213654', goodsNo: '213654',
spec: '100ml', spec: '100ml',
sysid: '4' sysid: '4',
}, },
{ {
productName: '测试产品5', productName: '测试产品5',
...@@ -91,7 +94,7 @@ const getLeftData = () => { ...@@ -91,7 +94,7 @@ const getLeftData = () => {
goodsNo: '213655', goodsNo: '213655',
spec: '100ml', spec: '100ml',
sysid: '5', sysid: '5',
choice: true choice: true,
}, },
{ {
productName: '测试产品6', productName: '测试产品6',
...@@ -99,187 +102,244 @@ const getLeftData = () => { ...@@ -99,187 +102,244 @@ const getLeftData = () => {
goodsNo: '213656', goodsNo: '213656',
spec: '100ml', spec: '100ml',
sysid: '6', sysid: '6',
choice: true choice: true,
} },
] ];
if (rightData.value.length > 0) { if (rightData.value.length > 0) {
for (let i = 0; i < rightData.value.length; i++) { for (let i = 0; i < rightData.value.length; i++) {
if (leftData.value.findIndex((v) => v.brand + v.goodsNo + v.spec === rightData.value[i].brand + rightData.value[i].goodsNo + rightData.value[i].spec) !== -1) { if (
leftData.value.find((v) => v.brand + v.goodsNo + v.spec === rightData.value[i].brand + rightData.value[i].goodsNo + rightData.value[i].spec).choice = true leftData.value.findIndex(
(v) =>
v.brand + v.goodsNo + v.spec ===
rightData.value[i].brand + rightData.value[i].goodsNo + rightData.value[i].spec,
) !== -1
) {
leftData.value.find(
(v) =>
v.brand + v.goodsNo + v.spec ===
rightData.value[i].brand + rightData.value[i].goodsNo + rightData.value[i].spec,
).choice = true;
} }
} }
} }
leftData.value = [...leftData.value] leftData.value = [...leftData.value];
pagination.value.total = leftData.value.length pagination.value.total = leftData.value.length;
} };
let selectedRowKeys = ref<any[]>([]) let selectedRowKeys = ref<any[]>([]);
let selectedRows = ref<any[]>([]) let selectedRows = ref<any[]>([]);
const rowSelection = computed(() => { const rowSelection = computed(() => {
return { return {
selectedRowKeys: selectedRowKeys.value, selectedRowKeys: selectedRowKeys.value,
onChange: (RowKeys, Rows) => { onChange: (RowKeys, Rows) => {
selectedRowKeys.value = RowKeys selectedRowKeys.value = RowKeys;
selectedRows.value = Rows selectedRows.value = Rows;
}, },
getCheckboxProps: (record) => ({ getCheckboxProps: (record) => ({
disabled: record.choice === true, disabled: record.choice === true,
}), }),
} };
}) });
const toRight = () => { const toRight = () => {
console.log(selectedRows.value); console.log(selectedRows.value);
let arr = JSON.parse(JSON.stringify(selectedRows.value)) let arr = JSON.parse(JSON.stringify(selectedRows.value));
rightData.value = [...arr, ...rightData.value] rightData.value = [...arr, ...rightData.value];
for (let i = 0; i < selectedRows.value.length; i++) { for (let i = 0; i < selectedRows.value.length; i++) {
if (leftData.value.findIndex((v) => v.brand + v.goodsNo + v.spec === selectedRows.value[i].brand + selectedRows.value[i].goodsNo + selectedRows.value[i].spec) !== -1) { if (
leftData.value.find((v) => v.brand + v.goodsNo + v.spec === selectedRows.value[i].brand + selectedRows.value[i].goodsNo + selectedRows.value[i].spec).choice = true leftData.value.findIndex(
(v) =>
v.brand + v.goodsNo + v.spec ===
selectedRows.value[i].brand +
selectedRows.value[i].goodsNo +
selectedRows.value[i].spec,
) !== -1
) {
leftData.value.find(
(v) =>
v.brand + v.goodsNo + v.spec ===
selectedRows.value[i].brand +
selectedRows.value[i].goodsNo +
selectedRows.value[i].spec,
).choice = true;
} }
} }
leftData.value = [...leftData.value] leftData.value = [...leftData.value];
selectedRowKeys.value = [] selectedRowKeys.value = [];
selectedRows.value = [] selectedRows.value = [];
} };
const rightData = ref<any[]>([]) const rightData = ref<any[]>([]);
const rightSelectedRowKeys = ref<any[]>([]) const rightSelectedRowKeys = ref<any[]>([]);
const rightSelectedRows = ref<any[]>([]) const rightSelectedRows = ref<any[]>([]);
const rightRowSelection = computed(() => { const rightRowSelection = computed(() => {
return { return {
selectedRowKeys: rightSelectedRowKeys.value, selectedRowKeys: rightSelectedRowKeys.value,
onChange: (RowKeys, Rows) => { onChange: (RowKeys, Rows) => {
rightSelectedRowKeys.value = RowKeys rightSelectedRowKeys.value = RowKeys;
rightSelectedRows.value = Rows rightSelectedRows.value = Rows;
}, },
} };
}) });
const toLeft = () => { const toLeft = () => {
for (let i = 0; i < rightSelectedRows.value.length; i++) { for (let i = 0; i < rightSelectedRows.value.length; i++) {
if (leftData.value.findIndex((v) => v.brand + v.goodsNo + v.spec === rightSelectedRows.value[i].brand + rightSelectedRows.value[i].goodsNo + rightSelectedRows.value[i].spec) !== -1) { if (
leftData.value.find((v) => v.brand + v.goodsNo + v.spec === rightSelectedRows.value[i].brand + rightSelectedRows.value[i].goodsNo + rightSelectedRows.value[i].spec).choice = false leftData.value.findIndex(
(v) =>
v.brand + v.goodsNo + v.spec ===
rightSelectedRows.value[i].brand +
rightSelectedRows.value[i].goodsNo +
rightSelectedRows.value[i].spec,
) !== -1
) {
leftData.value.find(
(v) =>
v.brand + v.goodsNo + v.spec ===
rightSelectedRows.value[i].brand +
rightSelectedRows.value[i].goodsNo +
rightSelectedRows.value[i].spec,
).choice = false;
rightData.value.splice( rightData.value.splice(
rightData.value.findIndex((v) => v.brand + v.goodsNo + v.spec == rightSelectedRows.value[i].brand + rightSelectedRows.value[i].goodsNo + rightSelectedRows.value[i].spec), rightData.value.findIndex(
1 (v) =>
) v.brand + v.goodsNo + v.spec ==
rightSelectedRows.value[i].brand +
rightSelectedRows.value[i].goodsNo +
rightSelectedRows.value[i].spec,
),
1,
);
} else { } else {
rightData.value.splice( rightData.value.splice(
rightData.value.findIndex((v) => v.brand + v.goodsNo + v.spec == rightSelectedRows.value[i].brand + rightSelectedRows.value[i].goodsNo + rightSelectedRows.value[i].spec), rightData.value.findIndex(
1 (v) =>
) v.brand + v.goodsNo + v.spec ==
rightSelectedRows.value[i].brand +
rightSelectedRows.value[i].goodsNo +
rightSelectedRows.value[i].spec,
),
1,
);
} }
} }
leftData.value = [...leftData.value] leftData.value = [...leftData.value];
rightData.value = [...rightData.value] rightData.value = [...rightData.value];
rightSelectedRowKeys.value = [] rightSelectedRowKeys.value = [];
rightSelectedRows.value = [] rightSelectedRows.value = [];
} };
const rowClassName = () => { const rowClassName = () => {
return 'table-back' return 'table-back';
} };
let loading = ref(false) let loading = ref(false);
let addressLoading = ref(false) let addressLoading = ref(false);
const goNext = async () => { const goNext = async () => {
if(!rightData.value.length) return message.error('请先选择商品'); if (!rightData.value.length) return message.error('请先选择商品');
addressVisible.value = true addressVisible.value = true;
addressLoading.value = true addressLoading.value = true;
const res = await regionalSpotManageGetAreaListApi({}); const res = await regionalSpotManageGetAreaListApi({});
if (res.code === 20000) { if (res.code === 20000) {
areaList.value = res.data areaList.value = res.data;
} else { } else {
areaList.value = [] areaList.value = [];
} }
addressLoading.value = false addressLoading.value = false;
} };
// ================================================== // ==================================================
const confirmLoading = ref(false) const confirmLoading = ref(false);
const addressVisible = ref(false) const addressVisible = ref(false);
const checkboxValue = ref([]) const checkboxValue = ref([]);
const areaList = ref<any[]>([ const areaList = ref<any[]>([
{ {
"id": "0", id: '0',
"provinceId": "0", provinceId: '0',
"province": '北京市', province: '北京市',
"cityId": 0, cityId: 0,
"city": '市辖区', city: '市辖区',
"creator": '', creator: '',
"creationTime": '' creationTime: '',
}, },
{ {
"id": "1", id: '1',
"provinceId": "1", provinceId: '1',
"province": '河北省', province: '河北省',
"cityId": 1, cityId: 1,
"city": '保定市', city: '保定市',
"creator": '', creator: '',
"creationTime": '' creationTime: '',
}, },
{ {
"id": "2", id: '2',
"provinceId": "2", provinceId: '2',
"province": '河北省', province: '河北省',
"cityId": 2, cityId: 2,
"city": '石家庄市', city: '石家庄市',
"creator": '', creator: '',
"creationTime": '' creationTime: '',
}, },
{ {
"id": "3", id: '3',
"provinceId": "3", provinceId: '3',
"province": '河北省', province: '河北省',
"cityId": 3, cityId: 3,
"city": '秦皇岛市', city: '秦皇岛市',
"creator": '', creator: '',
"creationTime": '' creationTime: '',
}, },
{ {
"id": "4", id: '4',
"provinceId": "4", provinceId: '4',
"province": '河北省', province: '河北省',
"cityId": 3, cityId: 3,
"city": '承德市', city: '承德市',
"creator": '', creator: '',
"creationTime": '' creationTime: '',
} },
]) ]);
const handleCancel = () => { const handleCancel = () => {
addressVisibleClose() addressVisibleClose();
} };
const goPrevious = () => { const goPrevious = () => {
addressVisibleClose() addressVisibleClose();
} };
const addressVisibleClose = () => { const addressVisibleClose = () => {
addressVisible.value = false addressVisible.value = false;
checkboxValue.value = [] checkboxValue.value = [];
} };
const confirm = async () => { const confirm = async () => {
if(!checkboxValue.value.length) return message.error('请选择现货区域') if (!checkboxValue.value.length) return message.error('请选择现货区域');
const param = ref<{ [key: string]: any }>({ const param = ref<{ [key: string]: any }>({
products: [], products: [],
areas: '' areas: '',
}) });
param.value.products = rightData.value.map(v => { param.value.products = rightData.value.map((v) => {
return { return {
goodsNo: v.goodsNo, goodsNo: v.goodsNo,
brand: v.brand, brand: v.brand,
spec: v.spec, spec: v.spec,
ghscode: ghsCode ghscode: ghsCode,
} };
}) });
param.value.areas = checkboxValue.value.join param.value.areas = checkboxValue.value.join;
console.log(param.value); console.log(param.value);
confirmLoading.value = true confirmLoading.value = true;
const res = await regionalSpotManageOpsAddProductApi(param.value); const res = await regionalSpotManageOpsAddProductApi(param.value);
if (res.code === 20000) { if (res.code === 20000) {
message.success('新增成功') message.success('新增成功');
addressVisibleClose() addressVisibleClose();
emit('close', false) emit('close', false);
} else { } else {
message.error(res.message) message.error(res.message);
} }
confirmLoading.value = false confirmLoading.value = false;
} };
</script> </script>
<template> <template>
<a-modal :visible="true" title="新增区域现货商品" :width="1200" @cancel="closeModal" :maskClosable="false" :keyboard="false"> <a-modal
:visible="true"
title="新增区域现货商品"
:width="1200"
@cancel="closeModal"
:maskClosable="false"
:keyboard="false"
>
<template #footer> <template #footer>
<a-button key="back" @click="closeModal">取消</a-button> <a-button key="back" @click="closeModal">取消</a-button>
<a-button key="submit" type="primary" :loading="loading" @click="goNext">下一步</a-button> <a-button key="submit" type="primary" :loading="loading" @click="goNext">下一步</a-button>
...@@ -297,14 +357,24 @@ const confirm = async () => { ...@@ -297,14 +357,24 @@ const confirm = async () => {
:not-found-content="null" :not-found-content="null"
@search="handleSearch" @search="handleSearch"
> >
<a-select-option v-for="item in searchBrandList" :key="item.value" :label="item.label" :value="item.value"> <a-select-option
v-for="item in searchBrandList"
:key="item.value"
:label="item.label"
:value="item.value"
>
{{ item.label }} {{ item.label }}
</a-select-option> </a-select-option>
</a-select> </a-select>
<span style="margin-left: 15px">货号:</span> <span style="margin-left: 15px">货号:</span>
<Input v-model:value="searchItemNo" allow-clear placeholder="请输入货号" style="width: 200px" /> <Input
<Button style="margin-left:10px">重置</Button> v-model:value="searchItemNo"
<Button @click="getLeftData" type="primary" style="margin-left:10px">查询</Button> allow-clear
placeholder="请输入货号"
style="width: 200px"
/>
<Button style="margin-left: 10px">重置</Button>
<Button @click="getLeftData" type="primary" style="margin-left: 10px">查询</Button>
</div> </div>
<div class="main"> <div class="main">
<div class="left"> <div class="left">
...@@ -333,12 +403,12 @@ const confirm = async () => { ...@@ -333,12 +403,12 @@ const confirm = async () => {
</div> </div>
</div> </div>
<div class="operate"> <div class="operate">
<div style="margin-top: 200px;display:flex"> <div style="margin-top: 200px; display: flex">
<a-button <a-button
@click="toLeft" @click="toLeft"
type="primary" type="primary"
:disabled="rightSelectedRowKeys.length === 0" :disabled="rightSelectedRowKeys.length === 0"
style="display: block; margin-bottom: 10px;margin-right:10px" style="display: block; margin-bottom: 10px; margin-right: 10px"
> >
<template #icon> <template #icon>
<LeftOutlined /> <LeftOutlined />
...@@ -370,13 +440,20 @@ const confirm = async () => { ...@@ -370,13 +440,20 @@ const confirm = async () => {
:scroll="{ x: false, y: 280 }" :scroll="{ x: false, y: 280 }"
:rowClassName="rowClassName" :rowClassName="rowClassName"
:row-selection="rightRowSelection" :row-selection="rightRowSelection"
> />
</a-table>
</div> </div>
</div> </div>
</div> </div>
</a-modal> </a-modal>
<a-modal v-model:visible="addressVisible" title="新增区域现货商品" @cancel="handleCancel" @ok="confirm" :width="1200" :maskClosable="false" :keyboard="false"> <a-modal
v-model:visible="addressVisible"
title="新增区域现货商品"
@cancel="handleCancel"
@ok="confirm"
:width="1200"
:maskClosable="false"
:keyboard="false"
>
<template #footer> <template #footer>
<a-button :loading="confirmLoading" @click="handleCancel">取消</a-button> <a-button :loading="confirmLoading" @click="handleCancel">取消</a-button>
<a-button :loading="confirmLoading" @click="goPrevious">上一步</a-button> <a-button :loading="confirmLoading" @click="goPrevious">上一步</a-button>
...@@ -384,10 +461,12 @@ const confirm = async () => { ...@@ -384,10 +461,12 @@ const confirm = async () => {
</template> </template>
<a-alert type="warning"> <a-alert type="warning">
<template #message> <template #message>
<span style="color: red">特别提醒:</span>北京市-直辖市;天津市-直辖市。本次设置为,北京市-直辖市;四川省-成都市。提交后,商品现货区域将更新为 北京市-直辖市;天津市-直辖市;四川省-成都市。 <span style="color: red">特别提醒:</span
>北京市-直辖市;天津市-直辖市。本次设置为,北京市-直辖市;四川省-成都市。提交后,商品现货区域将更新为
北京市-直辖市;天津市-直辖市;四川省-成都市。
</template> </template>
</a-alert> </a-alert>
<a-spin v-if="addressLoading" style="height: 150px;width: 100%;line-height: 150px" /> <a-spin v-if="addressLoading" style="height: 150px; width: 100%; line-height: 150px" />
<div v-else> <div v-else>
<p style="margin-top: 15px">选择现货区域:</p> <p style="margin-top: 15px">选择现货区域:</p>
<a-checkbox-group v-model:value="checkboxValue" style="width: 100%"> <a-checkbox-group v-model:value="checkboxValue" style="width: 100%">
...@@ -402,7 +481,7 @@ const confirm = async () => { ...@@ -402,7 +481,7 @@ const confirm = async () => {
</template> </template>
<style lang="less" scoped> <style lang="less" scoped>
.main { .main {
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
width: 100%; width: 100%;
...@@ -417,7 +496,7 @@ const confirm = async () => { ...@@ -417,7 +496,7 @@ const confirm = async () => {
align-items: center; align-items: center;
padding: 0 10px; padding: 0 10px;
height: 60px; height: 60px;
background: #F3F6F9 background: #f3f6f9;
} }
} }
.right { .right {
...@@ -430,7 +509,7 @@ const confirm = async () => { ...@@ -430,7 +509,7 @@ const confirm = async () => {
align-items: center; align-items: center;
padding: 0 10px; padding: 0 10px;
height: 60px; height: 60px;
background: #F3F6F9 background: #f3f6f9;
} }
} }
.operate { .operate {
...@@ -440,8 +519,8 @@ const confirm = async () => { ...@@ -440,8 +519,8 @@ const confirm = async () => {
justify-content: center; justify-content: center;
align-content: center; align-content: center;
} }
} }
/deep/.table-back { /deep/.table-back {
background-color: #fff; background-color: #fff;
} }
</style> </style>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, onMounted } from 'vue'; import { ref, onMounted } from 'vue';
import { import {
Form, Form,
FormItem, FormItem,
Input, Input,
...@@ -10,97 +10,97 @@ import { ...@@ -10,97 +10,97 @@ import {
Row, Row,
Col, Col,
message, message,
} from 'ant-design-vue'; } from 'ant-design-vue';
import { UploadOutlined } from '@ant-design/icons-vue'; import { UploadOutlined } from '@ant-design/icons-vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { getAuthCache } from '/@/utils/auth'; import { getAuthCache } from '/@/utils/auth';
import { import {
regionalSpotManageBrandListApi, regionalSpotManageBrandListApi,
regionalSpotManageListApi, regionalSpotManageListApi,
regionalSpotManageGetAreaListApi, regionalSpotManageGetAreaListApi,
regionalSpotManageGetGhsAreaListApi, regionalSpotManageGetGhsAreaListApi,
regionalSpotManageOpsDeleteProductApi, regionalSpotManageOpsDeleteProductApi,
regionalSpotManageOpsEditProductApi, regionalSpotManageOpsEditProductApi,
regionalSpotManageUploadOpsProductApi regionalSpotManageUploadOpsProductApi,
} from '/@/api/regionalSpotManage'; } from '/@/api/regionalSpotManage';
import addProductModal from './addProduct.vue' import addProductModal from './addProduct.vue';
const config = import.meta.env const config = import.meta.env;
const userInfo: any = getAuthCache('USER__INFO__') const userInfo: any = getAuthCache('USER__INFO__');
const ghsCode = userInfo.supplier.ghsCode const ghsCode = userInfo.supplier.ghsCode;
const router = useRouter(); const router = useRouter();
const list = ref<any[]>([]) const list = ref<any[]>([]);
onMounted(async () => { onMounted(async () => {
getList() getList();
getAllAreaList() getAllAreaList();
}); });
const searchForm = ref<{ const searchForm = ref<{
brandList: any; brandList: any;
goodsNo: any; goodsNo: any;
areaIds: any; areaIds: any;
types: any; types: any;
}>({ }>({
brandList: [], brandList: [],
goodsNo: '', goodsNo: '',
areaIds: [], areaIds: [],
types: [] types: [],
}); });
const areaIdsOption = ref([ const areaIdsOption = ref([
{ label: '区域1', value: '区域1' }, { label: '区域1', value: '区域1' },
{ label: '区域2', value: '区域2' }, { label: '区域2', value: '区域2' },
]) ]);
const typesOption = ref([ const typesOption = ref([
{ label: '组1', value: '组1' }, { label: '组1', value: '组1' },
{ label: '组2', value: '组2' }, { label: '组2', value: '组2' },
]) ]);
let searchBrandList = ref<any[]>([]) let searchBrandList = ref<any[]>([]);
const handleSearch = async (value) => { const handleSearch = async (value) => {
const res = await regionalSpotManageBrandListApi({brand: value}); const res = await regionalSpotManageBrandListApi({ brand: value });
if (res.code === 20000) { if (res.code === 20000) {
searchBrandList.value = res.data searchBrandList.value = res.data;
} else { } else {
searchBrandList.value = [] searchBrandList.value = [];
} }
} };
let listLoading = ref(false) let listLoading = ref(false);
const pagination = ref({ const pagination = ref({
pageSize: 10, pageSize: 10,
current: 1, current: 1,
total: 0, total: 0,
showTotal: total => `共 ${total} 条`, showTotal: (total) => `共 ${total} 条`,
hideOnSinglePage: false, hideOnSinglePage: false,
showQuickJumper: true, showQuickJumper: true,
showSizeChanger: true, showSizeChanger: true,
pageSizeOptions: ['10', '20', '30', '50', '100'], pageSizeOptions: ['10', '20', '30', '50', '100'],
onChange: (current) => { onChange: (current) => {
pagination.value.current = current pagination.value.current = current;
getList() getList();
}, },
onShowSizeChange: (size) => { onShowSizeChange: (size) => {
pagination.value.pageSize = size pagination.value.pageSize = size;
getList() getList();
} },
}) });
const getList = async () => { const getList = async () => {
const pager = ref({ const pager = ref({
pageIndex: 1, pageIndex: 1,
pageSize: 10 pageSize: 10,
}) });
const param = ref({ const param = ref({
...searchForm.value, ...searchForm.value,
...pager.value ...pager.value,
}) });
param.value.areaIds = param.value.areaIds ? param.value.areaIds : [] param.value.areaIds = param.value.areaIds ? param.value.areaIds : [];
param.value.types = param.value.types ? param.value.types : [] param.value.types = param.value.types ? param.value.types : [];
listLoading.value = true listLoading.value = true;
const res = await regionalSpotManageListApi(param.value); const res = await regionalSpotManageListApi(param.value);
if (res.code === 20000) { if (res.code === 20000) {
list.value = res.data list.value = res.data;
pagination.value.total = res.data[0].total pagination.value.total = res.data[0].total;
} else { } else {
list.value = [] list.value = [];
pagination.value.total = 0 pagination.value.total = 0;
} }
listLoading.value = false listLoading.value = false;
list.value = [ list.value = [
{ {
productName: '测试商品', productName: '测试商品',
...@@ -108,7 +108,7 @@ const getList = async () => { ...@@ -108,7 +108,7 @@ const getList = async () => {
goodsNo: '45641', goodsNo: '45641',
spec: '100ml', spec: '100ml',
productStatus: '上架', productStatus: '上架',
sysid: '1' sysid: '1',
}, },
{ {
productName: 'ffff', productName: 'ffff',
...@@ -116,362 +116,378 @@ const getList = async () => { ...@@ -116,362 +116,378 @@ const getList = async () => {
goodsNo: 'fff', goodsNo: 'fff',
spec: 'ff', spec: 'ff',
productStatus: '上架', productStatus: '上架',
sysid: '2' sysid: '2',
} },
] ];
} };
const onRset = () => { const onRset = () => {
searchForm.value.brandList = [] searchForm.value.brandList = [];
searchForm.value.goodsNo = '' searchForm.value.goodsNo = '';
searchForm.value.areaIds = [] searchForm.value.areaIds = [];
searchForm.value.types = [] searchForm.value.types = [];
getList() getList();
} };
const onSearch = () => { const onSearch = () => {
pagination.value.pageSize = 1 pagination.value.pageSize = 1;
getList() getList();
} };
let showModal = ref(false) let showModal = ref(false);
const addProduct = () => { const addProduct = () => {
showModal.value = true showModal.value = true;
} };
// 关闭新增商品弹窗 // 关闭新增商品弹窗
const closeVisible = (val) => { const closeVisible = (val) => {
showModal.value = val showModal.value = val;
} };
let curItem = ref<{ [key: string]: any }>({}); let curItem = ref<{ [key: string]: any }>({});
// =========查看区域现货 statr =========== // =========查看区域现货 statr ===========
const loading1 = ref(false) const loading1 = ref(false);
const visible = ref(false) const visible = ref(false);
const regionalSpotGoods = ref([]) const regionalSpotGoods = ref([]);
const viewCurrent = async (val) => { const viewCurrent = async (val) => {
curItem.value = val curItem.value = val;
visible.value = true visible.value = true;
const param = ref<{ [key: string]: any }>({ const param = ref<{ [key: string]: any }>({
products: [{ products: [
{
goodsNo: val.goodsNo, goodsNo: val.goodsNo,
brand: val.brand, brand: val.brand,
spec: val.spec, spec: val.spec,
ghscode: ghsCode ghscode: ghsCode,
}], },
}) ],
});
console.log(param.value); console.log(param.value);
loading1.value = true loading1.value = true;
const result = await getAreaList(param.value) const result = await getAreaList(param.value);
regionalSpotGoods.value = result regionalSpotGoods.value = result;
loading1.value = false loading1.value = false;
} };
const getAreaList = async (param) => { const getAreaList = async (param) => {
const res = await regionalSpotManageGetGhsAreaListApi(param); const res = await regionalSpotManageGetGhsAreaListApi(param);
if (res.code === 20000) { if (res.code === 20000) {
return res.data return res.data;
} else { } else {
return [] return [];
} }
} };
// ==========查看区域现货 end ============= // ==========查看区域现货 end =============
let selectedRowKeys = ref([]) let selectedRowKeys = ref([]);
let selectedRows = ref<any[]>([]) let selectedRows = ref<any[]>([]);
const onSelectChange = (Keys, Rows) => { const onSelectChange = (Keys, Rows) => {
selectedRowKeys.value = Keys selectedRowKeys.value = Keys;
selectedRows.value = Rows selectedRows.value = Rows;
} };
// ===============增加区域 start======================= // ===============增加区域 start=======================
let addVisible = ref(false) let addVisible = ref(false);
let addAreaLoading = ref(false) let addAreaLoading = ref(false);
let addCheckboxValue = ref(['0']) let addCheckboxValue = ref(['0']);
const addArea = async (row) => { const addArea = async (row) => {
curItem.value = row curItem.value = row;
addVisible.value = true addVisible.value = true;
addAreaLoading.value = true addAreaLoading.value = true;
const param = ref<{ [key: string]: any }>({ const param = ref<{ [key: string]: any }>({
products: [{ products: [
{
goodsNo: row.goodsNo, goodsNo: row.goodsNo,
brand: row.brand, brand: row.brand,
spec: row.spec, spec: row.spec,
ghscode: ghsCode ghscode: ghsCode,
}], },
}) ],
const result = await getAreaList(param.value) });
delAreaList.value = result const result = await getAreaList(param.value);
const curArr = delAreaList.value.map(it => it.id) delAreaList.value = result;
const curArr = delAreaList.value.map((it) => it.id);
for (const k of allAreaList.value) { for (const k of allAreaList.value) {
if (curArr.includes(k.id)) { if (curArr.includes(k.id)) {
addCheckboxValue.value.push(k.id) addCheckboxValue.value.push(k.id);
k.disabled = true k.disabled = true;
} }
} }
addAreaLoading.value = false addAreaLoading.value = false;
} };
const addVisibleCancel = () => { const addVisibleCancel = () => {
addVisible.value = false addVisible.value = false;
addCheckboxValue.value = [] addCheckboxValue.value = [];
} };
let confirmAddLoading = ref(false) let confirmAddLoading = ref(false);
const confirmAddArea = async () => { const confirmAddArea = async () => {
const param = ref<{ [key: string]: any }>({ const param = ref<{ [key: string]: any }>({
products: [{ products: [
{
goodsNo: curItem.value.goodsNo, goodsNo: curItem.value.goodsNo,
brand: curItem.value.brand, brand: curItem.value.brand,
spec: curItem.value.spec, spec: curItem.value.spec,
ghscode: ghsCode ghscode: ghsCode,
}], },
areas: addCheckboxValue.value.join ],
}) areas: addCheckboxValue.value.join,
confirmAddLoading.value = true });
confirmAddLoading.value = true;
const res = await regionalSpotManageOpsEditProductApi(param.value); const res = await regionalSpotManageOpsEditProductApi(param.value);
if (res.success) { if (res.success) {
message.success('添加区域成功') message.success('添加区域成功');
} else { } else {
message.error(res.message) message.error(res.message);
} }
confirmAddLoading.value = false confirmAddLoading.value = false;
} };
// ===============增加区域 end======================= // ===============增加区域 end=======================
// ================区域现货商品删除 start===================== // ================区域现货商品删除 start=====================
let delVisible = ref(false) let delVisible = ref(false);
let delLoading = ref(false) let delLoading = ref(false);
let deleteNum = ref(0) let deleteNum = ref(0);
let radioValue = ref(1) let radioValue = ref(1);
let delAreaList = ref<any[]>([ let delAreaList = ref<any[]>([
{ {
"id": "0", id: '0',
"provinceId": "0", provinceId: '0',
"province": '北京市', province: '北京市',
"cityId": 0, cityId: 0,
"city": '市辖区', city: '市辖区',
"creator": '', creator: '',
"creationTime": '' creationTime: '',
}, },
{ {
"id": "1", id: '1',
"provinceId": "1", provinceId: '1',
"province": '河北省', province: '河北省',
"cityId": 1, cityId: 1,
"city": '保定市', city: '保定市',
"creator": '', creator: '',
"creationTime": '' creationTime: '',
}, },
])//已添加的区域 ]); //已添加的区域
let delCheckboxValue = ref([]) let delCheckboxValue = ref([]);
const del = async (val) => { const del = async (val) => {
curItem.value = val curItem.value = val;
deleteNum.value = 1 deleteNum.value = 1;
delVisible.value = true delVisible.value = true;
const param = ref<{ [key: string]: any }>({ const param = ref<{ [key: string]: any }>({
products: [{ products: [
{
goodsNo: val.goodsNo, goodsNo: val.goodsNo,
brand: val.brand, brand: val.brand,
spec: val.spec, spec: val.spec,
ghscode: ghsCode ghscode: ghsCode,
}], },
}) ],
});
console.log(param.value); console.log(param.value);
// delLoading.value = true // delLoading.value = true
// const result = await getAreaList(param.value) // const result = await getAreaList(param.value)
// delAreaList.value = result // delAreaList.value = result
// delLoading.value = false // delLoading.value = false
} };
const delVisibleCancel = () => { const delVisibleCancel = () => {
delVisible.value = false delVisible.value = false;
deleteNum.value = 0 deleteNum.value = 0;
radioValue.value = 1 radioValue.value = 1;
delCheckboxValue.value = [] delCheckboxValue.value = [];
isBatchDel.value = false isBatchDel.value = false;
} };
let delConfirLoading = ref(false) let delConfirLoading = ref(false);
const confirmDel = async () => { const confirmDel = async () => {
if(radioValue.value === 2 && !delCheckboxValue.value.length) return message.error('请选择需要删除的现货区域') if (radioValue.value === 2 && !delCheckboxValue.value.length)
return message.error('请选择需要删除的现货区域');
const param = ref<{ [key: string]: any }>({ const param = ref<{ [key: string]: any }>({
products: [], products: [],
areas: '', areas: '',
isAll: false isAll: false,
}) });
if (isBatchDel.value) { if (isBatchDel.value) {
param.value.products = selectedRows.value.map(v => { param.value.products = selectedRows.value.map((v) => {
return { return {
goodsNo: v.goodsNo, goodsNo: v.goodsNo,
brand: v.brand, brand: v.brand,
spec: v.spec, spec: v.spec,
ghscode: ghsCode ghscode: ghsCode,
} };
}) });
} else { } else {
param.value.products = [{ param.value.products = [
{
goodsNo: curItem.value.goodsNo, goodsNo: curItem.value.goodsNo,
brand: curItem.value.brand, brand: curItem.value.brand,
spec: curItem.value.spec, spec: curItem.value.spec,
ghscode: ghsCode ghscode: ghsCode,
}] },
];
} }
if (radioValue.value === 1) { if (radioValue.value === 1) {
param.value.isAll = true param.value.isAll = true;
param.value.areas = delAreaList.value.map(v => v.id) param.value.areas = delAreaList.value.map((v) => v.id);
} else if (radioValue.value === 2) { } else if (radioValue.value === 2) {
param.value.areas = delCheckboxValue.value param.value.areas = delCheckboxValue.value;
} }
delConfirLoading.value = true delConfirLoading.value = true;
const res = await regionalSpotManageOpsDeleteProductApi(param.value); const res = await regionalSpotManageOpsDeleteProductApi(param.value);
if (res.success) { if (res.success) {
message.success('删除成功') message.success('删除成功');
} else { } else {
message.success(res.message) message.success(res.message);
} }
delConfirLoading.value = false delConfirLoading.value = false;
} };
// 批量删除 // 批量删除
let isBatchDel = ref(false) let isBatchDel = ref(false);
const batchDel = () => { const batchDel = () => {
if(!selectedRowKeys.value.length) return message.error('请勾选商品') if (!selectedRowKeys.value.length) return message.error('请勾选商品');
isBatchDel.value = true isBatchDel.value = true;
deleteNum.value = selectedRows.value.length deleteNum.value = selectedRows.value.length;
delVisible.value = true delVisible.value = true;
const param = ref<{ [key: string]: any }>({ const param = ref<{ [key: string]: any }>({
products: [] products: [],
}) });
param.value.products = selectedRows.value.map(v => { param.value.products = selectedRows.value.map((v) => {
return { return {
goodsNo: v.goodsNo, goodsNo: v.goodsNo,
brand: v.brand, brand: v.brand,
spec: v.spec, spec: v.spec,
ghscode: ghsCode ghscode: ghsCode,
} };
}) });
// delLoading.value = true // delLoading.value = true
// const result = await getAreaList(param.value) // const result = await getAreaList(param.value)
// delAreaList.value = result // delAreaList.value = result
// delLoading.value = false // delLoading.value = false
} };
// ================区域现货商品删除 end===================== // ================区域现货商品删除 end=====================
let allAreaList = ref<any[]>([ let allAreaList = ref<any[]>([
{ {
"id": "0", id: '0',
"provinceId": "0", provinceId: '0',
"province": '北京市', province: '北京市',
"cityId": 0, cityId: 0,
"city": '市辖区', city: '市辖区',
"creator": '', creator: '',
"creationTime": '', creationTime: '',
disabled: true, disabled: true,
}, },
{ {
"id": "1", id: '1',
"provinceId": "1", provinceId: '1',
"province": '河北省', province: '河北省',
"cityId": 1, cityId: 1,
"city": '保定市', city: '保定市',
"creator": '', creator: '',
"creationTime": '' creationTime: '',
}, },
{ {
"id": "2", id: '2',
"provinceId": "2", provinceId: '2',
"province": '河北省', province: '河北省',
"cityId": 2, cityId: 2,
"city": '石家庄市', city: '石家庄市',
"creator": '', creator: '',
"creationTime": '' creationTime: '',
}, },
{ {
"id": "3", id: '3',
"provinceId": "3", provinceId: '3',
"province": '河北省', province: '河北省',
"cityId": 3, cityId: 3,
"city": '秦皇岛市', city: '秦皇岛市',
"creator": '', creator: '',
"creationTime": '' creationTime: '',
}, },
{ {
"id": "4", id: '4',
"provinceId": "4", provinceId: '4',
"province": '河北省', province: '河北省',
"cityId": 3, cityId: 3,
"city": '承德市', city: '承德市',
"creator": '', creator: '',
"creationTime": '' creationTime: '',
} },
]) ]);
const getAllAreaList = async () => { const getAllAreaList = async () => {
const res = await regionalSpotManageGetAreaListApi({}); const res = await regionalSpotManageGetAreaListApi({});
if (res.success) { if (res.success) {
allAreaList.value = res.data allAreaList.value = res.data;
} else { } else {
allAreaList.value = [] allAreaList.value = [];
} }
} };
// =====================批量导入 start======================= // =====================批量导入 start=======================
let productExcelList = ref<any[]>([]) let productExcelList = ref<any[]>([]);
let importVisible = ref(false) let importVisible = ref(false);
const impotrCheckboxValue = ref([]) const impotrCheckboxValue = ref([]);
const batchImport = () => { const batchImport = () => {
importVisible.value = true importVisible.value = true;
allAreaList.value.forEach(v => { allAreaList.value.forEach((v) => {
v.disabled = false v.disabled = false;
}) });
} };
const productExcelBeforeUpload = (file, fileList) => { const productExcelBeforeUpload = (file, fileList) => {
const isLt8M = file.size / 1024 / 1024 <= 8 const isLt8M = file.size / 1024 / 1024 <= 8;
const extension = file.name.substring(file.name.lastIndexOf('.') + 1) const extension = file.name.substring(file.name.lastIndexOf('.') + 1);
if (!isLt8M) { if (!isLt8M) {
message.error('上传文件大小不能超过 8MB!') message.error('上传文件大小不能超过 8MB!');
return false return false;
} }
if (extension !== 'xls' && extension !== 'xlsx') { if (extension !== 'xls' && extension !== 'xlsx') {
message.error('只能上传excel的文件') message.error('只能上传excel的文件');
return false return false;
} }
let curFileList = [...fileList] let curFileList = [...fileList];
curFileList = curFileList.slice(-1) curFileList = curFileList.slice(-1);
productExcelList.value = curFileList productExcelList.value = curFileList;
return false return false;
} };
const productExcelRemove = () => { const productExcelRemove = () => {
productExcelList.value = [] productExcelList.value = [];
} };
const downLoad = () => { const downLoad = () => {
window.open(config.VITE_GLOB_API_URL, '_blank') window.open(config.VITE_GLOB_API_URL, '_blank');
} };
let importLoading = ref(false) let importLoading = ref(false);
const confirmImport = async () => { const confirmImport = async () => {
if(!productExcelList.value.length) return message.error('请上传文件') if (!productExcelList.value.length) return message.error('请上传文件');
if(!impotrCheckboxValue.value.length) return message.error('请选择现货区域') if (!impotrCheckboxValue.value.length) return message.error('请选择现货区域');
const param: FormData = new FormData(); const param: FormData = new FormData();
param.append('ghsCode', ghsCode) param.append('ghsCode', ghsCode);
param.append('file', productExcelList.value[0]) param.append('file', productExcelList.value[0]);
param.append('areaIds', impotrCheckboxValue.value.join(',')) param.append('areaIds', impotrCheckboxValue.value.join(','));
importLoading.value = true importLoading.value = true;
const res = await regionalSpotManageUploadOpsProductApi(param); const res = await regionalSpotManageUploadOpsProductApi(param);
if (res.code === 20000) { if (res.code === 20000) {
message.success('批量导入成功') message.success('批量导入成功');
} else { } else {
message.error(res.message) message.error(res.message);
} }
importLoading.value = false importLoading.value = false;
} };
const importCancel = () => { const importCancel = () => {
importVisible.value = false importVisible.value = false;
impotrCheckboxValue.value = [] impotrCheckboxValue.value = [];
productExcelList.value = [] productExcelList.value = [];
} };
// =====================批量导入 end======================= // =====================批量导入 end=======================
const goTaskCenter = () => { const goTaskCenter = () => {
router.push({ router.push({
path: '/taskCenter' path: '/taskCenter',
}) });
} };
</script> </script>
<template> <template>
<div> <div>
<div class="body-box"> <div class="body-box">
<Form :model="searchForm" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" class="top-search"> <Form
:model="searchForm"
:label-col="{ span: 6 }"
:wrapper-col="{ span: 18 }"
class="top-search"
>
<Row :gutter="20"> <Row :gutter="20">
<Col :xxl="4" :xl="6" :lg="8" :sm="12" :xs="24"> <Col :xxl="4" :xl="6" :lg="8" :sm="12" :xs="24">
<FormItem label="品牌名称" name="brandList"> <FormItem label="品牌名称" name="brandList">
...@@ -488,7 +504,12 @@ const goTaskCenter = () => { ...@@ -488,7 +504,12 @@ const goTaskCenter = () => {
:not-found-content="null" :not-found-content="null"
@search="handleSearch" @search="handleSearch"
> >
<a-select-option v-for="item in searchBrandList" :key="item.value" :label="item.label" :value="item.value"> <a-select-option
v-for="item in searchBrandList"
:key="item.value"
:label="item.label"
:value="item.value"
>
{{ item.label }} {{ item.label }}
</a-select-option> </a-select-option>
</a-select> </a-select>
...@@ -501,19 +522,41 @@ const goTaskCenter = () => { ...@@ -501,19 +522,41 @@ const goTaskCenter = () => {
</Col> </Col>
<Col :xxl="4" :xl="6" :lg="8" :sm="12" :xs="24"> <Col :xxl="4" :xl="6" :lg="8" :sm="12" :xs="24">
<FormItem label="现货区域" name="areaIds"> <FormItem label="现货区域" name="areaIds">
<Select v-model:value="searchForm.areaIds" allowClear mode="multiple" placeholder="请选择现货区域" style="width: 100%"> <Select
<SelectOption v-for="(item, index) in areaIdsOption" :key="index" :value="item.value">{{ item.label }}</SelectOption> v-model:value="searchForm.areaIds"
allowClear
mode="multiple"
placeholder="请选择现货区域"
style="width: 100%"
>
<SelectOption
v-for="(item, index) in areaIdsOption"
:key="index"
:value="item.value"
>{{ item.label }}</SelectOption
>
</Select> </Select>
</FormItem> </FormItem>
</Col> </Col>
<Col :xxl="4" :xl="6" :lg="8" :sm="12" :xs="24"> <Col :xxl="4" :xl="6" :lg="8" :sm="12" :xs="24">
<FormItem label="商品分组" name="types"> <FormItem label="商品分组" name="types">
<Select v-model:value="searchForm.types" allowClear mode="multiple" placeholder="请选择商品分组" style="width: 100%"> <Select
<SelectOption v-for="(item, index) in typesOption" :key="index" :value="item.value">{{ item.label }}</SelectOption> v-model:value="searchForm.types"
allowClear
mode="multiple"
placeholder="请选择商品分组"
style="width: 100%"
>
<SelectOption
v-for="(item, index) in typesOption"
:key="index"
:value="item.value"
>{{ item.label }}</SelectOption
>
</Select> </Select>
</FormItem> </FormItem>
</Col> </Col>
<Col :span="24" style="display: flex;justify-content: space-between;"> <Col :span="24" style="display: flex; justify-content: space-between">
<div> <div>
<Button type="primary" style="margin: 0 5px" @click="onSearch">查询</Button> <Button type="primary" style="margin: 0 5px" @click="onSearch">查询</Button>
<Button style="margin: 0 5px" @click="onRset">重置</Button> <Button style="margin: 0 5px" @click="onRset">重置</Button>
...@@ -531,49 +574,61 @@ const goTaskCenter = () => { ...@@ -531,49 +574,61 @@ const goTaskCenter = () => {
bordered bordered
:pagination="pagination" :pagination="pagination"
:rowKey="(record) => record.sysid" :rowKey="(record) => record.sysid"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange, columnWidth: 65 }" :row-selection="{
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
columnWidth: 65,
}"
style="margin-top: 15px" style="margin-top: 15px"
> >
<a-table-column title="商品名称" align="center" :width="100"> <a-table-column title="商品名称" align="center" :width="100">
<template v-slot="{record}"> <template v-slot="{ record }">
{{ record.productName }} {{ record.productName }}
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="品牌" align="center" :width="100"> <a-table-column title="品牌" align="center" :width="100">
<template v-slot="{record}"> <template v-slot="{ record }">
{{ record.brand }} {{ record.brand }}
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="货号" align="center" :width="100"> <a-table-column title="货号" align="center" :width="100">
<template v-slot="{record}"> <template v-slot="{ record }">
{{ record.goodsNo }} {{ record.goodsNo }}
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="规格" align="center" :width="100"> <a-table-column title="规格" align="center" :width="100">
<template v-slot="{record}"> <template v-slot="{ record }">
{{ record.spec }} {{ record.spec }}
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="当前现货区域" align="center" :width="100"> <a-table-column title="当前现货区域" align="center" :width="100">
<template v-slot="{record}"> <template v-slot="{ record }">
<Button type="link" @click="viewCurrent(record)">查看区域现货</Button> <Button type="link" @click="viewCurrent(record)">查看区域现货</Button>
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="上架状态" align="center" :width="100"> <a-table-column title="上架状态" align="center" :width="100">
<template v-slot="{record}"> <template v-slot="{ record }">
{{ record.productStatus }} {{ record.productStatus }}
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="操作" align="center" :width="200"> <a-table-column title="操作" align="center" :width="200">
<template v-slot="{record}"> <template #default="{ record }">
<Button type="link" @click="addArea(record)">增加区域</Button> <Button type="link" @click="addArea(record)">增加区域</Button>
<Button type="link" style="margin-left: 5px" @click="del(record)">删除</Button> <Button type="link" style="margin-left: 5px" @click="del(record)">删除</Button>
</template> </template>
</a-table-column> </a-table-column>
</a-table> </a-table>
</div> </div>
<addProductModal v-if="showModal" @close="closeVisible"></addProductModal> <addProductModal v-if="showModal" @close="closeVisible" />
<a-modal v-model:visible="visible" title="商品可提供现货区域查看" :width="600" @ok="visible = false" :footer="null" :maskClosable="false" okText="提交"> <a-modal
v-model:visible="visible"
title="商品可提供现货区域查看"
:width="600"
@ok="visible = false"
:footer="null"
:maskClosable="false"
okText="提交"
>
<div style="margin-top: -35px">商品名称:{{ curItem.productName }}</div> <div style="margin-top: -35px">商品名称:{{ curItem.productName }}</div>
<div>商品品牌:{{ curItem.brand }}</div> <div>商品品牌:{{ curItem.brand }}</div>
<div>商品货号:{{ curItem.goodsNo }}</div> <div>商品货号:{{ curItem.goodsNo }}</div>
...@@ -587,32 +642,47 @@ const goTaskCenter = () => { ...@@ -587,32 +642,47 @@ const goTaskCenter = () => {
style="margin-top: 15px" style="margin-top: 15px"
> >
<a-table-column title="区域" align="center" :width="100"> <a-table-column title="区域" align="center" :width="100">
<template v-slot="{record}"> <template v-slot="{ record }"> {{ record.provinceName }}-{{ record.cityName }} </template>
{{ record.provinceName }}-{{ record.cityName }}
</template>
</a-table-column> </a-table-column>
<a-table-column title="添加时间" align="center" :width="100"> <a-table-column title="添加时间" align="center" :width="100">
<template v-slot="{record}"> <template v-slot="{ record }">
{{ record.createTime }} {{ record.createTime }}
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="添加人" align="center" :width="100"> <a-table-column title="添加人" align="center" :width="100">
<template v-slot="{record}"> <template v-slot="{ record }">
{{ record.createName }} {{ record.createName }}
</template> </template>
</a-table-column> </a-table-column>
</a-table> </a-table>
</a-modal> </a-modal>
<!-- 删除 --> <!-- 删除 -->
<a-modal v-model:visible="delVisible" title="区域现货商品删除" :width="650" :maskClosable="false" :keyboard="false" @cancel="delVisibleCancel" @ok="confirmDel" :confirmLoading="delConfirLoading" okText="提交"> <a-modal
<p>您已选中 <span style="color: #1684FC">{{ deleteNum }}条</span> 商品</p> v-model:visible="delVisible"
<a-spin v-if="delLoading" style="height: 150px;width: 100%;line-height: 150px" /> title="区域现货商品删除"
<p v-else>选择需要删除的现货区域: :width="650"
:maskClosable="false"
:keyboard="false"
@cancel="delVisibleCancel"
@ok="confirmDel"
:confirmLoading="delConfirLoading"
okText="提交"
>
<p
>您已选中 <span style="color: #1684fc">{{ deleteNum }}条</span> 商品</p
>
<a-spin v-if="delLoading" style="height: 150px; width: 100%; line-height: 150px" />
<p v-else
>选择需要删除的现货区域:
<a-radio-group v-model:value="radioValue"> <a-radio-group v-model:value="radioValue">
<a-radio :value="1">全部区域</a-radio> <a-radio :value="1">全部区域</a-radio>
<a-radio :value="2">部分区域</a-radio> <a-radio :value="2">部分区域</a-radio>
</a-radio-group> </a-radio-group>
<a-checkbox-group v-model:value="delCheckboxValue" :disabled="radioValue === 1" style="width: 100%;margin-top: 15px"> <a-checkbox-group
v-model:value="delCheckboxValue"
:disabled="radioValue === 1"
style="width: 100%; margin-top: 15px"
>
<a-row> <a-row>
<a-col :span="6" v-for="(item, index) in delAreaList" :key="index"> <a-col :span="6" v-for="(item, index) in delAreaList" :key="index">
<a-checkbox :value="item.id">{{ item.province }}-{{ item.city }}</a-checkbox> <a-checkbox :value="item.id">{{ item.province }}-{{ item.city }}</a-checkbox>
...@@ -622,7 +692,16 @@ const goTaskCenter = () => { ...@@ -622,7 +692,16 @@ const goTaskCenter = () => {
</p> </p>
</a-modal> </a-modal>
<!-- 增加区域 --> <!-- 增加区域 -->
<a-modal v-model:visible="addVisible" title="现货商品增加区域" :width="700" :maskClosable="false" @cancel="addVisibleCancel" @ok="confirmAddArea" okText="提交" :confirmLoading="confirmAddLoading"> <a-modal
v-model:visible="addVisible"
title="现货商品增加区域"
:width="700"
:maskClosable="false"
@cancel="addVisibleCancel"
@ok="confirmAddArea"
okText="提交"
:confirmLoading="confirmAddLoading"
>
<div style="margin-top: -35px">商品名称:{{ curItem.productName }}</div> <div style="margin-top: -35px">商品名称:{{ curItem.productName }}</div>
<div>商品品牌:{{ curItem.brand }}</div> <div>商品品牌:{{ curItem.brand }}</div>
<div>商品货号:{{ curItem.goodsNo }}</div> <div>商品货号:{{ curItem.goodsNo }}</div>
...@@ -631,19 +710,33 @@ const goTaskCenter = () => { ...@@ -631,19 +710,33 @@ const goTaskCenter = () => {
<a-checkbox-group v-model:value="addCheckboxValue" style="width: 100%"> <a-checkbox-group v-model:value="addCheckboxValue" style="width: 100%">
<a-row> <a-row>
<a-col :span="6" v-for="(item, index) in allAreaList" :key="index"> <a-col :span="6" v-for="(item, index) in allAreaList" :key="index">
<a-checkbox :value="item.id" :disabled="item.disabled">{{ item.province }}-{{ item.city }}</a-checkbox> <a-checkbox :value="item.id" :disabled="item.disabled"
>{{ item.province }}-{{ item.city }}</a-checkbox
>
</a-col> </a-col>
</a-row> </a-row>
</a-checkbox-group> </a-checkbox-group>
</a-modal> </a-modal>
<!-- 批量导入 --> <!-- 批量导入 -->
<a-modal v-model:visible="importVisible" title="区域现货商品批量导入" :width="700" :maskClosable="false" okText="提交" @ok="confirmImport" @cancel="importCancel" :confirmLoading="importLoading"> <a-modal
v-model:visible="importVisible"
title="区域现货商品批量导入"
:width="700"
:maskClosable="false"
okText="提交"
@ok="confirmImport"
@cancel="importCancel"
:confirmLoading="importLoading"
>
<a-alert type="warning"> <a-alert type="warning">
<template #message> <template #message>
<span style="color: red">特别提醒:</span>若商品之前已设置现货区域,则本次设置为在之前设置基础上新增。例如,原来商品设置为 北京市-直辖市;天津市-直辖市。本次设置为,北京市-直辖市;四川省-成都市。提交后,商品现货区域将更新为 北京市-直辖市;天津市-直辖市;四川省-成都市。 <span style="color: red">特别提醒:</span
>若商品之前已设置现货区域,则本次设置为在之前设置基础上新增。例如,原来商品设置为
北京市-直辖市;天津市-直辖市。本次设置为,北京市-直辖市;四川省-成都市。提交后,商品现货区域将更新为
北京市-直辖市;天津市-直辖市;四川省-成都市。
</template> </template>
</a-alert> </a-alert>
<div style="margin-top: 15px;display: flex;align-items: center"> <div style="margin-top: 15px; display: flex; align-items: center">
<span>上传商品文件:</span> <span>上传商品文件:</span>
<a-upload <a-upload
accept=".xls,.xlsx" accept=".xls,.xlsx"
...@@ -651,7 +744,7 @@ const goTaskCenter = () => { ...@@ -651,7 +744,7 @@ const goTaskCenter = () => {
:before-upload="productExcelBeforeUpload" :before-upload="productExcelBeforeUpload"
@remove="productExcelRemove" @remove="productExcelRemove"
> >
<a-button><upload-outlined></upload-outlined>上传文件</a-button> <a-button><upload-outlined />上传文件</a-button>
</a-upload> </a-upload>
<span style="margin-left: 15px"> <span style="margin-left: 15px">
下载 下载
...@@ -659,10 +752,12 @@ const goTaskCenter = () => { ...@@ -659,10 +752,12 @@ const goTaskCenter = () => {
</span> </span>
</div> </div>
<p style="margin-top: 15px">选择现货区域:</p> <p style="margin-top: 15px">选择现货区域:</p>
<a-checkbox-group v-model:value="impotrCheckboxValue" style="width: 100%;"> <a-checkbox-group v-model:value="impotrCheckboxValue" style="width: 100%">
<a-row> <a-row>
<a-col :span="6" v-for="(item, index) in allAreaList" :key="index"> <a-col :span="6" v-for="(item, index) in allAreaList" :key="index">
<a-checkbox :value="item.id" :disabled="item.disabled">{{ item.province }}-{{ item.city }}</a-checkbox> <a-checkbox :value="item.id" :disabled="item.disabled"
>{{ item.province }}-{{ item.city }}</a-checkbox
>
</a-col> </a-col>
</a-row> </a-row>
</a-checkbox-group> </a-checkbox-group>
...@@ -671,9 +766,9 @@ const goTaskCenter = () => { ...@@ -671,9 +766,9 @@ const goTaskCenter = () => {
</template> </template>
<style lang="less" scoped> <style lang="less" scoped>
.body-box { .body-box {
.top-search { .top-search {
margin-top: 15px; margin-top: 15px;
} }
} }
</style> </style>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, onMounted } from 'vue'; import { ref, onMounted } from 'vue';
import { import { message } from 'ant-design-vue';
message, const config = import.meta.env;
} from 'ant-design-vue'; import {
const config = import.meta.env
import {
taskCenterQueryListApi, taskCenterQueryListApi,
taskCenterRevokeExcelUploadApi, taskCenterRevokeExcelUploadApi,
} from '/@/api/regionalSpotManage'; } from '/@/api/regionalSpotManage';
onMounted(async () => { onMounted(async () => {
getList() getList();
}); });
let list = ref<any[]>([]) let list = ref<any[]>([]);
let listLoading = ref(false) let listLoading = ref(false);
const downLoad = (url) => { const downLoad = (url) => {
window.open(config.VITE_GLOB_API_URL + '/system/excelFile/' + url, '_blank') window.open(config.VITE_GLOB_API_URL + '/system/excelFile/' + url, '_blank');
} };
const downloadFail = (record) => { const downloadFail = (record) => {
if(record.failNum === 0) return if (record.failNum === 0) return;
let href = config.VITE_GLOB_API_URL + '/excel/excelNew/fail/download?sysid=' + record.sysid+'&type='+record.type.slice(2,6) let href =
window.open(href,'blank') config.VITE_GLOB_API_URL +
} '/excel/excelNew/fail/download?sysid=' +
const cancel = async (record) => { record.sysid +
'&type=' +
record.type.slice(2, 6);
window.open(href, 'blank');
};
const cancel = async (record) => {
const param = ref<{ [key: string]: any }>({ const param = ref<{ [key: string]: any }>({
sysid: record.sysid sysid: record.sysid,
}) });
const res = await taskCenterRevokeExcelUploadApi(param.value) const res = await taskCenterRevokeExcelUploadApi(param.value);
if (res.code === 20000) { if (res.code === 20000) {
message.success('操作成功') message.success('操作成功');
getList() getList();
} else { } else {
message.error(res.message) message.error(res.message);
} }
} };
const getList = async () => { const getList = async () => {
listLoading.value = true listLoading.value = true;
const res = await taskCenterQueryListApi({type:0}) const res = await taskCenterQueryListApi({ type: 0 });
if (res.code === 20000) { if (res.code === 20000) {
list.value = res.data list.value = res.data;
} else { } else {
list.value = [] list.value = [];
} }
listLoading.value = false listLoading.value = false;
} };
</script> </script>
<template> <template>
...@@ -57,50 +60,60 @@ const getList = async () => { ...@@ -57,50 +60,60 @@ const getList = async () => {
style="margin-top: 15px" style="margin-top: 15px"
> >
<a-table-column title="操作时间" align="center" :width="100"> <a-table-column title="操作时间" align="center" :width="100">
<template v-slot="{record}"> <template #default="{ record }">
{{ record.createTime }} {{ record.createTime }}
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="类型" align="center" :width="100"> <a-table-column title="类型" align="center" :width="100">
<template v-slot="{record}"> <template #default="{ record }">
{{ record.type }} {{ record.type }}
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="状态" align="center" :width="100"> <a-table-column title="状态" align="center" :width="100">
<template v-slot="{record}"> <template #default="{ record }">
<p>{{ record.isRevoke ? '已撤销' : record.status == 0 ? '待进行':(record.status == 1 ? '进行中':'已完成') }}</p> <p>{{
record.isRevoke
? '已撤销'
: record.status == 0
? '待进行'
: record.status == 1
? '进行中'
: '已完成'
}}</p>
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="操作数据" align="center" :width="100"> <a-table-column title="操作数据" align="center" :width="100">
<template v-slot="{record}"> <template #default="{ record }">
{{ record.sproductNumpec }} {{ record.sproductNumpec }}
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="成功数据" align="center" :width="100"> <a-table-column title="成功数据" align="center" :width="100">
<template v-slot="{record}"> <template #default="{ record }">
{{ record.successNum }} {{ record.successNum }}
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="错误数据" align="center" :width="100"> <a-table-column title="错误数据" align="center" :width="100">
<template v-slot="{record}"> <template #default="{ record }">
{{ record.failNum }} {{ record.failNum }}
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="操作人" align="center" :width="100"> <a-table-column title="操作人" align="center" :width="100">
<template v-slot="{record}"> <template #default="{ record }">
{{ record.createName }} {{ record.createName }}
</template> </template>
</a-table-column> </a-table-column>
<a-table-column title="操作" align="center" :width="200"> <a-table-column title="操作" align="center" :width="200">
<template v-slot="{record}"> <template #default="{ record }">
<Button type="link" @click="downLoad(record.fileUrl)">下载源文件</Button> <Button type="link" @click="downLoad(record.fileUrl)">下载源文件</Button>
<Button type="link" v-if="record.failNum" @click="downloadFail(record)">下载错误数据</Button> <Button type="link" v-if="record.failNum" @click="downloadFail(record)"
<Button type="link" v-if="record.status == 0 && !record.isRevoke" @click="cancel(record)">撤销</Button> >下载错误数据</Button
>
<Button type="link" v-if="record.status == 0 && !record.isRevoke" @click="cancel(record)"
>撤销</Button
>
</template> </template>
</a-table-column> </a-table-column>
</a-table> </a-table>
</template> </template>
<style lang="less" scoped> <style lang="less" scoped></style>
</style>
<script lang="ts" setup> <script lang="ts" setup>
import { ref } from 'vue'; import { ref } from 'vue';
import uploadTask from './components/upLoadTask.vue' import uploadTask from './components/upLoadTask.vue';
import downLoadTask from './components/downLoadTask.vue' import downLoadTask from './components/downLoadTask.vue';
import platformProBatch from './components/platformProBatch.vue' import platformProBatch from './components/platformProBatch.vue';
const activeKey = ref('1') const activeKey = ref('1');
const callback = (val) => { const callback = (val) => {
activeKey.value = val activeKey.value = val;
} };
</script> </script>
<template> <template>
<a-tabs @change="callback" v-model:activeKey="activeKey"> <a-tabs @change="callback" v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="上传任务数据"> <a-tab-pane key="1" tab="上传任务数据">
<uploadTask v-if="activeKey === '1'"></uploadTask> <uploadTask v-if="activeKey === '1'" />
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="2" tab="下载任务数据" force-render> <a-tab-pane key="2" tab="下载任务数据" force-render>
<downLoadTask v-if="activeKey === '2'"></downLoadTask> <downLoadTask v-if="activeKey === '2'" />
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="3" tab="平台商品批量"> <a-tab-pane key="3" tab="平台商品批量">
<platformProBatch v-if="activeKey === '3'"></platformProBatch> <platformProBatch v-if="activeKey === '3'" />
</a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>
</template> </template>
<style lang="less" scoped> <style lang="less" scoped></style>
</style>
...@@ -52,6 +52,13 @@ declare global { ...@@ -52,6 +52,13 @@ declare global {
declare interface WheelEvent { declare interface WheelEvent {
path?: EventTarget[]; path?: EventTarget[];
} }
interface ImportMeta {
env: {
VITE_GLOB_API_URL?: string;
};
}
interface ImportMetaEnv extends ViteEnv { interface ImportMetaEnv extends ViteEnv {
__: unknown; __: unknown;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment