feat(配置管理): 添加服务器主机地址配置功能

- 在ConfigDTO中新增serverHost字段用于存储服务器主机地址
- 创建sysConfigStore管理服务器主机地址状态
- 在App.vue初始化时获取并设置服务器主机地址
- 修改所有硬编码的URL为使用配置的serverHost
This commit is contained in:
dzq 2025-09-19 10:26:04 +08:00
parent e35e88d0d8
commit f7677f136a
6 changed files with 41 additions and 6 deletions

View File

@ -4,12 +4,17 @@ import { ElConfigProvider } from "element-plus";
import zhCn from "element-plus/lib/locale/lang/zh-cn"; import zhCn from "element-plus/lib/locale/lang/zh-cn";
import { ReDialog } from "@/components/ReDialog"; import { ReDialog } from "@/components/ReDialog";
import { useBtnPermissionStore } from "@/store/modules/btnPermission"; import { useBtnPermissionStore } from "@/store/modules/btnPermission";
import { useSysConfigStoreHook } from "./store/modules/sysConfig";
import { getConfig } from "./api/common/login";
const currentLocale = computed(() => zhCn); const currentLocale = computed(() => zhCn);
const btnPermissionStore = useBtnPermissionStore(); const btnPermissionStore = useBtnPermissionStore();
const sysConfigStore = useSysConfigStoreHook();
onMounted(async () => { onMounted(async () => {
await btnPermissionStore.fetchPermissions(); await btnPermissionStore.fetchPermissions();
const config : any = await getConfig();
sysConfigStore.setServerHost(config.serverHost ? config.serverHost : config.data.serverHost);
}) })
</script> </script>

View File

