diff --git a/package.json b/package.json index 0262dfc..071fe68 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "element-plus": "^2.3.5", "jsencrypt": "^3.3.2", "jsplumb": "^2.15.6", + "lodash.clonedeep": "^4.5.0", "mitt": "^3.0.0", "pinia": "^2.1.3", "sass": "^1.62.1", diff --git a/public.zip b/public.zip deleted file mode 100644 index 5086de3..0000000 Binary files a/public.zip and /dev/null differ diff --git a/src/assets/images/sort-icon.png b/src/assets/images/sort-icon.png new file mode 100644 index 0000000..78e7f4a Binary files /dev/null and b/src/assets/images/sort-icon.png differ diff --git a/src/components/FormDialog/FormDialog.vue b/src/components/FormDialog/FormDialog.vue new file mode 100644 index 0000000..8bdc1f1 --- /dev/null +++ b/src/components/FormDialog/FormDialog.vue @@ -0,0 +1,139 @@ + + + + \ No newline at end of file diff --git a/src/components/TableBody/TableBody.vue b/src/components/TableBody/TableBody.vue new file mode 100644 index 0000000..7c3cd7b --- /dev/null +++ b/src/components/TableBody/TableBody.vue @@ -0,0 +1,128 @@ + + + + diff --git a/src/components/TableBody/TableData.vue b/src/components/TableBody/TableData.vue new file mode 100644 index 0000000..9911a68 --- /dev/null +++ b/src/components/TableBody/TableData.vue @@ -0,0 +1,123 @@ + + + + diff --git a/src/components/TableBody/TableHeader.vue b/src/components/TableBody/TableHeader.vue new file mode 100644 index 0000000..71bddd9 --- /dev/null +++ b/src/components/TableBody/TableHeader.vue @@ -0,0 +1,207 @@ + + + diff --git a/src/components/TableBody/TablePagination.vue b/src/components/TableBody/TablePagination.vue new file mode 100644 index 0000000..c1e1809 --- /dev/null +++ b/src/components/TableBody/TablePagination.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/components/TableBody/example.vue b/src/components/TableBody/example.vue new file mode 100644 index 0000000..e5760f6 --- /dev/null +++ b/src/components/TableBody/example.vue @@ -0,0 +1,323 @@ + + + + + diff --git a/src/components/TableBody/table-body.scss b/src/components/TableBody/table-body.scss new file mode 100644 index 0000000..e1b77c1 --- /dev/null +++ b/src/components/TableBody/table-body.scss @@ -0,0 +1,113 @@ +.table-header { + margin-bottom: 16px; + display: flex; + align-items: center; + justify-content: space-between; + + .table-header-left { + display: flex; + align-items: center; + > * { + margin-right: 12px; + } + + > .el-button { + padding: 8px 10px; + margin-left: 0; + } + } + + .table-header-right { + display: flex; + align-items: center; + justify-content: flex-end; + > * { + margin-left: 12px; + } + + > .el-button { + padding: 8px 10px; + } + .search-input { + flex-basis: 220px; + min-width: 150px; + } + .mix-input { + flex-basis: 320px; + min-width: 280px; + } + .table-header-right-sort { + flex-basis: 180px; + display: flex; + align-items: center; + background-color: #fff; + border-radius: 5px; + box-sizing: border-box; + border: 1px solid #dcdfe6; + .thrs-img { + width: 16px; + height: 16px; + } + .thrs-search { + margin-right: 0 !important; + width: 160px !important; + + .select-trigger .el-input .el-input__wrapper { + box-shadow: none !important; + + // .el-input__suffix { + // display: none; + // } + } + } + .arrow-filter { + width: 16px !important; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + width: 10px; + height: 24px; + cursor: pointer; + + .arrow-top { + cursor: pointer; + border: 5px solid transparent; + border-bottom: 5px solid #bfbfbf; + + &.arrow-active { + border-bottom-color: #729880; + } + } + + .arrow-bottom { + border: 5px solid transparent; + border-top: 5px solid #bfbfbf; + + &.arrow-active { + border-top-color: #729880; + } + } + } + } + } +} + +.ydool_filter { + padding: 0 12px; + display: flex; + flex-direction: column; +} + +.ydool_pagination { + margin-top: 12px; +} + +.table-body .el-table__inner-wrapper { + &::before { + content: none; + } + &.is-border::before { + content: ""; + } +} diff --git a/src/main.js b/src/main.js index 65ef138..d4d8206 100644 --- a/src/main.js +++ b/src/main.js @@ -15,6 +15,8 @@ import { appComponent } from "@/scripts/dynamicComponent"; import "@/scripts/grape-import"; import { table } from "@/compiler/testCode"; import http from "@/utils/request.js"; +import { permission } from "@/utils/directive.js"; + const app = createApp(App); var loadDynamicComponent = false; @@ -85,5 +87,6 @@ for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.component(key, component) } +app.directive("permission", permission); app.use(ElementPlus).use(VForm3).use(createPinia()).use(router).mount("#app"); diff --git a/src/router/index.js b/src/router/index.js index eab47af..9d0faa1 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -30,6 +30,17 @@ const routes = [ name: "home", meta: { title: "欢迎" }, }, + + /** + * 数据路由 + */ + // 项目管理 + { + path: "/project-manage", + component: () => import("../views/projectManage/index.vue"), + name: "ProjectManage", + meta: { title: "项目管理" }, + }, ], }, { @@ -44,13 +55,13 @@ const routes = [ path: "/codemirror", name: "codemirror", mete: { - title: "编辑器", + title: "编辑器", }, component: () => import("../views/codemirror/index.vue"), - }, + }, // { // path: "/data-flow-editor", - // name: "data-flow-editor", + // name: "data-flow-editor", // mete: { // title: "数据中台", // }, diff --git a/src/store/perms.js b/src/store/perms.js new file mode 100644 index 0000000..f50c6e5 --- /dev/null +++ b/src/store/perms.js @@ -0,0 +1,17 @@ +import { defineStore } from "pinia"; +import tools from "@/utils/tools"; +let user = tools.data.get("user"); +let ownPermission = user?.perms || []; + +export const usePerms = defineStore("perms", { + state: () => { + return { + perms: [...ownPermission], + }; + }, + actions: { + changePerms(val) { + this.perms = [...val]; + }, + }, +}); diff --git a/src/utils/directive.js b/src/utils/directive.js new file mode 100644 index 0000000..5762a6d --- /dev/null +++ b/src/utils/directive.js @@ -0,0 +1,20 @@ +// 全局指令 +import { usePerms } from "@/store/perms.js"; +let ownPermission = []; +function toolPermission(el, permission) { + ownPermission = usePerms(); + if (permission && !ownPermission.perms.includes(permission)) { + el.parentNode && el.parentNode.removeChild(el); + } +} + +const permission = { + mounted(el, binding) { + toolPermission(el, binding.value); + }, + updated(el, binding) { + toolPermission(el, binding.value); + }, +}; + +export { permission }; diff --git a/src/views/projectManage/index.vue b/src/views/projectManage/index.vue new file mode 100644 index 0000000..04045e5 --- /dev/null +++ b/src/views/projectManage/index.vue @@ -0,0 +1,367 @@ + + + + diff --git a/yarn.lock b/yarn.lock index 683cf93..c318831 100644 --- a/yarn.lock +++ b/yarn.lock @@ -758,6 +758,11 @@ lodash-unified@^1.0.2: resolved "https://registry.yarnpkg.com/lodash-unified/-/lodash-unified-1.0.3.tgz#80b1eac10ed2eb02ed189f08614a29c27d07c894" integrity sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ== +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"