This commit is contained in:
神仙都没用 2024-05-26 18:10:31 +08:00
parent 96b1293e56
commit a2337924bb
13 changed files with 10424 additions and 9801 deletions

View File

@ -9,7 +9,7 @@
"lint:eslint": "eslint \"./src/**/*.{vue,ts,tsx}\" --fix" "lint:eslint": "eslint \"./src/**/*.{vue,ts,tsx}\" --fix"
}, },
"dependencies": { "dependencies": {
"@cool-vue/crud": "^7.1.16", "@cool-vue/crud": "^7.1.18",
"@element-plus/icons-vue": "^2.3.1", "@element-plus/icons-vue": "^2.3.1",
"@vueuse/core": "^10.4.0", "@vueuse/core": "^10.4.0",
"@wangeditor/editor": "^5.1.23", "@wangeditor/editor": "^5.1.23",

View File

@ -692,17 +692,18 @@ declare namespace ClContextMenu {
} }
interface Options { interface Options {
class?: string;
hover?: hover?:
| boolean | boolean
| { | {
target?: string; target?: string;
className?: string; className?: string;
}; };
list: Item[]; list?: Item[];
} }
interface Ref { interface Ref {
open(event: Event, options: Options): Ref; open(event: Event, options: Options): { close: () => void };
close(): void; close(): void;
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@cool-vue/crud", "name": "@cool-vue/crud",
"version": "7.1.16", "version": "7.1.18",
"private": false, "private": false,
"main": "./dist/index.umd.min.js", "main": "./dist/index.umd.min.js",
"typings": "types/index.d.ts", "typings": "types/index.d.ts",
@ -11,6 +11,7 @@
"dist": "tsc && yarn build --target lib --name index ./src/index.ts" "dist": "tsc && yarn build --target lib --name index ./src/index.ts"
}, },
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"array.prototype.flat": "^1.2.4", "array.prototype.flat": "^1.2.4",
"core-js": "^3.21.1", "core-js": "^3.21.1",
"element-plus": "^2.6.1", "element-plus": "^2.6.1",
@ -21,6 +22,7 @@
"devDependencies": { "devDependencies": {
"@types/array.prototype.flat": "^1.2.1", "@types/array.prototype.flat": "^1.2.1",
"@types/clone-deep": "^4.0.1", "@types/clone-deep": "^4.0.1",
"@types/lodash-es": "^4.17.12",
"@vue/cli-plugin-babel": "^5.0.1", "@vue/cli-plugin-babel": "^5.0.1",
"@vue/cli-plugin-typescript": "^5.0.3", "@vue/cli-plugin-typescript": "^5.0.3",
"@vue/cli-service": "^5.0.3", "@vue/cli-service": "^5.0.3",

7450
packages/crud/pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,14 @@
import { defineComponent, nextTick, onMounted, reactive, ref, h, render, toRaw } from "vue"; import {
defineComponent,
nextTick,
onMounted,
reactive,
ref,
h,
render,
toRaw,
type PropType
} from "vue";
import { isString } from "lodash-es"; import { isString } from "lodash-es";
import { addClass, contains, removeClass } from "../../utils"; import { addClass, contains, removeClass } from "../../utils";
import { useRefs } from "../../hooks"; import { useRefs } from "../../hooks";
@ -11,16 +21,12 @@ const ClContextMenu = defineComponent({
props: { props: {
show: Boolean, show: Boolean,
options: { options: {
type: Object, type: Object as PropType<ClContextMenu.Options>,
default: () => { default: () => ({})
return {};
}
}, },
event: { event: {
type: Object, type: Object as PropType<ClContextMenu.Event>,
default: () => { default: () => ({})
return {};
}
} }
}, },
@ -43,7 +49,7 @@ const ClContextMenu = defineComponent({
const ids = ref(""); const ids = ref("");
// 阻止默认事件 // 阻止默认事件
function stopDefault(e: MouseEvent) { function stopDefault(e: any) {
if (e.preventDefault) { if (e.preventDefault) {
e.preventDefault(); e.preventDefault();
} }
@ -71,26 +77,22 @@ const ClContextMenu = defineComponent({
} }
// 目标元素 // 目标元素
let targetEl: any = null; let targetEl: any;
// 关闭 // 关闭
function close() { function close() {
visible.value = false; visible.value = false;
ids.value = ""; ids.value = "";
removeClass(targetEl, "cl-context-menu__target");
if (targetEl) {
removeClass(targetEl, "cl-context-menu__target");
}
} }
// 打开 // 打开
function open(event: any, options?: any) { function open(event: ClContextMenu.Event, options: ClContextMenu.Options = {}) {
let left = event.pageX;
let top = event.pageY;
if (!options) {
options = {};
}
// 点击样式 // 点击样式
if (options.hover) { if (options?.hover) {
const d = options.hover === true ? {} : options.hover; const d = options.hover === true ? {} : options.hover;
targetEl = event.target; targetEl = event.target;
@ -105,7 +107,16 @@ const ClContextMenu = defineComponent({
} }
} }
if (options.list) { // 自定义样式
if (options?.class) {
addClass(
refs["context-menu"].querySelector(".cl-context-menu__box"),
options.class
);
}
// 菜单列表
if (options?.list) {
list.value = parseList(options.list); list.value = parseList(options.list);
} }
@ -116,7 +127,10 @@ const ClContextMenu = defineComponent({
visible.value = true; visible.value = true;
nextTick(() => { nextTick(() => {
const { clientHeight: h1, clientWidth: w1 } = event.target.ownerDocument.body; let left = event.pageX;
let top = event.pageY;
const { clientHeight: h1, clientWidth: w1 } = event.target?.ownerDocument.body;
const { clientHeight: h2, clientWidth: w2 } = const { clientHeight: h2, clientWidth: w2 } =
refs["context-menu"].querySelector(".cl-context-menu__box"); refs["context-menu"].querySelector(".cl-context-menu__box");
@ -176,7 +190,7 @@ const ClContextMenu = defineComponent({
}); });
// 默认打开 // 默认打开
open(props.event, props.options); open(props.event, props?.options);
} }
}); });
@ -244,14 +258,16 @@ const ClContextMenu = defineComponent({
}); });
export const ContextMenu = { export const ContextMenu = {
open(event: any, options: ClContextMenu.Options) { open(event: ClContextMenu.Event, options: ClContextMenu.Options) {
const vm: any = h(ClContextMenu, { const vm = h(ClContextMenu, {
show: true, show: true,
event, event,
options options
}); });
render(vm, event.target.ownerDocument.createElement("div")); render(vm, event.target.ownerDocument.createElement("div"));
return vm.component?.exposed;
} }
}; };

View File

@ -76,10 +76,18 @@ export function parseTableDict(value: any, item: ClTable.Column) {
// tag 返回 // tag 返回
return result.map((e) => { return result.map((e) => {
return h( return h(
<el-tag disable-transitions effect="dark" style="margin: 2px; border: 0" />, <el-tag disable-transitions style="margin: 2px; border: 0" />,
e,
{ {
default: () => e.label type: e.type,
closable: e.closable,
hit: e.hit,
color: e.color,
size: e.size,
effect: e.effect || "dark",
round: e.round
},
{
default: () => <span>{e.label}</span>
} }
); );
}); });

View File

@ -17,7 +17,6 @@
"disableSizeLimit": true, "disableSizeLimit": true,
"baseUrl": ".", "baseUrl": ".",
"outDir": "dist", "outDir": "dist",
"types": ["webpack-env"],
"paths": {}, "paths": {},
"lib": ["esnext", "dom", "dom.iterable", "scripthost"] "lib": ["esnext", "dom", "dom.iterable", "scripthost"]
}, },

View File

@ -1,30 +1,31 @@
/// <reference types="../index" /> /// <reference types="../index" />
import { type PropType } from "vue";
declare const ClContextMenu: import("vue").DefineComponent<{ declare const ClContextMenu: import("vue").DefineComponent<{
show: BooleanConstructor; show: BooleanConstructor;
options: { options: {
type: ObjectConstructor; type: PropType<ClContextMenu.Options>;
default: () => {}; default: () => {};
}; };
event: { event: {
type: ObjectConstructor; type: PropType<ClContextMenu.Event>;
default: () => {}; default: () => {};
}; };
}, () => any, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{ }, () => any, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
show: BooleanConstructor; show: BooleanConstructor;
options: { options: {
type: ObjectConstructor; type: PropType<ClContextMenu.Options>;
default: () => {}; default: () => {};
}; };
event: { event: {
type: ObjectConstructor; type: PropType<ClContextMenu.Event>;
default: () => {}; default: () => {};
}; };
}>>, { }>>, {
options: Record<string, any>; options: ClContextMenu.Options;
show: boolean; show: boolean;
event: Record<string, any>; event: ClContextMenu.Event;
}, {}>; }, {}>;
export declare const ContextMenu: { export declare const ContextMenu: {
open(event: any, options: ClContextMenu.Options): void; open(event: ClContextMenu.Event, options: ClContextMenu.Options): Record<string, any> | null | undefined;
}; };
export default ClContextMenu; export default ClContextMenu;

View File

@ -4,5 +4,5 @@ export declare function useHeight({ config, Table }: {
config: ClTable.Config; config: ClTable.Config;
}): { }): {
maxHeight: import("vue").Ref<number>; maxHeight: import("vue").Ref<number>;
calcMaxHeight: import("lodash").DebouncedFunc<() => Promise<void>>; calcMaxHeight: import("lodash-es").DebouncedFunc<() => Promise<void>>;
}; };

File diff suppressed because it is too large Load Diff

6263
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -20,8 +20,9 @@
type="success" type="success"
:disabled="Table?.selection.length == 0" :disabled="Table?.selection.length == 0"
@click="toMove()" @click="toMove()"
>转移</el-button
> >
转移
</el-button>
<cl-flex1 /> <cl-flex1 />
<cl-search-key placeholder="搜索用户名、姓名" /> <cl-search-key placeholder="搜索用户名、姓名" />
</cl-row> </cl-row>
@ -35,8 +36,9 @@
text text
bg bg
@click="toMove(scope.row)" @click="toMove(scope.row)"
>转移</el-button
> >
转移
</el-button>
</template> </template>
</cl-table> </cl-table>
</cl-row> </cl-row>

View File

@ -1,11 +1,11 @@
import type { Merge, ModuleConfig } from "/@/cool"; import type { Merge, ModuleConfig } from "/@/cool";
// npm // npm
import Crud, { locale, setFocus } from "@cool-vue/crud"; // import Crud, { locale, setFocus } from "@cool-vue/crud";
import "@cool-vue/crud/dist/index.css"; import "@cool-vue/crud/dist/index.css";
// 调试、自定义crud // 调试、自定义crud
// import Crud, { locale, setFocus } from "/~/crud/src"; import Crud, { locale, setFocus } from "/~/crud/src";
// import "/~/crud/src/static/index.scss"; // import "/~/crud/src/static/index.scss";
export default (): Merge<ModuleConfig, CrudOptions> => { export default (): Merge<ModuleConfig, CrudOptions> => {
@ -13,8 +13,8 @@ export default (): Merge<ModuleConfig, CrudOptions> => {
label: "CRUD", label: "CRUD",
description: "快速增删改查及一系列辅助组件", description: "快速增删改查及一系列辅助组件",
author: "COOL", author: "COOL",
version: "1.0.6", version: "1.0.7",
updateTime: "2024-03-19", updateTime: "2024-05-26",
demo: "/demo/crud", demo: "/demo/crud",
// 组件全注册 // 组件全注册