@ -12,6 +12,10 @@ export type ConfigDTO = {
isCaptchaOn: boolean; isCaptchaOn: boolean;
/** 系统字典配置(下拉选项之类的) */ /** 系统字典配置(下拉选项之类的) */
dictionary: Map<String, Array<DictionaryData>>; dictionary: Map<String, Array<DictionaryData>>;
/**
*
*/
serverHost: string;
}; };
export type LoginByPasswordDTO = { export type LoginByPasswordDTO = {

View File

@ -5,7 +5,7 @@
<IconifyIconOffline :icon="Iphone" /> <IconifyIconOffline :icon="Iphone" />
</el-icon> </el-icon>
<div v-if="showQr" class="qr-popover"> <div v-if="showQr" class="qr-popover">
<ReQrcode text="http://wxshop.ab98.cn/shop-api/api/shop/wechatAuth" :options="{ width: 200 }" /> <ReQrcode :text="`${sysConfigStore.serverHost}/shop-api/api/shop/wechatAuth`" :options="{ width: 200 }" />
<div class="qr-tip">微信扫码访问</div> <div class="qr-tip">微信扫码访问</div>
<el-button class="copy-btn" type="primary" size="small" @click="copyLink"> <el-button class="copy-btn" type="primary" size="small" @click="copyLink">
复制链接 复制链接
@ -21,11 +21,13 @@ import { ElMessage } from 'element-plus'
import ReQrcode from '@/components/ReQrcode' import ReQrcode from '@/components/ReQrcode'
import Iphone from "@iconify-icons/ep/iphone"; import Iphone from "@iconify-icons/ep/iphone";
import { copyTextToClipboard } from "@pureadmin/utils"; import { copyTextToClipboard } from "@pureadmin/utils";
import { useSysConfigStoreHook } from "@/store/modules/sysConfig";
const showQr = ref(false) const showQr = ref(false)
const sysConfigStore = useSysConfigStoreHook();
const copyLink = () => { const copyLink = () => {
const success = copyTextToClipboard('http://wxshop.ab98.cn/shop-api/api/shop/wechatAuth'); const success = copyTextToClipboard(`${sysConfigStore.serverHost}/shop-api/api/shop/wechatAuth`);
success ? ElMessage.success('链接复制成功') : ElMessage.error('复制失败,请手动复制'); success ? ElMessage.success('链接复制成功') : ElMessage.error('复制失败,请手动复制');
} }
</script> </script>

View File

@ -0,0 +1,20 @@
import { defineStore } from "pinia";
import { ref } from "vue";
import { store } from "@/store";
export const useSysConfigStore = defineStore("sys-config", () => {
const serverHost = ref("");
const setServerHost = (host: string) => {
serverHost.value = host;
}
return {
serverHost,
setServerHost
};
});
export function useSysConfigStoreHook() {
return useSysConfigStore(store);
}

View File

@ -14,12 +14,14 @@ import ShopFormModal from "./shop-form-modal.vue";
import ReQrcode from "@/components/ReQrcode"; import ReQrcode from "@/components/ReQrcode";
import { copyTextToClipboard } from "@pureadmin/utils"; import { copyTextToClipboard } from "@pureadmin/utils";
import { useWxStore } from "@/store/modules/wx"; import { useWxStore } from "@/store/modules/wx";
import { useSysConfigStoreHook } from "@/store/modules/sysConfig";
defineOptions({ defineOptions({
name: "Shop" name: "Shop"
}); });
const wxStore = useWxStore(); const wxStore = useWxStore();
const sysConfigStore = useSysConfigStoreHook();
const formRef = ref(); const formRef = ref();
const tableRef = ref(); const tableRef = ref();
const modalVisible = ref(false); const modalVisible = ref(false);
@ -129,7 +131,7 @@ const showQrCode = (shopId: number) => {
}; };
const copyLink = () => { const copyLink = () => {
const url = `http://wxshop.ab98.cn/shop-api/api/shop/wechatAuth?shopId=${currentShopId.value}`; const url = `${sysConfigStore.serverHost}/shop-api/api/shop/wechatAuth?shopId=${currentShopId.value}`;
const success = copyTextToClipboard(url); const success = copyTextToClipboard(url);
success ? ElMessage.success('链接复制成功') : ElMessage.error('复制失败,请手动复制'); success ? ElMessage.success('链接复制成功') : ElMessage.error('复制失败,请手动复制');
}; };
@ -198,7 +200,7 @@ getList();
@refresh="handleRefresh" /> @refresh="handleRefresh" />
<el-dialog v-model="qrVisible" title="微信扫码访问" width="300px"> <el-dialog v-model="qrVisible" title="微信扫码访问" width="300px">
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<ReQrcode :text="`http://wxshop.ab98.cn/shop-api/api/shop/wechatAuth?shopId=${currentShopId}`" <ReQrcode :text="`${sysConfigStore.serverHost}/shop-api/api/shop/wechatAuth?shopId=${currentShopId}`"
:options="{ width: 200 }" /> :options="{ width: 200 }" />
<div class="mt-2 text-sm text-gray-500">微信扫码访问</div> <div class="mt-2 text-sm text-gray-500">微信扫码访问</div>
<el-button class="mt-2" type="primary" size="small" @click="copyLink"> <el-button class="mt-2" type="primary" size="small" @click="copyLink">

View File

@ -5,6 +5,7 @@ import { paymentMethodOptions, modeToPaymentMethodMap } from "@/utils/maps/payme
import { addShop, updateShop, ShopDTO, UpdateShopCommand, AddShopCommand } from "@/api/shop/shop"; import { addShop, updateShop, ShopDTO, UpdateShopCommand, AddShopCommand } from "@/api/shop/shop";
import { useWxStore } from "@/store/modules/wx"; import { useWxStore } from "@/store/modules/wx";
import Upload from "@iconify-icons/ep/upload"; import Upload from "@iconify-icons/ep/upload";
import { useSysConfigStoreHook } from "@/store/modules/sysConfig";
import ReQrcode from "@/components/ReQrcode"; import ReQrcode from "@/components/ReQrcode";
import { copyTextToClipboard } from "@pureadmin/utils"; import { copyTextToClipboard } from "@pureadmin/utils";
const { VITE_APP_BASE_API } = import.meta.env; const { VITE_APP_BASE_API } = import.meta.env;
@ -23,6 +24,7 @@ const props = defineProps({
const emit = defineEmits(["update:visible", "refresh"]); const emit = defineEmits(["update:visible", "refresh"]);
const wxStore = useWxStore(); const wxStore = useWxStore();
const sysConfigStore = useSysConfigStoreHook();
const formRef = ref(); const formRef = ref();
const formData = ref<UpdateShopCommand>({ const formData = ref<UpdateShopCommand>({
@ -128,7 +130,7 @@ const copyLink = () => {
ElMessage.warning("店铺ID不存在无法复制链接"); ElMessage.warning("店铺ID不存在无法复制链接");
return; return;
} }
const url = `http://wxshop.ab98.cn/shop-api/api/shop/wechatAuth?shopId=${formData.value.shopId}`; const url = `${sysConfigStore.serverHost}/shop-api/api/shop/wechatAuth?shopId=${formData.value.shopId}`;
const success = copyTextToClipboard(url); const success = copyTextToClipboard(url);
success ? ElMessage.success('链接复制成功') : ElMessage.error('复制失败,请手动复制'); success ? ElMessage.success('链接复制成功') : ElMessage.error('复制失败,请手动复制');
}; };
@ -197,7 +199,7 @@ const copyLink = () => {
</el-form-item> </el-form-item>
<el-form-item label="二维码"> <el-form-item label="二维码">
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<ReQrcode :text="`http://wxshop.ab98.cn/shop-api/api/shop/wechatAuth?shopId=${formData.shopId}`" <ReQrcode :text="`${sysConfigStore.serverHost}/shop-api/api/shop/wechatAuth?shopId=${formData.shopId}`"
:options="{ width: 150 }" :width="150"/> :options="{ width: 150 }" :width="150"/>
<el-button type="primary" size="small" @click="copyLink" style="margin-left: 10px;"> <el-button type="primary" size="small" @click="copyLink" style="margin-left: 10px;">
复制链接 复制链接