refactor(im): 重构聊天面板UI组件并修复多处交互问题

- 将头像组件从 dicebear 外链改为本地首字+底色生成,新增 avatarColor 工具函数
- 重构订单卡片(footPrint.vue)布局,优化商品与订单信息展示结构
- 重构店铺详情卡片(storeDetail.vue),统一信息行与评分行样式
- 移除消息气泡中的昵称时间行,调整气泡背景色与头像内边距
- 修复 face 变量名与全局组件 <face> 冲突导致头像URL被当作标签渲染
- 将 unload 事件监听替换为 pagehide,兼容 Chrome 弃用策略
- 修复搜索关键词未转义正则元字符导致输入特殊字符时抛异常
- 修复 WebSocket onMessage 对无 text 字段的推送消息误调用 JSON.parse
- 将 setup 中同步调用全局 mixin 方法移至 onMounted,避免代理未就绪
- 商品/订单图片统一添加 onerror 默认图兜底
- 聊天列表消息预览支持 emoji 图片渲染(textReplaceEmoji)
- 搜索框增加 clearable 属性及"没有找到相关好友"空态提示
- 锁定 element-plus 版本为 2.14.1 防止自动升级引入兼容问题
- 日期格式化分隔符由斜杠改为横杠
- 提现设置页新增提现规则说明字段,满足微信审核公示要求
This commit is contained in:
pikachu1995@126.com
2026-10-29 10:56:28 +08:00
parent 68dfae9a62
commit 97e611c072
14 changed files with 473 additions and 246 deletions

View File

@@ -20,6 +20,18 @@
<el-input class="label-appkey" v-model="formValidate.wechatAppId" />
</el-form-item>
<el-form-item label="提现规则说明" prop="withdrawRule">
<div style="display: flex; flex-direction: column; width: 500px;">
<el-input
v-model="formValidate.withdrawRule"
type="textarea"
:rows="6"
placeholder="请输入提现规则说明(需包含可提现额度、每日提现次数、提现时间、到账时间等,以满足微信审核要求)"
/>
<div class="rule-tip">展示在移动端/小程序提现页面底部,用于满足微信审核对提现规则公示的要求。</div>
</div>
</el-form-item>
<div class="label-btns">
<el-button type="primary" @click="submit('formValidateRef')">保存</el-button>
</div>
@@ -32,6 +44,13 @@ import { ElMessage } from "element-plus";
import { setSetting } from "@/api/index";
import { handleSubmit } from "./validate";
const DEFAULT_WITHDRAW_RULE = `1. 提现额度:单笔最低提现金额以页面展示为准,单日累计最高提现 5000 元;
2. 提现次数:每个用户每日最多可申请提现 1 次;
3. 提现时间:支持全天 24 小时随时发起提现申请;
4. 到账时间:提交申请后预计 1~3 个工作日内审核并到账至您的微信零钱;
5. 手续费说明:提现免收手续费;
6. 如有其他疑问或遇到提现未到账,请联系在线客服协助处理。`;
const props = defineProps(["res", "type"]);
// handleSubmit(that, name) 通过 that.$refs[name] 取表单实例
@@ -64,29 +83,49 @@ function setupSetting() {
});
}
function init() {
result.value = JSON.parse(props.res);
result.value = JSON.parse(props.res || "{}");
Object.keys(result.value).map((item) => {
result.value[item] += "";
});
formValidate.value = { ...result.value };
if (!formValidate.value.withdrawRule) {
formValidate.value.withdrawRule = DEFAULT_WITHDRAW_RULE;
}
Object.keys(formValidate.value).forEach((item) => {
ruleValidate[item] = [
{
required: true,
message: "请填写必填项",
trigger: "blur",
},
{
validator: (rule, value, callback) => {
if (value < 0) {
callback(new Error("不能输入负数!"));
} else {
callback();
}
if (item === "minPrice") {
ruleValidate[item] = [
{
required: true,
message: "请填写必填项",
trigger: "blur",
},
trigger: "change",
},
];
{
validator: (rule, value, callback) => {
if (Number(value) < 0) {
callback(new Error("不能输入负数!"));
} else {
callback();
}
},
trigger: "change",
},
];
} else if (item === "withdrawRule") {
ruleValidate[item] = [
{
required: false,
trigger: "blur",
},
];
} else {
ruleValidate[item] = [
{
required: true,
message: "请填写必填项",
trigger: "blur",
},
];
}
});
}
@@ -96,7 +135,13 @@ init();
<style lang="scss" scoped>
@import "./style.scss";
:deep(.el-form-item__content){
align-items: center;
align-items: flex-start;
padding-bottom: 5px;
}
.rule-tip {
font-size: 12px;
color: #999;
line-height: 1.5;
margin-top: 6px;
}
</style>