mirror of
https://gitee.com/niucloud-team/javashop.git
synced 2026-04-25 11:18:23 +00:00
优化 * 平台端 站点端界面改版优化 * 插件支持多选批量升级 * 万能表单 日期组件、时间组件优化 * 万能表单完善语言包 * 微信开放平台管理端优化,增加小程序撤回审核、授权记录 * 插件支持多选批量升级 * 升级框架/插件时,增加是否备份、是否云编译等控制选项 * 操作日志增加清空功能 * 站点端`本地存储`调整为`默认存储`,若无配置,则使用管理端设置的默认存储方式及配置 * 后台提现列表样式优化 * 隐私协议弹框样式优化 * 待付款订单界面优化 * 商品列表 推广支持微信小程序二维码 * 商品分类列表 推广支持微信小程序二维码 * 优惠券列表 推广支持微信小程序二维码 * 重构限时折扣活动,支持添加N个商品,提供扩展性 * 限时折扣增加批量设置减钱、促销价 * 商品搜索页面增加 搜索关键字、排行榜 * 订单退款详情、优惠券领取记录、退款维权详情改为抽屉弹框样式 新增 * 增加升级记录 * 增加备份记录,支持手动备份、恢复等功能 * 增加主题风格,自定义配色功能 * 自定义链接支持扩展,增加万能表单选择 * 自定义页面增加弹窗广告设置 * 平台端增加清理缓存功能 * 增加定时清理计划任务日志数据 * 牛云短信功能 * 会员增加身份证、备注等信息 * 个人资料增加万能表单 * 后台会员列表增加全选所有页/全选当前页,方便批量操作 * 自定义页面增加弹窗广告设置 * 增加定时清理计划任务 * 站点增加初始化操作,用于清空整个站点数据 * 支持第三方云编译服务搭建 * 商品列表,商品分类展示限时折扣标识 * 价格展示逻辑调整,同时参与会员价、限时折扣,优先展示最低价 * 商品榜单列表增加会员价、限时折扣标识 * 商品收藏列表、足迹列表,显示会员价/限时折扣展示 * 同城配送功能新增预约时间设置,支持用户选择具体配送时段,提升配送体验。 * 自定义商品详情 * 增加商品排序设置 * 增加门店自提核销功能 * 优惠券列表增加发劵功能 * 商品列表、商品详情增加副标题展示 * 商品增加视频 * 后台增加`关闭售后`按钮 * 添加/编辑商品,支持选择多个参数模板 * 商品详情左上角返回增加悬浮菜单导航 * 商品品牌支持自定义样式设置 * 商品标签增加复制功能 * 增加商品搜索设置 * 增加商品编码唯一性设置 * 自定义链接增加选择商品、选择商品分类、选择优惠券、选择积分商品 * 满减送列表增加批量关闭、删除功能 * 后台商品列表增加批量操作(商品标签、商品服务、虚拟销量、商品分类、商品品牌、商品海报、是否赠品、配送设置、批量修改库存)
140 lines
3.8 KiB
JavaScript
140 lines
3.8 KiB
JavaScript
const fs = require('fs')
|
||
const { spawn } = require('child_process');
|
||
const path = require('path');
|
||
|
||
const main = () => {
|
||
const params = process.argv.slice(2) || []
|
||
const port = params[0] || ''
|
||
const mode = params[1] || ''
|
||
|
||
switch (port) {
|
||
case 'h5':
|
||
publish()
|
||
break;
|
||
case 'mp-weixin':
|
||
if (mode == 'build') {
|
||
handleWeappAddonComponents(mode)
|
||
handleWeappLanguage(mode)
|
||
} else if (mode == 'dev') {
|
||
listenWeappRunDev()
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
const publish = () => {
|
||
const src = './dist/build/h5'
|
||
const dest = '../webroot/public/wap'
|
||
|
||
solve()
|
||
|
||
// 目标目录不存在停止复制
|
||
try {
|
||
const dir = fs.readdirSync(dest)
|
||
} catch (e) {
|
||
return
|
||
}
|
||
|
||
// 删除目标目录下文件
|
||
fs.rm(dest, { recursive: true }, err => {
|
||
if(err) {
|
||
console.log(err)
|
||
return
|
||
}
|
||
|
||
fs.cp(src, dest, { recursive: true }, (err) => {
|
||
if (err) {
|
||
console.error(err)
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
const solve = () => {
|
||
const src = './dist/build/h5/assets'
|
||
const filemaps = fs.readdirSync(src)
|
||
|
||
filemaps.forEach(file => {
|
||
if (/^(index-)(\w{8})(.js)$/.test(file)) {
|
||
const path = `${src}/${file}`
|
||
let content = fs.readFileSync(path, 'utf-8')
|
||
const first = 'const match = location.href.match(/\\/wap\\/(\\d*)\\//);'
|
||
|
||
if (content.indexOf(first) == -1) {
|
||
content = first + content
|
||
const replace = 'router:{mode:"history",base: match ? `/wap/${match[1]}/` : "/wap/",assets:"assets",routerBase: match ? `/wap/${match[1]}/` : "/wap/"},darkmode'
|
||
content = content.replace(/router:{(.*?)},darkmode/s, replace)
|
||
fs.writeFileSync(path, content, 'utf8')
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
const handleWeappAddonComponents = (mode) => {
|
||
const files = [
|
||
`./dist/${mode}/mp-weixin/addon/components/diy/group/index.json`,
|
||
`./dist/${mode}/mp-weixin/app/pages/index/tabbar.json`
|
||
]
|
||
|
||
files.forEach(src => {
|
||
try {
|
||
const data = JSON.parse(fs.readFileSync(src, 'utf8'));
|
||
data.componentPlaceholder = {};
|
||
|
||
Object.keys(data.usingComponents).map(key => {
|
||
data.componentPlaceholder[key] = "view";
|
||
})
|
||
fs.writeFileSync(src, JSON.stringify(data))
|
||
} catch (err) {
|
||
}
|
||
})
|
||
}
|
||
|
||
const handleWeappLanguage = (mode) => {
|
||
const src = `./dist/${mode}/mp-weixin/locale/language.js`
|
||
|
||
try {
|
||
let content = fs.readFileSync(src, 'utf8');
|
||
content = content.replace(/Promise\.resolve\(require\(("[^"]+")\)\)/g, 'require.async($1)')
|
||
fs.writeFileSync(src, content)
|
||
} catch (err) {
|
||
console.log(err)
|
||
}
|
||
}
|
||
|
||
const listenWeappRunDev = () => {
|
||
const devProcess = spawn('npm', ['run', 'dev:niu-mp-weixin'], {
|
||
stdio: ['pipe', 'pipe', 'pipe'],
|
||
shell: true
|
||
});
|
||
|
||
let serverReady = false;
|
||
|
||
// 监听 stdout 输出
|
||
devProcess.stdout.on('data', (data) => {
|
||
const message = data.toString();
|
||
console.log(message)
|
||
if (!serverReady && message.includes('DONE Build complete')) {
|
||
serverReady = true;
|
||
handleWeappAddonComponents('dev')
|
||
handleWeappLanguage('dev')
|
||
}
|
||
});
|
||
|
||
// 监听 stderr 输出,用于捕获错误信息
|
||
devProcess.stderr.on('data', (data) => {
|
||
console.error(data.toString());
|
||
});
|
||
|
||
// 监听子进程退出事件
|
||
devProcess.on('close', (code) => {
|
||
if (code !== 0) { // 如果退出码不是0,则认为发生了错误
|
||
console.error(`Child process exited with code ${code}`);
|
||
} else {
|
||
console.log('Child process exited successfully.');
|
||
}
|
||
});
|
||
}
|
||
|
||
main()
|