feat(admin): add msh_single_admin project and harden ignore rules

Introduce the new Vue admin project into version control while tightening gitignore patterns to keep env files, logs, build artifacts, and test outputs out of commits.

Made-with: Cursor
This commit is contained in:
msh-agent
2026-04-15 19:31:32 +08:00
parent a840045fc1
commit ceac1c0340
713 changed files with 119926 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import { storeStaffListApi } from '@/api/storePoint';
import { seckillListApi } from '@/api/marketing';
import { checkPermi } from '@/utils/permission'; // 权限判断函数
import Cookies from 'js-cookie';
/**
* @description 确定操作弹框
*/
export function modalSure(title) {
return new Promise((resolve, reject) => {
this.$confirm(`确定${title || '永久删除该文件'}`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
resolve();
})
.catch(() => {
reject();
this.$message({
type: 'info',
message: '已取消',
});
});
});
}
/**
* @description 短信是否登录
*/
export function isLogin() {
return new Promise((resolve, reject) => {
isLoginApi()
.then(async (res) => {
resolve(res);
})
.catch((res) => {
reject(res);
});
});
}
/**
* @description 核销员列表
*/
export function getStoreStaff() {
return new Promise((resolve, reject) => {
if (checkPermi(['admin:system:staff:list'])) {
storeStaffListApi({ page: 1, limit: 9999 }).then(async (res) => {
localStorage.setItem('storeStaffList', res.list ? JSON.stringify(res.list) : []);
});
}
});
}
/**
* @description 秒杀配置列表
*/
export function getSeckillList(status) {
return new Promise((resolve, reject) => {
seckillListApi({ page: 1, limit: 9999, isDel: false, status: status || null }).then(async (res) => {
resolve(res);
});
});
}
/**
* @description 表格列表中删除最后一页中的唯一一个数据的操作
*/
export function handleDeleteTable(length, tableFrom) {
if (length === 1 && tableFrom.page > 1) return (tableFrom.page = tableFrom.page - 1);
}