更新依赖,优化

This commit is contained in:
icssoa 2022-05-11 16:36:52 +08:00
parent 974d8f152a
commit ff9b1b8d55
31 changed files with 442 additions and 308 deletions

View File

@ -1 +1 @@
[["/admin/base/comm",[["post","/personUpdate",""],["get","/uploadMode",""],["get","/permmenu",""],["get","/person",""],["post","/upload",""],["post","/logout",""],["","/list",""],["","/page",""],["","/info",""],["","/update",""],["","/delete",""],["","/add",""]]],["/admin/base/open",[["get","/refreshToken",""],["get","/captcha",""],["post","/login",""],["get","/html",""],["get","/eps",""],["","/list",""],["","/page",""],["","/info",""],["","/update",""],["","/delete",""],["","/add",""]]],["/admin/base/sys/department",[["post","/delete",""],["post","/update",""],["post","/order",""],["post","/list",""],["post","/add",""],["","/page",""],["","/info",""]]],["/admin/base/sys/log",[["post","/setKeep",""],["get","/getKeep",""],["post","/clear",""],["post","/page",""],["","/list",""],["","/info",""],["","/update",""],["","/delete",""],["","/add",""]]],["/admin/base/sys/menu",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/base/sys/param",[["post","/delete",""],["post","/update",""],["get","/html",""],["get","/info",""],["post","/page",""],["post","/add",""],["","/list",""]]],["/admin/base/sys/role",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/base/sys/user",[["post","/delete",""],["post","/update",""],["post","/move",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/demo/goods",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/page",""],["post","/list",""],["post","/add",""]]],["/admin/space/info",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/space/type",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/task/info",[["post","/delete",""],["post","/update",""],["post","/start",""],["post","/once",""],["post","/stop",""],["get","/info",""],["post","/page",""],["get","/log",""],["post","/add",""],["","/list",""]]]]
[["/admin/base/comm",[["post","/personUpdate",""],["get","/uploadMode",""],["get","/permmenu",""],["get","/person",""],["post","/upload",""],["post","/logout",""],["","/list",""],["","/page",""],["","/info",""],["","/update",""],["","/delete",""],["","/add",""]]],["/admin/base/open",[["get","/refreshToken",""],["get","/captcha",""],["post","/login",""],["get","/html",""],["get","/eps",""],["","/list",""],["","/page",""],["","/info",""],["","/update",""],["","/delete",""],["","/add",""]]],["/admin/base/sys/department",[["post","/delete",""],["post","/update",""],["post","/order",""],["post","/list",""],["post","/add",""],["","/page",""],["","/info",""]]],["/admin/base/sys/log",[["post","/setKeep",""],["get","/getKeep",""],["post","/clear",""],["post","/page",""],["","/list",""],["","/info",""],["","/update",""],["","/delete",""],["","/add",""]]],["/admin/base/sys/menu",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/base/sys/param",[["post","/delete",""],["post","/update",""],["get","/html",""],["get","/info",""],["post","/page",""],["post","/add",""],["","/list",""]]],["/admin/base/sys/role",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/base/sys/user",[["post","/delete",""],["post","/update",""],["post","/move",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/demo/goods",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/page",""],["post","/list",""],["post","/add",""]]],["/admin/space/info",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/space/type",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/study/finish",[["post","/page",""],["","/list",""],["","/info",""],["","/update",""],["","/delete",""],["","/add",""]]],["/admin/study/learn",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/study/music",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/study/topic",[["get","/provinceCount",""],["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/study/works",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]],["/admin/task/info",[["post","/delete",""],["post","/update",""],["post","/start",""],["post","/once",""],["post","/stop",""],["get","/info",""],["post","/page",""],["get","/log",""],["post","/add",""],["","/list",""]]],["/admin/user/info",[["post","/delete",""],["post","/update",""],["get","/info",""],["post","/list",""],["post","/page",""],["post","/add",""]]]]

View File

@ -635,6 +635,232 @@ declare interface SpaceType {
};
}
declare interface StudyFinish {
/**
*
* @returns Promise<PageResponse>
*/
page(data?: any): Promise<PageResponse>;
/**
* list
* @returns Promise<any>
*/
list(data?: any): Promise<any>;
/**
* info
* @returns Promise<any>
*/
info(data?: any): Promise<any>;
/**
* update
* @returns Promise<any>
*/
update(data?: any): Promise<any>;
/**
* delete
* @returns Promise<any>
*/
delete(data?: any): Promise<any>;
/**
* add
* @returns Promise<any>
*/
add(data?: any): Promise<any>;
/**
*
*/
permission: {
page: string;
list: string;
info: string;
update: string;
delete: string;
add: string;
};
}
declare interface StudyLearn {
/**
*
* @returns Promise<any>
*/
delete(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
update(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
info(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
list(data?: any): Promise<any>;
/**
*
* @returns Promise<PageResponse>
*/
page(data?: any): Promise<PageResponse>;
/**
*
* @returns Promise<any>
*/
add(data?: any): Promise<any>;
/**
*
*/
permission: {
delete: string;
update: string;
info: string;
list: string;
page: string;
add: string;
};
}
declare interface StudyMusic {
/**
*
* @returns Promise<any>
*/
delete(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
update(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
info(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
list(data?: any): Promise<any>;
/**
*
* @returns Promise<PageResponse>
*/
page(data?: any): Promise<PageResponse>;
/**
*
* @returns Promise<any>
*/
add(data?: any): Promise<any>;
/**
*
*/
permission: {
delete: string;
update: string;
info: string;
list: string;
page: string;
add: string;
};
}
declare interface StudyTopic {
/**
*
* @returns Promise<any>
*/
provinceCount(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
delete(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
update(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
info(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
list(data?: any): Promise<any>;
/**
*
* @returns Promise<PageResponse>
*/
page(data?: any): Promise<PageResponse>;
/**
*
* @returns Promise<any>
*/
add(data?: any): Promise<any>;
/**
*
*/
permission: {
provinceCount: string;
delete: string;
update: string;
info: string;
list: string;
page: string;
add: string;
};
}
declare interface StudyWorks {
/**
*
* @returns Promise<any>
*/
delete(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
update(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
info(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
list(data?: any): Promise<any>;
/**
*
* @returns Promise<PageResponse>
*/
page(data?: any): Promise<PageResponse>;
/**
*
* @returns Promise<any>
*/
add(data?: any): Promise<any>;
/**
*
*/
permission: {
delete: string;
update: string;
info: string;
list: string;
page: string;
add: string;
};
}
declare interface TaskInfo {
/**
*
@ -703,6 +929,50 @@ declare interface TaskInfo {
};
}
declare interface UserInfo {
/**
*
* @returns Promise<any>
*/
delete(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
update(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
info(data?: any): Promise<any>;
/**
*
* @returns Promise<any>
*/
list(data?: any): Promise<any>;
/**
*
* @returns Promise<PageResponse>
*/
page(data?: any): Promise<PageResponse>;
/**
*
* @returns Promise<any>
*/
add(data?: any): Promise<any>;
/**
*
*/
permission: {
delete: string;
update: string;
info: string;
list: string;
page: string;
add: string;
};
}
declare type Service = {
request(data: RequestOptions): Promise<any>;
base: {
@ -719,5 +989,13 @@ declare type Service = {
};
demo: { goods: DemoGoods };
space: { info: SpaceInfo; type: SpaceType };
study: {
finish: StudyFinish;
learn: StudyLearn;
music: StudyMusic;
topic: StudyTopic;
works: StudyWorks;
};
task: { info: TaskInfo };
user: { info: UserInfo };
};

View File

@ -1,6 +1,6 @@
{
"name": "front-next",
"version": "5.1.3",
"version": "5.1.4",
"scripts": {
"dev": "vite --host",
"build": "vite build",
@ -9,14 +9,14 @@
"lint:eslint": "eslint \"{src,mock}/**/*.{vue,ts,tsx}\" --fix"
},
"dependencies": {
"@cool-vue/crud": "^5.0.6",
"@cool-vue/crud": "^5.0.7",
"@element-plus/icons-vue": "^1.1.3",
"@vueuse/core": "^8.2.5",
"axios": "^0.26.1",
"codemirror": "^5.62.0",
"core-js": "^3.6.5",
"echarts": "^5.0.2",
"element-plus": "^2.1.7",
"element-plus": "^2.2.0",
"file-saver": "^2.0.5",
"js-beautify": "^1.13.5",
"lodash": "^4.17.21",
@ -27,7 +27,6 @@
"quill": "^1.3.7",
"store": "^2.0.12",
"unocss": "^0.31.0",
"uuid": "^8.3.2",
"vue": "^3.2.32",
"vue-echarts": "^6.0.2",
"vue-router": "^4.0.14",
@ -61,7 +60,7 @@
"svg-sprite-loader": "^6.0.2",
"typescript": "^4.6.2",
"unplugin-vue-components": "^0.17.21",
"vite": "^2.9.6",
"vite": "^2.9.8",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-dts": "^0.9.9",
"vite-plugin-mock": "^2.9.6",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -1,6 +1,7 @@
import modules from "/@/modules";
import { router, addViews } from "../router";
import { isFunction, isObject, filename } from "../utils";
import { filename } from "../utils";
import { isFunction, isObject } from "lodash";
import { App } from "vue";
import module from "../utils/module";

View File

@ -1,6 +1,6 @@
// @ts-nocheck
import { baseUrl, isDev, test } from "../config";
import { isObject } from "../utils";
import { isObject } from "lodash";
import request from "./request";
export function Service(

View File

@ -1,6 +1,7 @@
import { isDev, test } from "../config";
import { BaseService } from "./base";
import { storage, toCamel, isArray } from "../utils";
import { storage, toCamel } from "../utils";
import { isArray, isEmpty } from "lodash";
// 获取标签名
function getNames(v: any) {
@ -71,6 +72,7 @@ export function useEps(service: Service) {
url: "/admin/base/open/eps"
})
.then(async (res) => {
if (!isEmpty(res)) {
const isLoaded: boolean = storage.get("eps");
storage.set("eps", res);
@ -80,6 +82,7 @@ export function useEps(service: Service) {
set(res, true);
console.log("[Eps] 初始化成功。");
}
}
})
.catch((err) => {
console.error("[Eps] 获取失败!", err.message);
@ -190,23 +193,17 @@ export function useEps(service: Service) {
getEps();
}
} else {
const eps: any[] = [];
JSON.parse(__EPS__).forEach((e: any) => {
const [prefix, api] = e;
eps.push({
const eps = JSON.parse(__EPS__).map(([prefix, api]: any[]) => {
return {
prefix,
api: api.map((e: string[]) => {
const [method, path, name] = e;
api: api.map(([method, path, name]: string[]) => {
return {
method,
path,
name
};
})
});
};
});
// 文件数据

View File

@ -1,75 +1,8 @@
import { isArray, orderBy } from "lodash";
import { app } from "../config";
import storage from "./storage";
import module from "./module";
// 是否Array类型
export function isArray(value: any): boolean {
if (typeof Array.isArray === "function") {
return Array.isArray(value);
} else {
return Object.prototype.toString.call(value) === "[object Array]";
}
}
// 是否Object类型
export function isObject(value: any): boolean {
return Object.prototype.toString.call(value) === "[object Object]";
}
// 是否Function类型
export function isFunction(value: any): boolean {
return typeof value === "function";
}
// 是否String类型
export function isString(value: any): boolean {
return typeof value === "string";
}
// 是否Boolean类型
export function isBoolean(value: any): boolean {
return typeof value === "boolean";
}
// 是否数字类型
export function isNumber(value: any): boolean {
return typeof value === "number" && !isNaN(value);
}
// 是否Promise类型
export function isPromise(value: any): boolean {
return (
value !== null &&
(typeof value === "object" || typeof value === "function") &&
typeof value.then === "function"
);
}
// 是否为空
export function isEmpty(value: any): boolean {
if (isArray(value)) {
return value.length === 0;
}
if (isObject(value)) {
return Object.keys(value).length === 0;
}
return value === "" || value === undefined || value === null;
}
// 比较值
export function compareValue(a: any, b: any) {
return String(a) === String(b);
}
// 取最后一个值
export function last(data: string | any[]) {
if (isArray(data) || isString(data)) {
return data[data.length - 1];
}
}
// 首字母大写
export function firstUpperCase(value: string): string {
return value.replace(/\b(\w)(\w*)/g, function ($0, $1, $2) {
@ -82,29 +15,6 @@ export function getNames(value: any) {
return Object.getOwnPropertyNames(value.constructor.prototype);
}
// 深拷贝
export function cloneDeep(v: any) {
if (isObject(v)) {
const d: any = {};
for (const k in v) {
if (v.hasOwnProperty && v.hasOwnProperty(k)) {
if (v[k] && typeof v[k] === "object") {
d[k] = cloneDeep(v[k]);
} else {
d[k] = v[k];
}
}
}
return d;
} else if (isArray(v)) {
return v.map(cloneDeep);
} else {
return v;
}
}
// 深度合并
export function deepMerge(a: any, b: any) {
let k;
@ -123,11 +33,6 @@ export function getUrlParam(name: string): string | null {
return null;
}
// 根据某个字段排序
export function orderBy(list: any[], key: string): any[] {
return list.sort((a, b) => b[key] - a[key]);
}
// 文件路径转对象
export function deepFiles(list: any[]) {
const modules: any = {};

View File

@ -1,79 +0,0 @@
import Mock from "mockjs";
Mock.mock("/im/session/page", "post", (options: any) => {
const { keyWord = "" } = JSON.parse(options.body);
const data = Mock.mock({
"list|20": [
{
id: "@id",
nickname: "@name",
createTime: "@datetime(yy-MM-dd HH:mm:ss)",
text: "@cparagraph(5)",
content() {
return JSON.stringify({ text: this.text });
},
"contentType|0-3": 0,
"serviceUnreadCount|0-10": 0,
headimgurl() {
return Mock.Random.image(
"40x40",
Mock.Random.color(),
"#FFF",
"png",
this.nickname[0]
);
}
}
]
});
return {
code: 1000,
data: {
list: data.list.filter((e: any) => e.nickname.includes(keyWord)),
pagination: {}
}
};
});
Mock.mock("/im/session/unreadCount", "get", () => {
const data = Mock.mock({
"count|1-50": 1
});
return {
code: 1000,
data: data.count
};
});
Mock.setup({
timeout: "500-1000"
});
Mock.mock("/im/message/page", "post", () => {
const data = Mock.mock({
"list|20": [
{
id: "@id",
nickname: "@name",
createTime: "@datetime",
text: "@cparagraph(1, 4)",
content() {
return JSON.stringify({ text: this.text });
},
contentType: 0,
"type|0-1": 1
}
]
});
return {
code: 1000,
data: {
list: data.list,
pagination: {}
}
};
});

View File

@ -1,5 +1,5 @@
import { useBaseStore } from "../store";
import { isObject } from "/@/cool/utils";
import { isObject } from "lodash";
function parse(value: any) {
const { menu } = useBaseStore();

View File

@ -12,7 +12,7 @@
<script lang="ts">
import { computed, defineComponent, PropType } from "vue";
import { isNumber } from "/@/cool/utils";
import { isNumber } from "lodash";
import { User } from "@element-plus/icons-vue";
export default defineComponent({

View File

@ -9,7 +9,7 @@
import { computed, defineComponent, onMounted, ref, watch } from "vue";
import Quill from "quill";
import "quill/dist/quill.snow.css";
import { isNumber } from "/@/cool/utils";
import { isNumber } from "lodash";
export default defineComponent({
name: "cl-editor-quill",

View File

@ -6,7 +6,7 @@
<script lang="ts">
import { computed, defineComponent, ref } from "vue";
import { isNumber } from "/@/cool/utils";
import { isNumber } from "lodash";
export default defineComponent({
name: "icon-svg",

View File

@ -28,7 +28,7 @@
<script lang="ts">
import { computed, defineComponent } from "vue";
import { isArray, isNumber, isString } from "/@/cool/utils";
import { isArray, isNumber, isString } from "lodash";
import { PictureFilled } from "@element-plus/icons-vue";
export default defineComponent({

View File

@ -6,7 +6,7 @@
<script lang="ts">
import { defineComponent, computed } from "vue";
import { isArray, isString, last } from "/@/cool/utils";
import { isArray, isString, last } from "lodash";
import { Link } from "@element-plus/icons-vue";
export default defineComponent({

View File

@ -1,7 +1,7 @@
import { useCrud } from "@cool-vue/crud";
import { ElMessage } from "element-plus";
import { defineComponent, ref, watch } from "vue";
import { isBoolean } from "/@/cool/utils";
import { isBoolean } from "lodash";
export default defineComponent({
name: "cl-switch",

View File

@ -26,7 +26,7 @@
<script lang="ts" setup>
import { watch } from "vue";
import { last } from "/@/cool/utils";
import { last } from "lodash";
import { useCool } from "/@/cool";
import { ArrowLeft, Close } from "@element-plus/icons-vue";
import { ContextMenu } from "@cool-vue/crud";

View File

@ -1,7 +1,7 @@
<template>
<div class="page-login">
<div class="box">
<img class="logo" :src="Logo" alt="Logo" />
<img class="logo" src="/@/assets/logo-text.png" alt="Logo" />
<p class="desc">一款快速开发后台权限管理系统</p>
<el-form label-position="top" class="form" :disabled="saving" size="large">
@ -60,7 +60,6 @@ import { ElMessage } from "element-plus";
import { useCool } from "/@/cool";
import { useBaseStore } from "/$/base";
import Captcha from "./components/captcha.vue";
import Logo from "/@/assets/logo-text.png";
export default defineComponent({
cool: {
@ -88,6 +87,27 @@ export default defineComponent({
verifyCode: ""
});
//
function getPath(list: any[]) {
let path = "";
function deep(arr: any[]) {
arr.forEach((e: any) => {
if (e.type == 1) {
if (!path) {
path = e.path;
}
} else {
deep(e.children);
}
});
}
deep(list);
return path || "/";
}
//
async function toLogin() {
if (!form.username) {
@ -114,12 +134,12 @@ export default defineComponent({
await user.get();
//
const [first] = await menu.get();
const path = getPath(await menu.get());
if (!first) {
ElMessage.error("该账号没有权限!");
if (path) {
router.push(path);
} else {
router.push("/");
ElMessage.error("该账号没有权限!");
}
} catch (err: any) {
refs.value.captcha.refresh();
@ -134,8 +154,7 @@ export default defineComponent({
setRefs,
form,
saving,
toLogin,
Logo
toLogin
};
}
});

View File

@ -1,11 +1,11 @@
import { ElMessage } from "element-plus";
import { defineStore } from "pinia";
import { ref } from "vue";
import { deepTree, isArray, isEmpty, isObject, revDeepTree, storage } from "/@/cool/utils";
import { deepTree, revDeepTree, storage } from "/@/cool/utils";
import { isArray, isEmpty, isObject, orderBy } from "lodash";
import { app } from "/@/cool/config";
import { addViews, service } from "/@/cool";
import { revisePath } from "../utils";
import { orderBy } from "lodash";
declare enum Type {
"目录" = 0,
@ -133,7 +133,7 @@ export const useMenuStore = defineStore("menu", function () {
name: e.name,
icon: e.icon,
orderNum: e.orderNum,
isShow: isEmpty(e.isShow) ? true : e.isShow,
isShow: e.isShow === undefined ? true : e.isShow,
meta: {
label: e.name,
keepAlive: e.keepAlive
@ -160,9 +160,7 @@ export const useMenuStore = defineStore("menu", function () {
if (isEmpty(app.menu.list)) {
service.base.comm
.permmenu()
.then((res) => {
next(res);
})
.then(next)
.catch((err) => {
ElMessage.error("菜单加载异常!");
reject(err);

View File

@ -3,31 +3,7 @@ export function revisePath(path: string) {
return "";
}
if (path[0] == "/") {
return path;
} else {
return `/${path}`;
}
}
export function firstMenu(list: Array<any>) {
let path = "";
const fn = (arr: Array<any>) => {
arr.forEach((e: any) => {
if (e.type == 1) {
if (!path) {
path = e.path;
}
} else {
fn(e.children);
}
});
};
fn(list);
return path || "/404";
return path[0] == "/" ? path : `/${path}`;
}
export function createLink(url: string, id?: string) {

View File

@ -64,10 +64,11 @@
import { defineComponent, onMounted, ref } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import { useCool } from "/@/cool";
import { deepTree, isArray, revDeepTree } from "/@/cool/utils";
import { deepTree, revDeepTree } from "/@/cool/utils";
import { isArray } from "lodash";
import { ContextMenu, useForm } from "@cool-vue/crud";
import { Refresh, Operation, MoreFilled } from "@element-plus/icons-vue";
import { useBaseStore } from "../../store";
import { useBaseStore } from "/$/base";
export default defineComponent({
name: "dept-tree",

View File

@ -5,7 +5,7 @@
<script lang="ts">
import { defineComponent } from "vue";
import { last, isEmpty } from "/@/cool/utils";
import { last, isEmpty } from "lodash";
import { ElMessage } from "element-plus";
import { useCool } from "/@/cool";
import { useForm } from "@cool-vue/crud";
@ -202,7 +202,7 @@ export default defineComponent({
":"
)
)
.join(";");
.join(",");
perms.push(d);
});

View File

@ -15,7 +15,7 @@
<script lang="ts">
import { defineComponent, ref, watch } from "vue";
import { useCool } from "/@/cool";
import { isObject } from "/@/cool/utils";
import { isObject } from "lodash";
export default defineComponent({
name: "menu-perms",

View File

@ -42,7 +42,7 @@ import { ElMessage } from "element-plus";
import { reactive, ref } from "vue";
import { useBaseStore } from "/$/base";
import { useCool } from "/@/cool";
import { cloneDeep } from "/@/cool/utils";
import { cloneDeep } from "lodash";
const { service } = useCool();
const { user } = useBaseStore();

View File

@ -56,7 +56,9 @@
<template #slot-add="{ scope }">
<el-button
v-if="scope.row.type != 2"
type="text"
type="primary"
text
bg
@click="upsertAppend(scope.row)"
>新增</el-button
>
@ -201,6 +203,7 @@ const Table = useTable({
{
label: "操作",
type: "op",
width: 250,
buttons: ["slot-add", "edit", "delete"]
}
]

View File

@ -213,7 +213,7 @@ const Table = useTable({
{
type: "op",
buttons: ["slot-btn", "edit", "delete"],
width: 160
width: 180
}
]
});

View File

@ -133,9 +133,9 @@ export default {
<script lang="ts" setup>
import { PictureFilled, ZoomIn, Delete, Document } from "@element-plus/icons-vue";
import { computed, ref, reactive, watch, PropType } from "vue";
import { v4 as uuidv4 } from "uuid";
import { useCool } from "/@/cool";
import { isArray, extname, module, isNumber } from "/@/cool/utils";
import { extname, module, uuid } from "/@/cool/utils";
import { isArray, isNumber } from "lodash";
import { ElMessage } from "element-plus";
import { useBaseStore } from "/$/base";
import Draggable from "vuedraggable";
@ -299,7 +299,7 @@ async function httpRequest(req: any, item?: any) {
try {
// uuid + filename
let fileName = uuidv4() + "_" + req.file.name;
let fileName = uuid() + "_" + req.file.name;
const { mode, type } = await service.base.comm.uploadMode();
//
@ -415,7 +415,7 @@ watch(
return {
type: fileType(url),
progress: 0,
uid: uuidv4(),
uid: uuid(),
url,
preload: url
};

View File

@ -107,7 +107,8 @@ export default {
<script lang="ts" setup>
import { computed, onMounted, provide, reactive, ref, watch } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import { isEmpty, module } from "/@/cool/utils";
import { module } from "/@/cool/utils";
import { isEmpty } from "lodash";
import Category from "./space/category.vue";
import FileItem from "./space/file-item.vue";
import { useCool } from "/@/cool";

View File

@ -35,7 +35,7 @@
<script lang="ts" setup>
import { ElMessage, ElMessageBox } from "element-plus";
import { computed, inject, onMounted, ref } from "vue";
import { isEmpty } from "/@/cool/utils";
import { isEmpty } from "lodash";
import { useCool } from "/@/cool";
import { ContextMenu, useForm } from "@cool-vue/crud";
import { useBaseStore } from "/$/base/store";

127
yarn.lock
View File

@ -984,19 +984,19 @@
"@babel/helper-validator-identifier" "^7.16.7"
to-fast-properties "^2.0.0"
"@cool-vue/crud@^5.0.6":
version "5.0.6"
resolved "https://registry.npmjs.org/@cool-vue/crud/-/crud-5.0.6.tgz#7b216fa0ba1ba7ce1477fa0735205a512c7a7ef3"
integrity sha512-NOL6d1dkDqHI0xuQcpNcaEa3IGSajxMYXbLnk89r3WlnYOvFe5f0XbReWhHM5R31uROncpmoN2AnWROI+GCagg==
"@cool-vue/crud@^5.0.7":
version "5.0.7"
resolved "https://registry.npmjs.org/@cool-vue/crud/-/crud-5.0.7.tgz#60459f3e58b04a08c621aa41e25c03618645bd6b"
integrity sha512-/I4f6KFpPHiJE86w2pHAwu2Gn2WAd2LCFn6Bc3jzgg6RdYlAeIyRB9Ph8KasE7CCjyPdb2kyDYEQsZhOfODy9g==
dependencies:
array.prototype.flat "^1.2.4"
core-js "^3.21.1"
element-plus "^2.1.4"
element-plus "^2.2.0"
merge "^2.1.1"
mitt "^3.0.0"
vue "^3.2.31"
"@ctrl/tinycolor@^3.4.0":
"@ctrl/tinycolor@^3.4.1":
version "3.4.1"
resolved "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32"
integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==
@ -1021,17 +1021,17 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
"@floating-ui/core@^0.6.1":
version "0.6.1"
resolved "https://registry.npmjs.org/@floating-ui/core/-/core-0.6.1.tgz#aed861a1b6dbebadf14a9dd829ba67f4f3ae795c"
integrity sha512-Y30eVMcZva8o84c0HcXAtDO4BEzPJMvF6+B7x7urL2xbAqVsGJhojOyHLaoQHQYjb6OkqRq5kO+zeySycQwKqg==
"@floating-ui/core@^0.6.2":
version "0.6.2"
resolved "https://registry.npmjs.org/@floating-ui/core/-/core-0.6.2.tgz#f2813f0e5f3d5ed7af5029e1a082203dadf02b7d"
integrity sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg==
"@floating-ui/dom@^0.4.2":
version "0.4.4"
resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.4.4.tgz#e0919d23e40bcc84ce2ebe1b9701b211f2d84b3c"
integrity sha512-0Ulu3B/dqQplUUSqnTx0foSrlYuMN+GTtlJWvNJwt6Fr7/PqmlR/Y08o6/+bxDWr6p3roBJRaQ51MDZsNmEhhw==
"@floating-ui/dom@^0.4.5":
version "0.4.5"
resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.4.5.tgz#2e88d16646119cc67d44683f75ee99840475bbfa"
integrity sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw==
dependencies:
"@floating-ui/core" "^0.6.1"
"@floating-ui/core" "^0.6.2"
"@hapi/hoek@^9.0.0":
version "9.2.1"
@ -1127,10 +1127,10 @@
resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
"@popperjs/core@^2.11.4":
version "2.11.5"
resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64"
integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==
"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.6":
version "2.11.7"
resolved "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz#a7f69e3665d3da9b115f9e71671dae1b97e13671"
integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==
"@rollup/plugin-node-resolve@^13.0.4":
version "13.2.0"
@ -1231,11 +1231,16 @@
dependencies:
"@types/lodash" "*"
"@types/lodash@*", "@types/lodash@^4.14.168", "@types/lodash@^4.14.181":
"@types/lodash@*", "@types/lodash@^4.14.168":
version "4.14.181"
resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz#d1d3740c379fda17ab175165ba04e2d03389385d"
integrity sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==
"@types/lodash@^4.14.182":
version "4.14.182"
resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2"
integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==
"@types/mockjs@^1.0.4":
version "1.0.6"
resolved "https://registry.npmjs.org/@types/mockjs/-/mockjs-1.0.6.tgz#dafdd5de65156f7aa63eab4e29fa3d532cd95609"
@ -1784,7 +1789,7 @@
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.2.32.tgz#1ca0c3b8c03a5e24129156e171df736b2c1d645f"
integrity sha512-bjcixPErUsAnTQRQX4Z5IQnICYjIfNCyCl8p29v1M6kfVzvwOICPw+dz48nNuWlTOOx2RHhzHdazJibE8GSnsw==
"@vueuse/core@^8.2.4", "@vueuse/core@^8.2.5":
"@vueuse/core@^8.2.5":
version "8.2.5"
resolved "https://registry.npmjs.org/@vueuse/core/-/core-8.2.5.tgz#ca6a59091ecf16e6739c53f3d857b11967a5eb06"
integrity sha512-5prZAA1Ji2ltwNUnzreu6WIXYqHYP/9U2BiY5mD/650VYLpVcwVlYznJDFcLCmEWI3o3Vd34oS1FUf+6Mh68GQ==
@ -1793,11 +1798,25 @@
"@vueuse/shared" "8.2.5"
vue-demi "*"
"@vueuse/core@^8.2.6":
version "8.4.2"
resolved "https://registry.npmjs.org/@vueuse/core/-/core-8.4.2.tgz#e5be73f40394150e6a1b6abd59e5adb7c6bb6c1f"
integrity sha512-dUVU96lii1ZdWoNJXauQNt+4QrHz1DKbuW+y6pDR2N10q7rGZJMDU7pQeMcC2XeosX7kMODfaBuqsF03NozzLg==
dependencies:
"@vueuse/metadata" "8.4.2"
"@vueuse/shared" "8.4.2"
vue-demi "*"
"@vueuse/metadata@8.2.5":
version "8.2.5"
resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.2.5.tgz#51c7d95e04284ea378a5242a2e88b77494e2c117"
integrity sha512-Lk9plJjh9cIdiRdcj16dau+2LANxIdFCiTgdfzwYXbflxq0QnMBeOD2qHgKDE7fuVrtPcVWj8VSuZEx1HRfNQA==
"@vueuse/metadata@8.4.2":
version "8.4.2"
resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.4.2.tgz#b33e6b7bd5ca69e3f24ea41b149267118bcd566f"
integrity sha512-2BIj++7P0/I5dfMsEe8q7Kw0HqVAjVcyNOd9+G22/ILUC9TVLTeYOuJ1kwa1Gpr+0LWKHc6GqHiLWNL33+exoQ==
"@vueuse/shared@8.2.5":
version "8.2.5"
resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-8.2.5.tgz#1ae200a240c4b8d42d41723b64d8f917aa57ff16"
@ -1805,6 +1824,13 @@
dependencies:
vue-demi "*"
"@vueuse/shared@8.4.2":
version "8.4.2"
resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-8.4.2.tgz#5900f06ff78bd8b6df4cbf48f8ca82dd6d9747d1"
integrity sha512-hILXMEjL8YQhj1LHN/HZ49UThyfk8irTjhele2nW+L3N55ElFUBGB/f4w0rg8EW+/suhqv7kJJPTZzvHCqxlIw==
dependencies:
vue-demi "*"
"@webassemblyjs/ast@1.11.1":
version "1.11.1"
resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
@ -2692,10 +2718,10 @@ csstype@^2.6.8:
resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda"
integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
dayjs@^1.11.0:
version "1.11.0"
resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.0.tgz#009bf7ef2e2ea2d5db2e6583d2d39a4b5061e805"
integrity sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==
dayjs@^1.11.1:
version "1.11.2"
resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz#fa0f5223ef0d6724b3d8327134890cfe3d72fbe5"
integrity sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw==
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
@ -2912,20 +2938,20 @@ electron-to-chromium@^1.4.84:
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.107.tgz#564257014ab14033b4403a309c813123c58a3fb9"
integrity sha512-Huen6taaVrUrSy8o7mGStByba8PfOWWluHNxSHGBrCgEdFVLtvdQDBr9LBCF9Uci8SYxh28QNNMO0oC17wbGAg==
element-plus@^2.1.4, element-plus@^2.1.7:
version "2.1.9"
resolved "https://registry.npmjs.org/element-plus/-/element-plus-2.1.9.tgz#8779b041f32f871eef2f903ee4c0da16dfb13024"
integrity sha512-6mWqS3YrmJPnouWP4otzL8+MehfOnDFqDbcIdnmC07p+Z0JkWe/CVKc4Wky8AYC8nyDMUQyiZYvooCbqGuM7pg==
element-plus@^2.2.0:
version "2.2.0"
resolved "https://registry.npmjs.org/element-plus/-/element-plus-2.2.0.tgz#58467d1efde071c2bc12caa9fb451e515667fc78"
integrity sha512-zxmAFEAa1T/n09rR+NozXcWl5CjaFtqoaxhFSafag0dgc90tgEHitDXfegdFAl4ahugdNTqu9aLzngx3VhDAtA==
dependencies:
"@ctrl/tinycolor" "^3.4.0"
"@ctrl/tinycolor" "^3.4.1"
"@element-plus/icons-vue" "^1.1.4"
"@floating-ui/dom" "^0.4.2"
"@popperjs/core" "^2.11.4"
"@types/lodash" "^4.14.181"
"@floating-ui/dom" "^0.4.5"
"@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.6"
"@types/lodash" "^4.14.182"
"@types/lodash-es" "^4.17.6"
"@vueuse/core" "^8.2.4"
"@vueuse/core" "^8.2.6"
async-validator "^4.0.7"
dayjs "^1.11.0"
dayjs "^1.11.1"
escape-html "^1.0.3"
lodash "^4.17.21"
lodash-es "^4.17.21"
@ -4717,6 +4743,11 @@ nanoid@^3.3.1:
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz#c89622fafb4381cd221421c69ec58547a1eec557"
integrity sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==
nanoid@^3.3.3:
version "3.3.4"
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
nanomatch@^1.2.1:
version "1.2.13"
resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
@ -5124,7 +5155,7 @@ postcss@^5.2.17:
source-map "^0.5.6"
supports-color "^3.2.3"
postcss@^8.1.10, postcss@^8.4.12:
postcss@^8.1.10:
version "8.4.12"
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905"
integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==
@ -5133,6 +5164,15 @@ postcss@^8.1.10, postcss@^8.4.12:
picocolors "^1.0.0"
source-map-js "^1.0.2"
postcss@^8.4.13:
version "8.4.13"
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz#7c87bc268e79f7f86524235821dfdf9f73e5d575"
integrity sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==
dependencies:
nanoid "^3.3.3"
picocolors "^1.0.0"
source-map-js "^1.0.2"
posthtml-parser@^0.2.0, posthtml-parser@^0.2.1:
version "0.2.1"
resolved "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz#35d530de386740c2ba24ff2eb2faf39ccdf271dd"
@ -6295,11 +6335,6 @@ utils-merge@1.0.1:
resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
v8-compile-cache@^2.0.3:
version "2.3.0"
resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
@ -6366,13 +6401,13 @@ vite-svg-loader@^2.1.0:
"@vue/compiler-sfc" "^3.0.11"
svgo "^2.3.0"
vite@^2.9.6:
version "2.9.6"
resolved "https://registry.npmjs.org/vite/-/vite-2.9.6.tgz#29f1b33193b0de9e155d67ba0dd097501c3c3281"
integrity sha512-3IffdrByHW95Yjv0a13TQOQfJs7L5dVlSPuTt432XLbRMriWbThqJN2k/IS6kXn5WY4xBLhK9XoaWay1B8VzUw==
vite@^2.9.8:
version "2.9.8"
resolved "https://registry.npmjs.org/vite/-/vite-2.9.8.tgz#2c2cb0790beb0fbe4b8c0995b80fe691a91c2545"
integrity sha512-zsBGwn5UT3YS0NLSJ7hnR54+vUKfgzMUh/Z9CxF1YKEBVIe213+63jrFLmZphgGI5zXwQCSmqIdbPuE8NJywPw==
dependencies:
esbuild "^0.14.27"
postcss "^8.4.12"
postcss "^8.4.13"
resolve "^1.22.0"
rollup "^2.59.0"
optionalDependencies: