This commit is contained in:
yuhawu 2025-08-25 09:48:12 +08:00
parent 830e78e376
commit 263a27c6a4
17 changed files with 2049 additions and 2034 deletions

View File

@ -14,4 +14,7 @@ export { userApi } from './modules/user'
export { userLoginApi } from './modules/userLogin' export { userLoginApi } from './modules/userLogin'
export { priceTemplateApi } from './modules/priceTemplate' export { priceTemplateApi } from './modules/priceTemplate'
export { filterSetApi } from './modules/filterSet' export { filterSetApi } from './modules/filterSet'
export { shopGoodsPublishedApi } from './modules/shopGoodsPublished' export { shopGoodsPublishedApi } from './modules/shopGoodsPublished'
// 导出店铺订单接口
export * as shopOrderApi from './modules/shopOrder'

View File

@ -28,6 +28,11 @@ export function setupResponseInterceptors(instance) {
return response; return response;
} }
// 如果是获取图片接口,直接返回字符串数据
if (config.url && config.url.includes('/zhishu/image/getImage')) {
return data;
}
// 对于普通的JSON响应进行业务逻辑检查 // 对于普通的JSON响应进行业务逻辑检查
if (data.code != 200) { if (data.code != 200) {
const error = new Error(data.message || '业务逻辑错误'); const error = new Error(data.message || '业务逻辑错误');

View File

@ -4,7 +4,7 @@ const ImageApi = {
/** /**
* 获取商品标准类目接口 * 获取商品标准类目接口
*/ */
getImage: (data) => instance.get('/zhishu/image/getImage', data), getImage: (params) => instance.get('/zhishu/image/getImage', { params }),
/** /**
* 用户上传图片接口 * 用户上传图片接口
@ -22,4 +22,4 @@ const ImageApi = {
} }
// 导出 pdd API 对象 // 导出 pdd API 对象
export { ImageApi }; export { ImageApi };

View File

@ -65,8 +65,14 @@ const depotApi = {
* @param {Number|String} id - 二级货架ID * @param {Number|String} id - 二级货架ID
* @returns {Promise} - 请求Promise * @returns {Promise} - 请求Promise
*/ */
getFreightByShelveId: (id) => instance.get(`/depot/freight/${id}`) getFreightByShelveId: (id) => instance.get(`/depot/freight/${id}`),
/**
* 获取仓库名称列表
* @returns {Promise} - 请求Promise
*/
getDepotNameList: () => instance.get('/depot/nameList')
} }
// 导出模块 // 导出模块
export { depotApi } export { depotApi }

View File

@ -9,9 +9,15 @@ export const getProvinces = () => {
return instance.get('/district/provinces'); return instance.get('/district/provinces');
}; };
// 获取运费信息
export const getFreInfo = (templateId) => {
return instance.get(`/district/freInfo/${templateId}`);
};
// 为了向后兼容,也导出整个对象 // 为了向后兼容,也导出整个对象
export const districtApi = { export const districtApi = {
getProvinces, getProvinces,
getFreInfo
}; };
export default districtApi; export default districtApi;

View File

@ -57,6 +57,11 @@ export const updateSyncOrderStatus = (id, isSynOrder) => {
}); });
}; };
// 加密URL方法
export const encrypUrlMenthod = (data) => {
return instance.post('/shop/encrypUrl', data);
};
// 为了向后兼容,也导出整个对象 // 为了向后兼容,也导出整个对象
export const shopApi = { export const shopApi = {
getShopList, getShopList,
@ -66,5 +71,6 @@ export const shopApi = {
updateShop, updateShop,
deleteShop, deleteShop,
batchDeleteShop, batchDeleteShop,
updateSyncOrderStatus updateSyncOrderStatus,
encrypUrlMenthod
}; };

View File

@ -92,8 +92,18 @@ const taskApi = {
// 中心图书接口 // 中心图书接口
centerBooks: (jsonStr) => instance.post('/task/centerBooks', `jsonStr=${jsonStr}`, { centerBooks: (jsonStr) => instance.post('/task/centerBooks', `jsonStr=${jsonStr}`, {
headers: { 'Content-Type': 'application/x-www-form-urlencoded' } headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}) }),
// 获取重复数据
getRepeatData: (shopId, pageNum, pageSize) => instance.get(`/task/getRepeatData?shopId=${shopId}&pageNum=${pageNum}&pageSize=${pageSize}`),
// 根据任务类型查询任务状态
selectTaskStatusByTaskType: (shopId, taskType) => instance.get(`/task/selectTaskStatusByTaskType?shopId=${shopId}&taskType=${taskType}`),
// 获取店铺任务总数
getShopTaskAllNum: (shopId, taskType) => instance.get(`/task/getShopTaskAllNum?shopId=${shopId}&taskType=${taskType}`),
}; };
// 导出模块 // 导出模块
export { taskApi }; export { taskApi };

