diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index 0373277..8e9bd41 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -27,7 +27,12 @@
"Bash(curl -X POST http://localhost:3000/api/orders/1/pay -H \"Content-Type: application/json\" -H \"Authorization: Bearer test\" -d '{\"paymentMethod\":\"wechat\"}' -v)",
"Bash(curl -X POST http://localhost:3000/api/orders/1/pay -v)",
"Bash(xargs grep -l \"jwt\\\\|JWT\")",
- "Bash(xargs grep -l \"invite\")"
+ "Bash(xargs grep -l \"invite\")",
+ "Bash(curl -s -X POST http://localhost:3000/api/auth/login/phone -H \"Content-Type: application/json\" -d '{\"phone\":\"13800138000\",\"code\":\"123456\"}')",
+ "Bash(python3 -c \"import sys, json; data=json.load\\(sys.stdin\\); token=data['data']['accessToken']; import jwt; decoded=jwt.decode\\(token, options={'verify_signature': False}\\); print\\(f\\\\\"iat: {decoded['iat']}, exp: {decoded['exp']}, duration: {decoded['exp']-decoded['iat']} seconds \\({\\(decoded['exp']-decoded['iat']\\)/3600} hours\\)\\\\\"\\)\")",
+ "Bash(curl -s -X GET http://localhost:3000/api/orders -H \"Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxIiwicGhvbmUiOiIxMzgwMDEzODAwMCIsImlhdCI6MTc3ODM4MTc2NywiZXhwIjoxNzc4Mzg4OTY3fQ.-jcY69afC6O6CtKtOj6tRaoiknypwDfvpXYhpz95rVE\")",
+ "Bash(pnpm install *)",
+ "Bash(pnpm dev:mp-weixin)"
]
}
}
diff --git a/apps/miniapp/package.json b/apps/miniapp/package.json
index 3938317..50d0dca 100644
--- a/apps/miniapp/package.json
+++ b/apps/miniapp/package.json
@@ -42,7 +42,8 @@
"@dcloudio/vite-plugin-uni": "3.0.0-5000720260410001",
"@types/node": "^22.0.0",
"@vue/runtime-core": "^3.4.21",
- "sass": "^1.77.0",
+ "sass": "^1.83.0",
+ "sass-embedded": "^1.83.0",
"typescript": "^5.5.0",
"vite": "^5.2.8"
}
diff --git a/apps/miniapp/src/pages/seller/home.vue b/apps/miniapp/src/pages/seller/home.vue
index 5f40980..9cd5dc1 100644
--- a/apps/miniapp/src/pages/seller/home.vue
+++ b/apps/miniapp/src/pages/seller/home.vue
@@ -1,21 +1,53 @@
-
- 请先注册/登录商家账号
- 去注册/登录
+
+ 🏪
+ 欢迎成为商家
+ 注册商家账号,开启您的民宿事业
+
-
-
- {{ sellerStore.sellerInfo?.contactName }}
- {{ sellerStore.sellerInfo?.phone }}
-
- 创建店铺
- 完成店铺信息填写,提交审核后即可营业
- 创建店铺
- 退出商家账号
+
+
+ 👋
+ 你好,{{ sellerStore.sellerInfo?.contactName }}
+ {{ sellerStore.sellerInfo?.phone }}
+
+
+
+ 🏠
+ 创建您的店铺
+ 完成店铺信息填写,提交审核后即可开始营业
+
+
+
+ 1
+ 填写店铺信息
+
+
+
+ 2
+ 等待平台审核
+
+
+
+ 3
+ 开始营业
+
+
+
+
+
+
+
@@ -23,99 +55,171 @@
-
-
-
-
-
-
- {{ merchant.rejectReason }}
- 请修改店铺信息后重新提交审核
-
-
-
-
-
- 联系电话
- {{ merchant.phone }}
-
-
- 所在城市
- {{ merchant.province }} {{ merchant.city }} {{ merchant.district }}
-
-
- 详细地址
- {{ merchant.address }}
-
-
-
-
-
-
- 0
- 今日订单
-
-
- 0
- 在售房源
-
-
- 0
- 今日收入
-
-
- {{ merchant.rating }}
- 店铺评分
-
-
-
-
-
-
-
- 店铺信息审核中,暂不可修改
+
+
+
-
-
- 店铺已被冻结,请联系平台客服
+ {{ merchant.rejectReason }}
+ 请修改店铺信息后重新提交审核
+
+
+
+
+
+ 您的店铺信息正在审核中,请耐心等待
+ 审核通过后即可开始营业
+
+
+
+
+
+ 您的店铺已被平台冻结
+ 如有疑问,请联系平台客服
+
+
+
+
+
+
+
+
+
+
+ 0
+ 今日订单
+
+
+
+
+
+ 0
+ 在售房源
+
+
+
+
+
+ ¥0
+ 今日收入
+
+
+
+
+
+ {{ merchant.rating || '5.0' }}
+ 店铺评分
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 联系电话
+ {{ merchant.phone }}
+
+
+
+
+
+
+
+ 所在城市
+ {{ merchant.province }} {{ merchant.city }} {{ merchant.district }}
+
+
+
+
+
+
+
+ 详细地址
+ {{ merchant.address }}
+
+
-
-async function handleConfirm(id: number) {
- uni.showModal({
- title: '提示',
- content: '确认接单?',
- success: async (res) => {
- if (res.confirm) {
- uni.showLoading({ title: '处理中...' });
- try {
- await confirmOrder(id);
- uni.hideLoading();
- uni.showToast({ title: '已确认', icon: 'success' });
- fetchOrders(true);
- } catch (e: any) {
- uni.hideLoading();
- uni.showToast({ title: e.message || '操作失败', icon: 'none' });
- }
- }
- },
- });
-}
-
-function handleReject(id: number) {
- rejectOrderId.value = id;
- rejectReason.value = '';
- showRejectModal.value = true;
-}
-
-function closeRejectModal() {
- showRejectModal.value = false;
-}
-
-async function submitReject() {
- if (!rejectReason.value.trim()) {
- uni.showToast({ title: '请输入拒绝原因', icon: 'none' });
+function handleContact(order: any) {
+ if (!order.userPhone) {
+ uni.showToast({ title: '客户未留联系方式', icon: 'none' });
return;
}
- uni.showLoading({ title: '处理中...' });
- try {
- await rejectOrder(rejectOrderId.value, rejectReason.value);
- uni.hideLoading();
- uni.showToast({ title: '已拒绝', icon: 'success' });
- showRejectModal.value = false;
- fetchOrders(true);
- } catch (e: any) {
- uni.hideLoading();
- uni.showToast({ title: e.message || '操作失败', icon: 'none' });
- }
-}
-
-async function handleCheckin(id: number) {
- uni.showModal({
- title: '提示',
- content: '确认办理入住?',
- success: async (res) => {
- if (res.confirm) {
- uni.showLoading({ title: '处理中...' });
- try {
- await checkinOrder(id);
- uni.hideLoading();
- uni.showToast({ title: '已入住', icon: 'success' });
- fetchOrders(true);
- } catch (e: any) {
- uni.hideLoading();
- uni.showToast({ title: e.message || '操作失败', icon: 'none' });
- }
+ uni.showActionSheet({
+ itemList: [`拨打电话:${order.userPhone}`],
+ success: (res) => {
+ if (res.tapIndex === 0) {
+ uni.makePhoneCall({
+ phoneNumber: order.userPhone,
+ });
}
},
});
}
-
-onMounted(() => {
- fetchOrders(true);
-});
\ No newline at end of file
diff --git a/apps/miniapp/src/pages/seller/register.vue b/apps/miniapp/src/pages/seller/register.vue
index 5f5d94d..a0086e6 100644
--- a/apps/miniapp/src/pages/seller/register.vue
+++ b/apps/miniapp/src/pages/seller/register.vue
@@ -1,169 +1,236 @@
-
-
-
-
-
-
-
- {{ mode === 'register' ? '欢迎入驻品住会' : '欢迎回来' }}
- {{ mode === 'register' ? '开通店铺,发布房源,开始接单' : '登录商家中心,管理您的店铺' }}
+
+
+
-
-
+
+
+
+
+
+ 品住会商家中心
+ {{ modeConfig.slogan }}
+
+
+
+
+
+
+
+ 注册
+
+
+
+ 登录
+
+
+
+
-
-
- 手机号
-
-
-
-
- 密码
-
-
-
-
- 验证码
-
+
+
+
+
+
+ 手机号
+
+
+
+
+
+
+ 登录密码
+
+
+
+
+
+
+
+
+
+
+ 短信验证码
+
+
-
- {{ registerCountdown > 0 ? `${registerCountdown}s` : '获取验证码' }}
+
+
+ {{ registerCountdown > 0 ? `${registerCountdown}秒` : '获取验证码' }}
+
+
+
+
+
+ 联系人姓名
+
+
+
+
+
+
+
+ 邮箱(选填)
+
+
+
-
- 联系人姓名
-
-
-
-
- 邮箱
-
-
-
-
-
+
+
-
-
-
-
- 手机号
-
-
-
-
- 验证码
-
+
+
+
+
+
+ 手机号
+
+
+
+
+
+
+ 短信验证码
+
+
-
- {{ loginCountdown > 0 ? `${loginCountdown}s` : '获取验证码' }}
+
+
+ {{ loginCountdown > 0 ? `${loginCountdown}秒` : '获取验证码' }}
+
-
-
+
+
-
-
+
+
我已阅读并同意
- 《商家服务协议》
- 和
- 《隐私政策》
+ 《商家服务协议》
+ 及
+ 《隐私政策》
-
- {{ loading ? '登录中...' : '立即登录' }}
+
+
+ {{ loading ? '登录中...' : '立即登录' }}
+
-
- 没有账号?
- 立即注册
+
+
@@ -171,25 +238,16 @@
\ No newline at end of file
diff --git a/apps/miniapp/src/pages/seller/rooms.vue b/apps/miniapp/src/pages/seller/rooms.vue
index 428c49d..6b659f6 100644
--- a/apps/miniapp/src/pages/seller/rooms.vue
+++ b/apps/miniapp/src/pages/seller/rooms.vue
@@ -1,70 +1,187 @@
-
-
-
- 全部
- 在售
- 已下架
+
+
+
+
+
+
+
+
+
+ {{ filter.label }}
+ {{ filter.badge }}
+
+
+
-
-
-
-
-
-
- {{ room.name }}
-
- {{ typeLabels[room.type] }}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ room.status === 'on_sale' ? '在售' : '已下架' }}
-
-
-
-
-
-
+
+
+ 审核中
-
- 拒绝原因:{{ room.auditRejectReason }}
+
+
+ 已拒绝
-
- 日历
- 下架
- 上架
-
-
-
-
- 没有更多了
-
+
+
+
+
+
+
+ ¥
+ {{ room.price }}
+ /晚
+
+
+
+ {{ room.rating.toFixed(1) }}
+
+
+
+
+
+
+ {{ room.auditRejectReason }}
+
+
+
+
+
+
+ 日历
+
+
+
+ 编辑
+
+
+
+ 下架
+
+
+
+ 上架
+
+
+
+
+
+
+
+
+
+
+ 暂无房源
+ {{ getEmptyText() }}
+
+
+ 立即添加房源
+
+
+
+
+
+
+
+
+
+
+
+ 没有更多房源了
+
+
-
-
- + 添加房源
-
+
+
+
+
diff --git a/apps/miniapp/src/pages/seller/shop-edit.vue b/apps/miniapp/src/pages/seller/shop-edit.vue
index 6e2c997..bac04b0 100644
--- a/apps/miniapp/src/pages/seller/shop-edit.vue
+++ b/apps/miniapp/src/pages/seller/shop-edit.vue
@@ -1,6 +1,9 @@
+
+ 基本信息
+
店铺名称
@@ -48,45 +51,6 @@
/>
-
-
- 营业执照
-
-
-
- ×
-
-
- +
- 上传营业执照
-
-
-
-
-
-
- 营业执照编号
-
-
-
-
-
- 法人姓名
-
-
-
店铺描述
@@ -97,6 +61,326 @@
maxlength="500"
/>
+
+
+
+ 门店营业执照
+
+
+
+ ×
+
+
+ +
+ 上传门店营业执照
+
+
+
+
+
+
+
+ 酒店照片
+ 用于店铺首页轮播图展示,最多上传9张
+
+
+
+
+
+ ×
+
+
+ +
+ 上传照片
+
+
+
+
+
+
+
+ 签约资料
+
+
+
+ 签约类型
+
+
+
+
+
+ 个人签约
+
+
+
+
+
+ 公司/法人签约
+
+
+
+
+
+
+
+ 身份证正面
+
+
+
+ ×
+
+
+ +
+ 上传身份证正面
+
+
+
+
+
+ 身份证反面
+
+
+
+ ×
+
+
+ +
+ 上传身份证反面
+
+
+
+
+
+
+
+
+ 法人身份证正面
+
+
+
+ ×
+
+
+ +
+ 上传法人身份证正面
+
+
+
+
+
+ 法人身份证反面
+
+
+
+ ×
+
+
+ +
+ 上传法人身份证反面
+
+
+
+
+
+ 营业执照
+
+
+
+ ×
+
+
+ +
+ 上传营业执照
+
+
+
+
+
+
+ 营业执照编号
+
+
+
+
+
+ 法人姓名
+
+
+
+
+
+
+
+ 财务信息
+
+
+
+ 账户类型
+
+
+
+
+
+ 对公账户
+
+
+
+
+
+ 对私账户
+
+
+
+
+
+
+
+ 收款银行
+
+
+
+
+ 银行账号
+
+
+
+
+ 开户营业执照
+
+
+
+ ×
+
+
+ +
+ 上传开户营业执照
+
+
+
+
+
+
+
+
+ 开户名
+
+
+
+
+ 开户账号
+
+
+
+
+ 开户银行
+
+
+
+
+ 支行信息
+
+
+
+
+ 开户身份证正面
+
+
+
+ ×
+
+
+ +
+ 上传身份证正面
+
+
+
+
+
+ 开户身份证反面
+
+
+
+ ×
+
+
+ +
+ 上传身份证反面
+
+
+
+
@@ -104,9 +388,10 @@
- 温馨提示
- 修改店铺信息后需要重新等待平台审核
- 审核结果将通过消息通知您
+ 温馨提示
+ 1. 修改店铺信息后需要重新等待平台审核
+ 2. 所有证件照片需清晰可见,确保信息真实有效
+ 3. 审核通过后即可继续营业
@@ -123,16 +408,38 @@ const sellerStore = useSellerStore();
const loading = ref(false);
const form = ref({
+ // 基本信息
shopName: '',
phone: '',
province: '',
city: '',
district: '',
address: '',
- businessLicense: '',
+ description: '',
+ storeLicense: '', // 门店营业执照
+
+ // 酒店照片
+ hotelImages: [] as string[],
+
+ // 签约资料
+ contractType: 'personal' as 'personal' | 'company',
+ idCardFront: '', // 个人身份证正面
+ idCardBack: '', // 个人身份证反面
+ legalIdCardFront: '', // 法人身份证正面
+ legalIdCardBack: '', // 法人身份证反面
+ businessLicense: '', // 营业执照
licenseNo: '',
legalPerson: '',
- description: '',
+
+ // 财务信息
+ accountType: 'company' as 'company' | 'personal',
+ accountName: '', // 开户名(对私)
+ bankAccount: '', // 银行账号
+ bankName: '', // 银行名称
+ bankBranch: '', // 支行信息(对私)
+ bankLicense: '', // 开户营业执照(对公)
+ accountIdCardFront: '', // 开户身份证正面(对私)
+ accountIdCardBack: '', // 开户身份证反面(对私)
});
onMounted(async () => {
@@ -140,18 +447,39 @@ onMounted(async () => {
const res = await getMyMerchant();
const merchant = res.data;
form.value = {
+ // 基本信息
shopName: merchant.shopName || '',
phone: merchant.phone || '',
province: merchant.province || '',
city: merchant.city || '',
district: merchant.district || '',
address: merchant.address || '',
+ description: merchant.description || '',
+ storeLicense: merchant.storeLicense || '',
+
+ // 酒店照片
+ hotelImages: merchant.hotelImages ? merchant.hotelImages.split(',').filter((img: string) => img) : [],
+
+ // 签约资料
+ contractType: merchant.contractType || 'personal',
+ idCardFront: merchant.idCardFront || '',
+ idCardBack: merchant.idCardBack || '',
+ legalIdCardFront: merchant.legalIdCardFront || '',
+ legalIdCardBack: merchant.legalIdCardBack || '',
businessLicense: merchant.businessLicense || '',
licenseNo: merchant.licenseNo || '',
legalPerson: merchant.legalPerson || '',
- description: merchant.description || '',
+
+ // 财务信息
+ accountType: merchant.accountType || 'company',
+ accountName: merchant.accountName || '',
+ bankAccount: merchant.bankAccount || '',
+ bankName: merchant.bankName || '',
+ bankBranch: merchant.bankBranch || '',
+ bankLicense: merchant.bankLicense || '',
+ accountIdCardFront: merchant.accountIdCardFront || '',
+ accountIdCardBack: merchant.accountIdCardBack || '',
};
- // 地区信息已通过 RegionSelector 的 props 传入,无需额外处理
} catch (error) {
uni.showToast({ title: '获取店铺信息失败', icon: 'none' });
}
@@ -163,10 +491,96 @@ function onRegionChange(value: { province: string; city: string; district: strin
form.value.district = value.district;
}
-function deleteLicense() {
- form.value.businessLicense = '';
+// 上传酒店照片
+async function uploadHotelImages() {
+ try {
+ uni.showLoading({ title: '上传中...' });
+ const remainCount = 9 - form.value.hotelImages.length;
+ const urls = await chooseAndUpload({ count: remainCount, useSellerToken: true });
+ form.value.hotelImages.push(...urls);
+ uni.showToast({ title: '上传成功', icon: 'success' });
+ } catch (err: any) {
+ uni.showToast({ title: err.message || '上传失败', icon: 'none' });
+ } finally {
+ uni.hideLoading();
+ }
}
+function deleteHotelImage(index: number) {
+ form.value.hotelImages.splice(index, 1);
+}
+
+// 上传门店营业执照
+async function uploadStoreLicense() {
+ try {
+ uni.showLoading({ title: '上传中...' });
+ const urls = await chooseAndUpload({ count: 1, useSellerToken: true });
+ form.value.storeLicense = urls[0];
+ uni.showToast({ title: '上传成功', icon: 'success' });
+ } catch (err: any) {
+ uni.showToast({ title: err.message || '上传失败', icon: 'none' });
+ } finally {
+ uni.hideLoading();
+ }
+}
+
+// 上传身份证正面(个人)
+async function uploadIdCardFront() {
+ try {
+ uni.showLoading({ title: '上传中...' });
+ const urls = await chooseAndUpload({ count: 1, useSellerToken: true });
+ form.value.idCardFront = urls[0];
+ uni.showToast({ title: '上传成功', icon: 'success' });
+ } catch (err: any) {
+ uni.showToast({ title: err.message || '上传失败', icon: 'none' });
+ } finally {
+ uni.hideLoading();
+ }
+}
+
+// 上传身份证反面(个人)
+async function uploadIdCardBack() {
+ try {
+ uni.showLoading({ title: '上传中...' });
+ const urls = await chooseAndUpload({ count: 1, useSellerToken: true });
+ form.value.idCardBack = urls[0];
+ uni.showToast({ title: '上传成功', icon: 'success' });
+ } catch (err: any) {
+ uni.showToast({ title: err.message || '上传失败', icon: 'none' });
+ } finally {
+ uni.hideLoading();
+ }
+}
+
+// 上传法人身份证正面
+async function uploadLegalIdCardFront() {
+ try {
+ uni.showLoading({ title: '上传中...' });
+ const urls = await chooseAndUpload({ count: 1, useSellerToken: true });
+ form.value.legalIdCardFront = urls[0];
+ uni.showToast({ title: '上传成功', icon: 'success' });
+ } catch (err: any) {
+ uni.showToast({ title: err.message || '上传失败', icon: 'none' });
+ } finally {
+ uni.hideLoading();
+ }
+}
+
+// 上传法人身份证反面
+async function uploadLegalIdCardBack() {
+ try {
+ uni.showLoading({ title: '上传中...' });
+ const urls = await chooseAndUpload({ count: 1, useSellerToken: true });
+ form.value.legalIdCardBack = urls[0];
+ uni.showToast({ title: '上传成功', icon: 'success' });
+ } catch (err: any) {
+ uni.showToast({ title: err.message || '上传失败', icon: 'none' });
+ } finally {
+ uni.hideLoading();
+ }
+}
+
+// 上传营业执照
async function uploadLicense() {
try {
uni.showLoading({ title: '上传中...' });
@@ -180,9 +594,52 @@ async function uploadLicense() {
}
}
-function validateForm(): boolean {
- const { shopName, phone, businessLicense } = form.value;
+// 上传开户营业执照
+async function uploadBankLicense() {
+ try {
+ uni.showLoading({ title: '上传中...' });
+ const urls = await chooseAndUpload({ count: 1, useSellerToken: true });
+ form.value.bankLicense = urls[0];
+ uni.showToast({ title: '上传成功', icon: 'success' });
+ } catch (err: any) {
+ uni.showToast({ title: err.message || '上传失败', icon: 'none' });
+ } finally {
+ uni.hideLoading();
+ }
+}
+// 上传开户身份证正面
+async function uploadAccountIdCardFront() {
+ try {
+ uni.showLoading({ title: '上传中...' });
+ const urls = await chooseAndUpload({ count: 1, useSellerToken: true });
+ form.value.accountIdCardFront = urls[0];
+ uni.showToast({ title: '上传成功', icon: 'success' });
+ } catch (err: any) {
+ uni.showToast({ title: err.message || '上传失败', icon: 'none' });
+ } finally {
+ uni.hideLoading();
+ }
+}
+
+// 上传开户身份证反面
+async function uploadAccountIdCardBack() {
+ try {
+ uni.showLoading({ title: '上传中...' });
+ const urls = await chooseAndUpload({ count: 1, useSellerToken: true });
+ form.value.accountIdCardBack = urls[0];
+ uni.showToast({ title: '上传成功', icon: 'success' });
+ } catch (err: any) {
+ uni.showToast({ title: err.message || '上传失败', icon: 'none' });
+ } finally {
+ uni.hideLoading();
+ }
+}
+
+function validateForm(): boolean {
+ const { shopName, phone, contractType, accountType } = form.value;
+
+ // 基本信息验证
if (!shopName || shopName.length < 2) {
uni.showToast({ title: '店铺名称至少2个字', icon: 'none' });
return false;
@@ -193,11 +650,77 @@ function validateForm(): boolean {
return false;
}
- if (!businessLicense) {
- uni.showToast({ title: '请上传营业执照', icon: 'none' });
+ if (!form.value.storeLicense) {
+ uni.showToast({ title: '请上传门店营业执照', icon: 'none' });
return false;
}
+ // 签约资料验证
+ if (contractType === 'personal') {
+ if (!form.value.idCardFront) {
+ uni.showToast({ title: '请上传身份证正面', icon: 'none' });
+ return false;
+ }
+ if (!form.value.idCardBack) {
+ uni.showToast({ title: '请上传身份证反面', icon: 'none' });
+ return false;
+ }
+ } else if (contractType === 'company') {
+ if (!form.value.legalIdCardFront) {
+ uni.showToast({ title: '请上传法人身份证正面', icon: 'none' });
+ return false;
+ }
+ if (!form.value.legalIdCardBack) {
+ uni.showToast({ title: '请上传法人身份证反面', icon: 'none' });
+ return false;
+ }
+ if (!form.value.businessLicense) {
+ uni.showToast({ title: '请上传营业执照', icon: 'none' });
+ return false;
+ }
+ }
+
+ // 财务信息验证
+ if (accountType === 'company') {
+ if (!form.value.bankName) {
+ uni.showToast({ title: '请填写收款银行', icon: 'none' });
+ return false;
+ }
+ if (!form.value.bankAccount) {
+ uni.showToast({ title: '请填写银行账号', icon: 'none' });
+ return false;
+ }
+ if (!form.value.bankLicense) {
+ uni.showToast({ title: '请上传开户营业执照', icon: 'none' });
+ return false;
+ }
+ } else if (accountType === 'personal') {
+ if (!form.value.accountName) {
+ uni.showToast({ title: '请填写开户名', icon: 'none' });
+ return false;
+ }
+ if (!form.value.bankAccount) {
+ uni.showToast({ title: '请填写开户账号', icon: 'none' });
+ return false;
+ }
+ if (!form.value.bankName) {
+ uni.showToast({ title: '请填写开户银行', icon: 'none' });
+ return false;
+ }
+ if (!form.value.bankBranch) {
+ uni.showToast({ title: '请填写支行信息', icon: 'none' });
+ return false;
+ }
+ if (!form.value.accountIdCardFront) {
+ uni.showToast({ title: '请上传开户身份证正面', icon: 'none' });
+ return false;
+ }
+ if (!form.value.accountIdCardBack) {
+ uni.showToast({ title: '请上传开户身份证反面', icon: 'none' });
+ return false;
+ }
+ }
+
return true;
}
@@ -208,16 +731,38 @@ async function handleSubmit() {
try {
const res = await updateMerchant({
+ // 基本信息
shopName: form.value.shopName,
phone: form.value.phone,
province: form.value.province,
city: form.value.city,
district: form.value.district,
address: form.value.address,
+ description: form.value.description,
+ storeLicense: form.value.storeLicense,
+
+ // 酒店照片
+ hotelImages: form.value.hotelImages.join(','),
+
+ // 签约资料
+ contractType: form.value.contractType,
+ idCardFront: form.value.idCardFront,
+ idCardBack: form.value.idCardBack,
+ legalIdCardFront: form.value.legalIdCardFront,
+ legalIdCardBack: form.value.legalIdCardBack,
businessLicense: form.value.businessLicense,
licenseNo: form.value.licenseNo,
legalPerson: form.value.legalPerson,
- description: form.value.description,
+
+ // 财务信息
+ accountType: form.value.accountType,
+ accountName: form.value.accountName,
+ bankAccount: form.value.bankAccount,
+ bankName: form.value.bankName,
+ bankBranch: form.value.bankBranch,
+ bankLicense: form.value.bankLicense,
+ accountIdCardFront: form.value.accountIdCardFront,
+ accountIdCardBack: form.value.accountIdCardBack,
});
uni.showToast({ title: '修改成功', icon: 'success' });
@@ -246,17 +791,36 @@ async function handleSubmit() {
min-height: 100vh;
background: $bg-page;
padding: $spacing-xl;
+ padding-bottom: 200rpx;
}
.form-section {
background: $bg-card;
border-radius: $radius-lg;
- padding: $spacing-xl;
+ padding: $spacing-2xl;
+ margin-bottom: $spacing-xl;
border: 1rpx solid $border-light;
}
+.section-title {
+ font-size: $font-lg;
+ font-weight: $font-semibold;
+ color: $text-primary;
+ margin-bottom: $spacing-xs;
+}
+
+.section-desc {
+ font-size: $font-xs;
+ color: $text-secondary;
+ margin-bottom: $spacing-xl;
+}
+
.form-item {
margin-bottom: $spacing-2xl;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
}
.label {
@@ -279,7 +843,9 @@ async function handleSubmit() {
background: $bg-page;
border-radius: $radius-base;
padding: 0 $spacing-xl;
- font-size: $font-md;
+ font-size: $font-base;
+ color: $text-primary;
+ box-sizing: border-box;
border: 2rpx solid $border-light;
transition: all 0.2s ease;
@@ -291,11 +857,13 @@ async function handleSubmit() {
.textarea {
width: 100%;
- height: 160rpx;
+ min-height: 160rpx;
background: $bg-page;
border-radius: $radius-base;
padding: $spacing-xl;
- font-size: $font-md;
+ font-size: $font-base;
+ color: $text-primary;
+ box-sizing: border-box;
border: 2rpx solid $border-light;
transition: all 0.2s ease;
@@ -305,25 +873,66 @@ async function handleSubmit() {
}
}
-.picker-value {
+/* 单选组 */
+.radio-group {
+ display: flex;
+ gap: $spacing-xl;
+}
+
+.radio-item {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: $spacing-sm;
height: 88rpx;
background: $bg-page;
border-radius: $radius-base;
- padding: 0 $spacing-xl;
- font-size: $font-md;
+ font-size: $font-base;
+ color: $text-secondary;
+ border: 2rpx solid $border-light;
+ transition: all 0.2s ease;
+
+ &.active {
+ background: $primary-bg;
+ color: $primary-color;
+ border-color: $primary-color;
+ }
+}
+
+.radio-icon {
+ width: 32rpx;
+ height: 32rpx;
+ border-radius: 50%;
+ border: 2rpx solid $border-base;
display: flex;
align-items: center;
- border: 2rpx solid $border-light;
+ justify-content: center;
+ transition: all 0.2s ease;
+
+ .radio-item.active & {
+ border-color: $primary-color;
+ }
}
-.placeholder {
- color: $text-placeholder;
+.radio-dot {
+ width: 16rpx;
+ height: 16rpx;
+ border-radius: 50%;
+ background: $primary-color;
}
+/* 上传区域 */
.upload-section {
display: flex;
}
+.upload-grid {
+ display: flex;
+ flex-wrap: wrap;
+ gap: $spacing-md;
+}
+
.upload-btn {
width: 200rpx;
height: 200rpx;
@@ -334,17 +943,22 @@ async function handleSubmit() {
align-items: center;
justify-content: center;
border: 2rpx dashed $border-base;
+ transition: all 0.2s ease;
+
+ &:active {
+ background: $bg-hover;
+ }
}
.upload-icon {
font-size: 48rpx;
color: $text-tertiary;
+ margin-bottom: $spacing-xs;
}
.upload-text {
font-size: $font-xs;
color: $text-tertiary;
- margin-top: $spacing-xs;
}
.image-preview {
@@ -353,6 +967,7 @@ async function handleSubmit() {
background: $bg-page;
border-radius: $radius-base;
position: relative;
+ overflow: hidden;
border: 1rpx solid $border-light;
}
@@ -364,22 +979,24 @@ async function handleSubmit() {
.delete-btn {
position: absolute;
- top: -16rpx;
- right: -16rpx;
- width: 40rpx;
- height: 40rpx;
+ top: -12rpx;
+ right: -12rpx;
+ width: 48rpx;
+ height: 48rpx;
background: $error-color;
border-radius: 50%;
color: #fff;
- font-size: $font-base;
+ font-size: 32rpx;
display: flex;
align-items: center;
justify-content: center;
+ z-index: 10;
}
+/* 提交按钮 */
.submit-btn {
width: 100%;
- height: 88rpx;
+ height: 96rpx;
background: $primary-color;
color: #fff;
font-size: $font-lg;
@@ -389,6 +1006,10 @@ async function handleSubmit() {
margin-top: $spacing-3xl;
transition: all 0.2s ease;
+ &::after {
+ border: none;
+ }
+
&:active:not([disabled]) {
background: $primary-dark;
}
@@ -399,11 +1020,12 @@ async function handleSubmit() {
}
}
+/* 提示信息 */
.tips {
margin-top: $spacing-2xl;
- padding: $spacing-xl;
+ padding: $spacing-2xl;
background: $bg-card;
- border-radius: $radius-base;
+ border-radius: $radius-lg;
border: 2rpx solid $warning-color;
}
@@ -412,13 +1034,30 @@ async function handleSubmit() {
font-weight: $font-semibold;
color: $warning-color;
margin-bottom: $spacing-md;
- display: block;
+ display: flex;
+ align-items: center;
+ gap: $spacing-xs;
+
+ &::before {
+ content: '!';
+ width: 32rpx;
+ height: 32rpx;
+ background: $warning-color;
+ color: #fff;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: $font-lg;
+ font-weight: $font-bold;
+ }
}
.tips-text {
- font-size: $font-xs;
+ font-size: $font-sm;
color: $text-secondary;
display: block;
- margin-top: $spacing-xs;
+ margin-top: $spacing-sm;
+ line-height: 1.6;
}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e69c6f3..6db8110 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -47,13 +47,13 @@ importers:
version: 18.3.7(@types/react@18.3.28)
'@vitejs/plugin-react':
specifier: ^4.3.0
- version: 4.7.0(vite@5.4.21(@types/node@24.12.2)(sass@1.99.0)(terser@5.46.2))
+ version: 4.7.0(vite@5.4.21(@types/node@24.12.2)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))
typescript:
specifier: ^5.5.0
version: 5.9.3
vite:
specifier: ^5.4.0
- version: 5.4.21(@types/node@24.12.2)(sass@1.99.0)(terser@5.46.2)
+ version: 5.4.21(@types/node@24.12.2)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2)
apps/miniapp:
dependencies:
@@ -62,10 +62,10 @@ importers:
version: 3.0.0-5000720260410001(@dcloudio/types@3.4.31)(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vue@3.5.33(typescript@5.9.3))
'@dcloudio/uni-app-harmony':
specifier: 3.0.0-5000720260410001
- version: 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
+ version: 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
'@dcloudio/uni-app-plus':
specifier: 3.0.0-5000720260410001
- version: 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
+ version: 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
'@dcloudio/uni-components':
specifier: 3.0.0-5000720260410001
version: 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vue@3.5.33(typescript@5.9.3))
@@ -132,7 +132,7 @@ importers:
version: 3.0.0-5000720260410001
'@dcloudio/vite-plugin-uni':
specifier: 3.0.0-5000720260410001
- version: 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
+ version: 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
'@types/node':
specifier: ^22.0.0
version: 22.19.17
@@ -140,14 +140,17 @@ importers:
specifier: ^3.4.21
version: 3.5.33
sass:
- specifier: ^1.77.0
+ specifier: ^1.83.0
+ version: 1.99.0
+ sass-embedded:
+ specifier: ^1.83.0
version: 1.99.0
typescript:
specifier: ^5.5.0
version: 5.9.3
vite:
specifier: ^5.2.8
- version: 5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2)
+ version: 5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2)
apps/platform-admin:
dependencies:
@@ -184,13 +187,13 @@ importers:
version: 18.3.7(@types/react@18.3.28)
'@vitejs/plugin-react':
specifier: ^4.3.0
- version: 4.7.0(vite@5.4.21(@types/node@24.12.2)(sass@1.99.0)(terser@5.46.2))
+ version: 4.7.0(vite@5.4.21(@types/node@24.12.2)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))
typescript:
specifier: ^5.5.0
version: 5.9.3
vite:
specifier: ^5.4.0
- version: 5.4.21(@types/node@24.12.2)(sass@1.99.0)(terser@5.46.2)
+ version: 5.4.21(@types/node@24.12.2)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2)
apps/server:
dependencies:
@@ -1046,6 +1049,9 @@ packages:
'@borewit/text-codec@0.2.2':
resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==}
+ '@bufbuild/protobuf@2.12.0':
+ resolution: {integrity: sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA==}
+
'@colors/colors@1.5.0':
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
@@ -3499,6 +3505,9 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ colorjs.io@0.5.2:
+ resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==}
+
combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
@@ -5909,6 +5918,123 @@ packages:
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ sass-embedded-all-unknown@1.99.0:
+ resolution: {integrity: sha512-qPIRG8Uhjo6/OKyAKixTnwMliTz+t9K6Duk0mx5z+K7n0Ts38NSJz2sjDnc7cA/8V9Lb3q09H38dZ1CLwD+ssw==}
+ cpu: ['!arm', '!arm64', '!riscv64', '!x64']
+
+ sass-embedded-android-arm64@1.99.0:
+ resolution: {integrity: sha512-fNHhdnP23yqqieCbAdym4N47AleSwjbNt6OYIYx4DdACGdtERjQB4iOX/TaKsW034MupfF7SjnAAK8w7Ptldtg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ sass-embedded-android-arm@1.99.0:
+ resolution: {integrity: sha512-EHvJ0C7/VuP78Qr6f8gIUVUmCqIorEQpw2yp3cs3SMg02ZuumlhjXvkTcFBxHmFdFR23vTNk1WnhY6QSeV1nFQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [android]
+
+ sass-embedded-android-riscv64@1.99.0:
+ resolution: {integrity: sha512-4zqDFRvgGDTL5vTHuIhRxUpXFoh0Cy7Gm5Ywk19ASd8Settmd14YdPRZPmMxfgS1GH292PofV1fq1ifiSEJWBw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [riscv64]
+ os: [android]
+
+ sass-embedded-android-x64@1.99.0:
+ resolution: {integrity: sha512-Uk53k/dGYt04RjOL4gFjZ0Z9DH9DKh8IA8WsXUkNqsxerAygoy3zqRBS2zngfE9K2jiOM87q+1R1p87ory9oQQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [android]
+
+ sass-embedded-darwin-arm64@1.99.0:
+ resolution: {integrity: sha512-u61/7U3IGLqoO6gL+AHeiAtlTPFwJK1+964U8gp45ZN0hzh1yrARf5O1mivXv8NnNgJvbG2wWJbiNZP0lG/lTg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ sass-embedded-darwin-x64@1.99.0:
+ resolution: {integrity: sha512-j/kkk/NcXdIameLezSfXjgCiBkVcA+G60AXrX768/3g0miK1g7M9dj7xOhCb1i7/wQeiEI3rw2LLuO63xRIn4A==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ sass-embedded-linux-arm64@1.99.0:
+ resolution: {integrity: sha512-btNcFpItcB56L40n8hDeL7sRSMLDXQ56nB5h2deddJx1n60rpKSElJmkaDGHtpkrY+CTtDRV0FZDjHeTJddYew==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: glibc
+
+ sass-embedded-linux-arm@1.99.0:
+ resolution: {integrity: sha512-d4IjJZrX2+AwB2YCy1JySwdptJECNP/WfAQLUl8txI3ka8/d3TUI155GtelnoZUkio211PwIeFvvAeZ9RXPQnw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: glibc
+
+ sass-embedded-linux-musl-arm64@1.99.0:
+ resolution: {integrity: sha512-Hi2bt/IrM5P4FBKz6EcHAlniwfpoz9mnTdvSd58y+avA3SANM76upIkAdSayA8ZGwyL3gZokru1AKDPF9lJDNw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: musl
+
+ sass-embedded-linux-musl-arm@1.99.0:
+ resolution: {integrity: sha512-2gvHOupgIw3ytatXT4nFUow71LFbuOZPEwG+HUzcNQDH8ue4Ez8cr03vsv5MDv3lIjOKcXwDvWD980t18MwkoQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: musl
+
+ sass-embedded-linux-musl-riscv64@1.99.0:
+ resolution: {integrity: sha512-mKqGvVaJ9rHMqyZsF0kikQe4NO0f4osb67+X6nLhBiVDKvyazQHJ3zJQreNefIE36yL2sjHIclSB//MprzaQDg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [riscv64]
+ os: [linux]
+ libc: musl
+
+ sass-embedded-linux-musl-x64@1.99.0:
+ resolution: {integrity: sha512-huhgOMmOc30r7CH7qbRbT9LerSEGSnWuS4CYNOskr9BvNeQp4dIneFufNRGZ7hkOAxUM8DglxIZJN/cyAT95Ew==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: musl
+
+ sass-embedded-linux-riscv64@1.99.0:
+ resolution: {integrity: sha512-mevFPIFAVhrH90THifxLfOntFmHtcEKOcdWnep2gJ0X4DVva4AiVIRlQe/7w9JFx5+gnDRE1oaJJkzuFUuYZsA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [riscv64]
+ os: [linux]
+ libc: glibc
+
+ sass-embedded-linux-x64@1.99.0:
+ resolution: {integrity: sha512-9k7IkULqIZdCIVt4Mboryt6vN8Mjmm3EhI1P3mClU5y5i3wLK5ExC3cbVWk047KsID/fvB1RLslqghXJx5BoxA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: glibc
+
+ sass-embedded-unknown-all@1.99.0:
+ resolution: {integrity: sha512-P7MxiUtL/XzGo3PX0CaB8lNNEFLQWKikPA8pbKytx9ZCLZSDkt2NJcdAbblB/sqMs4AV3EK2NadV8rI/diq3xg==}
+ os: ['!android', '!darwin', '!linux', '!win32']
+
+ sass-embedded-win32-arm64@1.99.0:
+ resolution: {integrity: sha512-8whpsW7S+uO8QApKfQuc36m3P9EISzbVZOgC79goob4qGy09u8Gz/rYvw8h1prJDSjltpHGhOzBE6LDz7WvzVw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ sass-embedded-win32-x64@1.99.0:
+ resolution: {integrity: sha512-ipuOv1R2K4MHeuCEAZGpuUbAgma4gb0sdacyrTjJtMOy/OY9UvWfVlwErdB09KIkp4fPDpQJDJfvYN6bC8jeNg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ sass-embedded@1.99.0:
+ resolution: {integrity: sha512-gF/juR1aX02lZHkvwxdF80SapkQeg2fetoDF6gIQkNbSw5YEUFspMkyGTjPjgZSgIHuZpy+Wz4PlebKnLXMjdg==}
+ engines: {node: '>=16.0.0'}
+ hasBin: true
+
sass@1.99.0:
resolution: {integrity: sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==}
engines: {node: '>=14.0.0'}
@@ -6163,6 +6289,14 @@ packages:
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
+ sync-child-process@1.0.2:
+ resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==}
+ engines: {node: '>=16.0.0'}
+
+ sync-message-port@1.2.0:
+ resolution: {integrity: sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==}
+ engines: {node: '>=16.0.0'}
+
synckit@0.11.12:
resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==}
engines: {node: ^14.18.0 || >=16.0.0}
@@ -6554,6 +6688,9 @@ packages:
resolution: {integrity: sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==}
engines: {node: '>= 0.10'}
+ varint@6.0.0:
+ resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
+
vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
@@ -7754,6 +7891,8 @@ snapshots:
'@borewit/text-codec@0.2.2': {}
+ '@bufbuild/protobuf@2.12.0': {}
+
'@colors/colors@1.5.0':
optional: true
@@ -7763,10 +7902,10 @@ snapshots:
'@dcloudio/types@3.4.31': {}
- '@dcloudio/uni-app-harmony@3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))':
+ '@dcloudio/uni-app-harmony@3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))':
dependencies:
'@dcloudio/uni-app-uts': 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vue@3.5.33(typescript@5.9.3))
- '@dcloudio/uni-app-vite': 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
+ '@dcloudio/uni-app-vite': 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
debug: 4.3.7
fs-extra: 10.1.0
licia: 1.41.1
@@ -7781,10 +7920,10 @@ snapshots:
- vite
- vue
- '@dcloudio/uni-app-plus@3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))':
+ '@dcloudio/uni-app-plus@3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))':
dependencies:
'@dcloudio/uni-app-uts': 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vue@3.5.33(typescript@5.9.3))
- '@dcloudio/uni-app-vite': 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
+ '@dcloudio/uni-app-vite': 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
'@dcloudio/uni-app-vue': 3.0.0-5000720260410001
debug: 4.3.7
fs-extra: 10.1.0
@@ -7835,14 +7974,14 @@ snapshots:
- ts-node
- vue
- '@dcloudio/uni-app-vite@3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))':
+ '@dcloudio/uni-app-vite@3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vue@3.5.33(typescript@5.9.3))
'@dcloudio/uni-i18n': 3.0.0-5000720260410001
'@dcloudio/uni-nvue-styler': 3.0.0-5000720260410001
'@dcloudio/uni-shared': 3.0.0-5000720260410001
'@rollup/pluginutils': 5.1.0(rollup@4.60.2)
- '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
+ '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
'@vue/compiler-dom': 3.4.21
'@vue/compiler-sfc': 3.4.21
debug: 4.3.7
@@ -8367,7 +8506,7 @@ snapshots:
- ts-node
- vue
- '@dcloudio/vite-plugin-uni@3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))':
+ '@dcloudio/vite-plugin-uni@3.0.0-5000720260410001(postcss@8.5.10)(rollup@4.60.2)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3))(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))':
dependencies:
'@babel/core': 7.25.2
'@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2)
@@ -8376,9 +8515,9 @@ snapshots:
'@dcloudio/uni-nvue-styler': 3.0.0-5000720260410001
'@dcloudio/uni-shared': 3.0.0-5000720260410001
'@rollup/pluginutils': 5.1.0(rollup@4.60.2)
- '@vitejs/plugin-legacy': 5.3.2(terser@5.46.2)(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))
- '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
- '@vitejs/plugin-vue-jsx': 3.1.0(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
+ '@vitejs/plugin-legacy': 5.3.2(terser@5.46.2)(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))
+ '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
+ '@vitejs/plugin-vue-jsx': 3.1.0(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))
'@vue/compiler-core': 3.4.21
'@vue/compiler-dom': 3.4.21
'@vue/compiler-sfc': 3.4.21
@@ -8395,7 +8534,7 @@ snapshots:
picocolors: 1.1.0
terser: 5.46.2
unplugin-auto-import: 19.1.0
- vite: 5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2)
+ vite: 5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2)
transitivePeerDependencies:
- '@nuxt/kit'
- '@vueuse/core'
@@ -10243,7 +10382,7 @@ snapshots:
'@unrs/resolver-binding-win32-x64-msvc@1.11.1':
optional: true
- '@vitejs/plugin-legacy@5.3.2(terser@5.46.2)(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))':
+ '@vitejs/plugin-legacy@5.3.2(terser@5.46.2)(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))':
dependencies:
'@babel/core': 7.25.2
'@babel/preset-env': 7.29.2(@babel/core@7.25.2)
@@ -10254,11 +10393,11 @@ snapshots:
regenerator-runtime: 0.14.1
systemjs: 6.15.1
terser: 5.46.2
- vite: 5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2)
+ vite: 5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@24.12.2)(sass@1.99.0)(terser@5.46.2))':
+ '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@24.12.2)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
@@ -10266,23 +10405,23 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.27
'@types/babel__core': 7.20.5
react-refresh: 0.17.0
- vite: 5.4.21(@types/node@24.12.2)(sass@1.99.0)(terser@5.46.2)
+ vite: 5.4.21(@types/node@24.12.2)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue-jsx@3.1.0(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))':
+ '@vitejs/plugin-vue-jsx@3.1.0(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))':
dependencies:
'@babel/core': 7.25.2
'@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.25.2)
'@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.25.2)
- vite: 5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2)
+ vite: 5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2)
vue: 3.5.33(typescript@5.9.3)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))':
+ '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2))(vue@3.5.33(typescript@5.9.3))':
dependencies:
- vite: 5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2)
+ vite: 5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2)
vue: 3.5.33(typescript@5.9.3)
'@vue/babel-helper-vue-transform-on@1.5.0': {}
@@ -11060,6 +11199,8 @@ snapshots:
color-name@1.1.4: {}
+ colorjs.io@0.5.2: {}
+
combined-stream@1.0.8:
dependencies:
delayed-stream: 1.0.0
@@ -14005,6 +14146,93 @@ snapshots:
safer-buffer@2.1.2: {}
+ sass-embedded-all-unknown@1.99.0:
+ dependencies:
+ sass: 1.99.0
+ optional: true
+
+ sass-embedded-android-arm64@1.99.0:
+ optional: true
+
+ sass-embedded-android-arm@1.99.0:
+ optional: true
+
+ sass-embedded-android-riscv64@1.99.0:
+ optional: true
+
+ sass-embedded-android-x64@1.99.0:
+ optional: true
+
+ sass-embedded-darwin-arm64@1.99.0:
+ optional: true
+
+ sass-embedded-darwin-x64@1.99.0:
+ optional: true
+
+ sass-embedded-linux-arm64@1.99.0:
+ optional: true
+
+ sass-embedded-linux-arm@1.99.0:
+ optional: true
+
+ sass-embedded-linux-musl-arm64@1.99.0:
+ optional: true
+
+ sass-embedded-linux-musl-arm@1.99.0:
+ optional: true
+
+ sass-embedded-linux-musl-riscv64@1.99.0:
+ optional: true
+
+ sass-embedded-linux-musl-x64@1.99.0:
+ optional: true
+
+ sass-embedded-linux-riscv64@1.99.0:
+ optional: true
+
+ sass-embedded-linux-x64@1.99.0:
+ optional: true
+
+ sass-embedded-unknown-all@1.99.0:
+ dependencies:
+ sass: 1.99.0
+ optional: true
+
+ sass-embedded-win32-arm64@1.99.0:
+ optional: true
+
+ sass-embedded-win32-x64@1.99.0:
+ optional: true
+
+ sass-embedded@1.99.0:
+ dependencies:
+ '@bufbuild/protobuf': 2.12.0
+ colorjs.io: 0.5.2
+ immutable: 5.1.5
+ rxjs: 7.8.2
+ supports-color: 8.1.1
+ sync-child-process: 1.0.2
+ varint: 6.0.0
+ optionalDependencies:
+ sass-embedded-all-unknown: 1.99.0
+ sass-embedded-android-arm: 1.99.0
+ sass-embedded-android-arm64: 1.99.0
+ sass-embedded-android-riscv64: 1.99.0
+ sass-embedded-android-x64: 1.99.0
+ sass-embedded-darwin-arm64: 1.99.0
+ sass-embedded-darwin-x64: 1.99.0
+ sass-embedded-linux-arm: 1.99.0
+ sass-embedded-linux-arm64: 1.99.0
+ sass-embedded-linux-musl-arm: 1.99.0
+ sass-embedded-linux-musl-arm64: 1.99.0
+ sass-embedded-linux-musl-riscv64: 1.99.0
+ sass-embedded-linux-musl-x64: 1.99.0
+ sass-embedded-linux-riscv64: 1.99.0
+ sass-embedded-linux-x64: 1.99.0
+ sass-embedded-unknown-all: 1.99.0
+ sass-embedded-win32-arm64: 1.99.0
+ sass-embedded-win32-x64: 1.99.0
+
sass@1.99.0:
dependencies:
chokidar: 4.0.3
@@ -14311,6 +14539,12 @@ snapshots:
symbol-tree@3.2.4: {}
+ sync-child-process@1.0.2:
+ dependencies:
+ sync-message-port: 1.2.0
+
+ sync-message-port@1.2.0: {}
+
synckit@0.11.12:
dependencies:
'@pkgr/core': 0.2.9
@@ -14695,9 +14929,11 @@ snapshots:
validator@13.15.35: {}
+ varint@6.0.0: {}
+
vary@1.1.2: {}
- vite@5.4.21(@types/node@22.19.17)(sass@1.99.0)(terser@5.46.2):
+ vite@5.4.21(@types/node@22.19.17)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2):
dependencies:
esbuild: 0.21.5
postcss: 8.5.10
@@ -14706,9 +14942,10 @@ snapshots:
'@types/node': 22.19.17
fsevents: 2.3.3
sass: 1.99.0
+ sass-embedded: 1.99.0
terser: 5.46.2
- vite@5.4.21(@types/node@24.12.2)(sass@1.99.0)(terser@5.46.2):
+ vite@5.4.21(@types/node@24.12.2)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2):
dependencies:
esbuild: 0.21.5
postcss: 8.5.10
@@ -14717,6 +14954,7 @@ snapshots:
'@types/node': 24.12.2
fsevents: 2.3.3
sass: 1.99.0
+ sass-embedded: 1.99.0
terser: 5.46.2
vue-demi@0.14.10(vue@3.5.33(typescript@5.9.3)):