View File

@ -1,10 +1,14 @@
import RefreshButton from './RefreshButton.vue' import RefreshButton from './RefreshButton.vue'
import ActionBar from './ActionBar.vue' import ActionBar from './ActionBar.vue'
import RightToolbar from './RightToolbar.vue'
import Pagination from './Pagination.vue'
// 全局组件列表 // 全局组件列表
const components = [ const components = [
RefreshButton, RefreshButton,
ActionBar ActionBar,
RightToolbar,
Pagination
] ]
// 全局注册方法 // 全局注册方法
@ -14,4 +18,4 @@ export default {
app.component(component.name || component.__name, component) app.component(component.name || component.__name, component)
}) })
} }
} }

View File

@ -79,6 +79,14 @@ const menuData = shallowRef([
{ {
title: '价格模板', title: '价格模板',
path: '/shop/priceTemplate' path: '/shop/priceTemplate'
},
{
title: '发布商品数据',
path: '/shop/shopPublishedData'
},,
{
title: '店铺商品',
path: '/shop/pddGoods'
} }
] ]
}, },
@ -111,6 +119,10 @@ const menuData = shallowRef([
title: '已发布书品管理', title: '已发布书品管理',
path: '/book/shopGoodsPublished' path: '/book/shopGoodsPublished'
// permission: 'book:shopGoodsPublished:view' // permission: 'book:shopGoodsPublished:view'
},
{
title: '书品导入任务列表',
path: '/book/excelTask'
} }
] ]
}, },
@ -130,6 +142,18 @@ const menuData = shallowRef([
} }
] ]
}, },
{
title: '订单中心',
path: '/order',
icon: Box,
children: [
{
title: '订单信息',
path: '/order/shopOrder'
//
}
]
},
{ {
title: '工具管理', title: '工具管理',
path: '/tools', path: '/tools',
@ -154,6 +178,10 @@ const menuData = shallowRef([
{ {
title: '违规列表', title: '违规列表',
path: '/examine/violation/list' path: '/examine/violation/list'
},
{
title: '图书审核管理',
path: '/bookAudit'
} }
] ]
}, },
@ -192,6 +220,16 @@ const menuData = shallowRef([
} }
] ]
}, },
{
title: '申请入驻',
path: '/audit',
children: [
{
title: '审核',
path: '/audit/audit',
}
]
},
{ {
title: '升级完整版', title: '升级完整版',
path: '/NewUser', path: '/NewUser',

View File

@ -82,6 +82,11 @@ const routes = [{
component: () => import('@/views/Examine/Violation/List.vue'), component: () => import('@/views/Examine/Violation/List.vue'),
meta: { title: '违规列表' } meta: { title: '违规列表' }
}, },
{
path: '/bookAudit',
component: () => import('@/views/bookAudit/index.vue'),
meta: { title: '图书审核管理' }
},
// 日志管理 // 日志管理
{ {
path: '/log/runningLog/list', path: '/log/runningLog/list',
@ -153,6 +158,31 @@ const routes = [{
path: '/purse/userRecharge', path: '/purse/userRecharge',
component: () => import('@/views/UserRecharge/index.vue'), component: () => import('@/views/UserRecharge/index.vue'),
meta: { title: '用户充值' } meta: { title: '用户充值' }
},
{
path: '/shop/shopPublishedData',
component: () => import('@/views/onlineProducts/index.vue'),
meta: { title: '发布商品数据' }
},
{
path: '/order/shopOrder',
component: () => import('@/views/shopOrder/index.vue'),
meta: { title: '订单信息' }
},
{
path: '/book/excelTask',
component: () => import('@/views/excelTask/index.vue'),
meta: { title: '书品导入任务列表' }
},
{
path: '/audit/audit',
component: () => import('@/views/Audit/index.vue'),
meta: { title: '审核' }
},
{
path: '/shop/pddGoods',
component: () => import('@/views/pddGoods/index.vue'),
meta: { title: '店铺商品' }
} }
] ]

View File

@ -175,7 +175,10 @@
</div> </div>
</template> </template>
<script setup name="ShopGoodsPublished"> <script setup>
defineOptions({
name: 'ShopGoodsPublished'
})
import { getShopGoodsPublishedList, deleteShopGoodsPublished } from '@/api/modules/shopGoodsPublished' import { getShopGoodsPublishedList, deleteShopGoodsPublished } from '@/api/modules/shopGoodsPublished'
import { getListShop } from '@/api/modules/shop' import { getListShop } from '@/api/modules/shop'
import { ref, reactive, onMounted } from 'vue' import { ref, reactive, onMounted } from 'vue'

View File

@ -248,7 +248,10 @@
</div> </div>
</template> </template>
<script setup name="Task"> <script setup>
defineOptions({
name: 'Task'
})
import { taskApi } from '@/api/modules/task.js'; import { taskApi } from '@/api/modules/task.js';
import { pddApi } from '@/api/modules/pdd.js'; import { pddApi } from '@/api/modules/pdd.js';
import { shopApi } from '@/api/modules/shop.js'; import { shopApi } from '@/api/modules/shop.js';

View File

@ -173,7 +173,10 @@
</div> </div>
</template> </template>
<script setup name="UserRecharge"> <script setup>
defineOptions({
name: 'UserRecharge'
})
import { ref, reactive, onMounted, getCurrentInstance, toRefs } from 'vue' import { ref, reactive, onMounted, getCurrentInstance, toRefs } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import { userRechargeApi } from '@/api/modules/userRecharge.js' import { userRechargeApi } from '@/api/modules/userRecharge.js'

View File

@ -237,7 +237,10 @@
</template> </template>
<script setup name="Logistics"> <script setup>
defineOptions({
name: 'Logistics'
})
import { ref, reactive, computed, onMounted, toRefs } from 'vue' import { ref, reactive, computed, onMounted, toRefs } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'

View File

@ -1,122 +1,135 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<transition enter-active-class="animate__animated animate__fadeInDown" leave-active-class="animate__animated animate__fadeOutUp"> <transition enter-active-class="animate__animated animate__fadeInDown"
<div v-show="showSearch" class="mb-[10px]"> leave-active-class="animate__animated animate__fadeOutUp">
<el-card shadow="hover"> <div v-show="showSearch" class="mb-[10px]">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-card shadow="hover">
<el-form-item label="店铺" prop="shopId"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-select v-model="queryParams.shopId" placeholder="请选择店铺"> <el-form-item label="店铺" prop="shopId">
<el-option v-for="item in shopList" :key="item.value" :label="item.label" :value="item.value"></el-option> <el-select v-model="queryParams.shopId" placeholder="请选择店铺">
</el-select> <el-option v-for="item in shopList" :key="item.value" :label="item.label"
</el-form-item> :value="item.value"></el-option>
<el-form-item label="商家编码" prop="itemNumber"> </el-select>
<el-input v-model="queryParams.itemNumber" placeholder="请输入编码" clearable @keyup.enter="handleQuery" /> </el-form-item>
</el-form-item> <el-form-item label="商家编码" prop="itemNumber">
<el-form-item> <el-input v-model="queryParams.itemNumber" placeholder="请输入编码" clearable @keyup.enter="handleQuery" />
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> </el-form-item>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-form-item>
</el-form-item> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
</el-form> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-card> </el-form-item>
</div> </el-form>
</transition> </el-card>
</div>
<el-card shadow="never"> </transition>
<template #header>
<el-row :gutter="10" class="mb8"> <el-card shadow="never">
<el-col :span="1.5"> <template #header>
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['zhishu:shopGoodsPublished:remove']">删除</el-button> <el-row :gutter="10" class="mb8">
</el-col> <el-col :span="1.5">
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
</el-row> v-hasPermi="['zhishu:shopGoodsPublished:remove']">删除</el-button>
</template> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
<el-table v-loading="loading" :data="shopGoodsPublishedList" @selection-change="handleSelectionChange"> </el-row>
<el-table-column type="selection" width="55" align="center" /> </template>
<el-table-column label="图示" align="center" prop="bookPic" :show-overflow-tooltip="true">
<template #default="{ row }"> <el-table v-loading="loading" :data="shopGoodsPublishedList" @selection-change="handleSelectionChange">
<el-image <el-table-column type="selection" width="55" align="center" />
style="width: 50px;height: 50px" <el-table-column label="图示" align="center" prop="bookPic" :show-overflow-tooltip="true">
:src="row.bookPic" <template #default="{ row }">
fit="scale-down" <el-image style="width: 50px;height: 50px" :src="row.bookPic" fit="scale-down"
:preview-src-list="[row.bookPic]" :preview-src-list="[row.bookPic]" preview-teleported>
preview-teleported <template #error>
> <div class="image-slot">
<template #error> 暂无
<div class="image-slot"> </div>
暂无 </template>
</div> </el-image>
</template> </template>
</el-image> </el-table-column>
</template> <el-table-column label="商家编码" align="left" prop="itemNumber" />
</el-table-column>
<el-table-column label="商家编码" align="left" prop="itemNumber"/> <el-table-column label="线上商品名称" align="left" prop="goodsName" :show-overflow-tooltip="true">
<template #default="{ row }">
<el-table-column label="线上商品名称" align="left" prop="goodsName" :show-overflow-tooltip="true"> <div class="truncate-cell">
<template #default="{ row }"> <el-link v-if="row.shopType === 1" type="primary"
<div class="truncate-cell"> :href="`https://mobile.yangkeduo.com/goods.html?goods_id=${row.onlineId}`" target="_blank"
<el-link :underline="false">
v-if="row.shopType === 1" {{ row.goodsName }}
type="primary" </el-link>
:href="`https://mobile.yangkeduo.com/goods.html?goods_id=${row.onlineId}`"
target="_blank" <el-link v-else-if="row.shopType === 2" type="primary"
:underline="false" :href="`https://book.kongfz.com/${row.mallId}/${row.onlineId}`" target="_blank" :underline="false">
> {{ row.goodsName }}
{{ row.goodsName }} </el-link>
</el-link> </div>
</template>
<el-link </el-table-column>
v-else-if="row.shopType === 2"
type="primary" <el-table-column label="店铺" align="left" prop="shopName" />
:href="`https://book.kongfz.com/${row.mallId}/${row.onlineId}`"
target="_blank" <el-table-column label="线上商品/规格ID" align="left" prop="onlineId" />
:underline="false"
> <el-table-column label="状态" align="left" prop="status">
{{ row.goodsName }} <template #default="{ row }">
</el-link> <span v-if="row.status == 0">在售</span>
</div> <span v-else>未售</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="店铺" align="left" prop="shopName"/> </el-table>
<el-table-column label="线上商品/规格ID" align="left" prop="onlineId"/> <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
<el-table-column label="状态" align="left" prop="status"> </el-card>
<template #default="{ row }">
<span v-if="row.status==0">在售</span> </div>
<span v-else>未售</span> </template>
</template>
</el-table-column> <script setup>
defineOptions({
</el-table> name: 'ShopGoodsPublished'
})
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> // import { getShopGoodsPublishedList, deleteShopGoodsPublished } from '@/api/modules/shopGoodsPublished';
</el-card> import { shopGoodsPublishedApi } from '@/api/modules/shopGoodsPublished';
import { getListShop } from '@/api/modules/shop';
</div> import { ref, reactive, toRefs, onMounted } from 'vue';
</template> import { ElMessage, ElMessageBox } from 'element-plus';
<script setup name="ShopGoodsPublished"> //
import { getShopGoodsPublishedList, deleteShopGoodsPublished } from '@/api/modules/shopGoodsPublished'; const shopGoodsPublishedList = ref([]);
import { getListShop } from '@/api/zhishu/shop'; const loading = ref(true);
import { ref, reactive, toRefs, onMounted } from 'vue'; const showSearch = ref(true);
import { depotNameList } from '@/api/zhishu/shelves'; const ids = ref([]);
import { ElMessage, ElMessageBox } from 'element-plus'; const single = ref(true);
const multiple = ref(true);
// const total = ref(0);
const shopGoodsPublishedList = ref([]);
const loading = ref(true); const queryFormRef = ref();
const showSearch = ref(true);
const ids = ref([]); const initFormData = {
const single = ref(true); id: undefined,
const multiple = ref(true); shopGoodsId: undefined,
const total = ref(0); shopId: undefined,
goodsName: undefined,
const queryFormRef = ref(); shopName: undefined,
platformId: undefined,
const initFormData = { status: undefined,
id: undefined, itemNumber: undefined,
bookPic: undefined,
isbn: undefined,
conditionCode: undefined,
price: undefined,
createTime: undefined,
updateTime: undefined
}
const data = reactive({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
shopGoodsId: undefined, shopGoodsId: undefined,
shopId: undefined, shopId: undefined,
goodsName: undefined, goodsName: undefined,
@ -129,188 +142,148 @@
conditionCode: undefined, conditionCode: undefined,
price: undefined, price: undefined,
createTime: undefined, createTime: undefined,
updateTime: undefined updateTime: undefined,
depotId: undefined,
params: {}
},
rules: {
id: [
{ required: true, message: "主键不能为空", trigger: "blur" }
],
} }
});
const data = reactive({
form: { ...initFormData }, const { queryParams, form, rules } = toRefs(data);
queryParams: {
pageNum: 1, //
pageSize: 10, const getList = async () => {
shopGoodsId: undefined, loading.value = true;
shopId: undefined, try {
goodsName: undefined, const res = await shopGoodsPublishedApi.getShopGoodsPublishedList(queryParams.value);
shopName: undefined, shopGoodsPublishedList.value = res.data.list|| [];
platformId: undefined, total.value = res.data.total || res.total || 0;
status: undefined, } catch (error) {
itemNumber: undefined, console.error('获取列表失败:', error);
bookPic: undefined, ElMessage.error('获取列表失败');
isbn: undefined, } finally {
conditionCode: undefined, loading.value = false;
price: undefined, }
createTime: undefined, }
updateTime: undefined,
depotId: undefined, const conditionCodeTypes = [
params: {} { value: '1', label: '一品' },
}, { value: '2', label: '二品' },
rules: { { value: '3', label: '三品' },
id: [ { value: '4', label: '四品' },
{ required: true, message: "主键不能为空", trigger: "blur" } { value: '5', label: '五品' },
], { value: '6', label: '六品' },
{ value: '6.5', label: '六五品' },
{ value: '7', label: '七品' },
{ value: '7.5', label: '七五品' },
{ value: '8', label: '八品' },
{ value: '8.5', label: '八五品' },
{ value: '9', label: '九品' },
{ value: '9.5', label: '九五品' },
{ value: '10', label: '全新' }
];
//
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
//
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
//
const handleSelectionChange = (selection) => {
ids.value = selection.map(item => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
//
const handleDelete = async (row) => {
const _ids = row?.id || ids.value;
try {
await ElMessageBox.confirm('是否确认删除记录发布数据编号为"' + _ids + '"的数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
});
await shopGoodsPublishedApi.deleteShopGoodsPublished(_ids);
ElMessage.success("删除成功");
await getList();
} catch (error) {
if (error !== 'cancel') {
console.error('删除失败:', error);
ElMessage.error('删除失败');
} }
}); } finally {
loading.value = false;
const { queryParams, form, rules } = toRefs(data); }
}
//
const getList = async () => { //
loading.value = true; const shopList = ref([]);
try {
const res = await getShopGoodsPublishedList(queryParams.value); const getShopList = async () => {
shopGoodsPublishedList.value = res.data.rows || res.rows || []; try {
total.value = res.data.total || res.total || 0; const res = await getListShop();
} catch (error) { const data = res.data || res;
console.error('获取列表失败:', error);
ElMessage.error('获取列表失败'); if (!data || data.length === 0) {
} finally { shopList.value = [];
loading.value = false; } else {
shopList.value = data.map(item => ({
value: item.id,
label: item.shopName
}));
} }
} catch (error) {
console.error('获取店铺列表失败:', error);
ElMessage.error('获取店铺列表失败');
} }
}
const depotList = ref([]);
const selectedId = ref(null); onMounted(() => {
getList();
const handleDepotChange = (val) => { // getShopList();
queryParams.value.depotId = val?.id || null; });
} </script>
const loadData = async () => { <style scoped>
loading.value = true; /* 调整表头字体大小 */
try { :deep(.el-table__header) th .cell {
const res = await depotNameList(); font-size: 18px;
depotList.value = res.rows || []; font-weight: bold;
} catch (error) { }
console.error('加载数据失败:', error);
} finally { /* 调整表格内容字体大小 */
loading.value = false; .el-table {
} font-size: 17px !important;
} }
const conditionCodeTypes = [ .truncate-cell {
{ value: '1', label: '一品' }, max-width: 200px;
{ value: '2', label: '二品' }, overflow: hidden;
{ value: '3', label: '三品' }, text-overflow: ellipsis;
{ value: '4', label: '四品' }, white-space: nowrap;
{ value: '5', label: '五品' }, }
{ value: '6', label: '六品' },
{ value: '6.5', label: '六五品' }, .image-slot {
{ value: '7', label: '七品' }, display: flex;
{ value: '7.5', label: '七五品' }, justify-content: center;
{ value: '8', label: '八品' }, align-items: center;
{ value: '8.5', label: '八五品' }, width: 100%;
{ value: '9', label: '九品' }, height: 100%;
{ value: '9.5', label: '九五品' }, background: #f5f7fa;
{ value: '10', label: '全新' } color: #909399;
]; font-size: 12px;
}
// </style>
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
//
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
//
const handleSelectionChange = (selection) => {
ids.value = selection.map(item => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
//
const handleDelete = async (row) => {
const _ids = row?.id || ids.value;
try {
await ElMessageBox.confirm('是否确认删除记录发布数据编号为"' + _ids + '"的数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
});
await deleteShopGoodsPublished(_ids);
ElMessage.success("删除成功");
await getList();
} catch (error) {
if (error !== 'cancel') {
console.error('删除失败:', error);
ElMessage.error('删除失败');
}
} finally {
loading.value = false;
}
}
//
const shopList = ref([]);
const getShopList = async () => {
try {
const res = await getListShop();
const data = res.data || res;
if (!data || data.length === 0) {
shopList.value = [];
} else {
shopList.value = data.map(item => ({
value: item.id,
label: item.shopName
}));
}
} catch (error) {
console.error('获取店铺列表失败:', error);
ElMessage.error('获取店铺列表失败');
}
}
onMounted(() => {
getList();
loadData();
getShopList();
});
</script>
<style scoped>
/* 调整表头字体大小 */
:deep(.el-table__header) th .cell {
font-size: 18px;
font-weight: bold;
}
/* 调整表格内容字体大小 */
.el-table {
font-size: 17px !important;
}
.truncate-cell {
max-width: 200px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.image-slot {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
background: #f5f7fa;
color: #909399;
font-size: 12px;
}
</style>

View File

@ -74,7 +74,7 @@
<div class="login-url"> <div class="login-url">
<p class="url-label">后台管理系统地址</p> <p class="url-label">后台管理系统地址</p>
<div class="url-box"> <div class="url-box">
<span class="url-text">https://erp.buzhiyushu.cn/</span> <a class="url-text" href="https://erp.buzhiyushu.cn/" target="_blank" rel="noopener noreferrer">https://erp.buzhiyushu.cn/</a>
<el-button type="primary" size="small" @click="copyLoginUrl" class="copy-btn"> <el-button type="primary" size="small" @click="copyLoginUrl" class="copy-btn">
复制链接 复制链接
</el-button> </el-button>

File diff suppressed because it is too large Load Diff