diff --git a/src/api/index.ts b/src/api/index.ts index e52b365..66d1230 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,9 +1,7 @@ -const files = import.meta.glob('./model/*.ts', { - eager: true, - import: 'default' // 可选,指定要导入的 export -}) -const modules = {} -for (const path in files) { - modules[path.replace(/(\.\/model\/|\.ts)/g, '')] = files[path] +import auth from "@/api/model/auth" +import system from "@/api/model/system" + +export default { + auth, + system } -export default modules diff --git a/src/api/model/system.ts b/src/api/model/system.ts index ea754f4..a4997bf 100644 --- a/src/api/model/system.ts +++ b/src/api/model/system.ts @@ -20,5 +20,39 @@ export default { quick: async function(data = {}){ return await http.post("menu/quick", data); }, - } + }, + dept: { + list: async function (data = {}) { + return await http.get("dept/list", data); + }, + add: async function (data = {}) { + return await http.post("dept/add", data); + }, + edit: async function (data = {}) { + return await http.put("dept/edit", data); + }, + del: async function (data = {}) { + return await http.delete("dept/del", data); + }, + option: async function (data = {}) { + return await http.get("dept/option", data); + }, + }, + role: { + list: async function (data = {}) { + return await http.get("role/list", data); + }, + add: async function (data = {}) { + return await http.post("role/add", data); + }, + edit: async function (data = {}) { + return await http.put("role/edit", data); + }, + del: async function (data = {}) { + return await http.delete("role/del", data); + }, + option: async function (data = {}) { + return await http.get("role/option", data); + }, + }, } diff --git a/src/assets/icons/Dept.vue b/src/assets/icons/Dept.vue new file mode 100644 index 0000000..4a2bf05 --- /dev/null +++ b/src/assets/icons/Dept.vue @@ -0,0 +1,3 @@ + diff --git a/src/assets/icons/Post.vue b/src/assets/icons/Post.vue new file mode 100644 index 0000000..ac1a811 --- /dev/null +++ b/src/assets/icons/Post.vue @@ -0,0 +1,3 @@ + diff --git a/src/assets/icons/User.vue b/src/assets/icons/User.vue new file mode 100644 index 0000000..4265aa8 --- /dev/null +++ b/src/assets/icons/User.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/piPage/index.vue b/src/components/piPage/index.vue new file mode 100644 index 0000000..2dd905f --- /dev/null +++ b/src/components/piPage/index.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/src/components/piTable/column.js b/src/components/piTable/column.js new file mode 100644 index 0000000..af5ab1f --- /dev/null +++ b/src/components/piTable/column.js @@ -0,0 +1,23 @@ +import { h, resolveComponent } from 'vue' + +export default { + render() { + return h ( + resolveComponent("el-table-column"), + { + index: this.index, + ...this.$attrs + }, + this.$slots + ) + }, + methods: { + index(index){ + if(this.$attrs.type=="index"){ + let page = this.$parent.$parent.currentPage + let pageSize = this.$parent.$parent.pageSize + return (page - 1) * pageSize + index + 1 + } + } + } +} diff --git a/src/components/piTable/columnSetting.vue b/src/components/piTable/columnSetting.vue new file mode 100644 index 0000000..f2c5b9e --- /dev/null +++ b/src/components/piTable/columnSetting.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/components/piTable/index.vue b/src/components/piTable/index.vue new file mode 100644 index 0000000..ddcdb70 --- /dev/null +++ b/src/components/piTable/index.vue @@ -0,0 +1,472 @@ + + + + + diff --git a/src/config/table.ts b/src/config/table.ts new file mode 100644 index 0000000..b43e9fd --- /dev/null +++ b/src/config/table.ts @@ -0,0 +1,68 @@ +import tools from '@/utils/tools' + +export default { + successCode: 0, //请求完成代码 + pageSize: 20, //表格每一页条数 + pageSizes: [10, 20, 30, 40, 50], //表格可设置的一页条数 + paginationLayout: "total, sizes, prev, pager, next, jumper", //表格分页布局,可设置"total, sizes, prev, pager, next, jumper" + parseData: function (res) { //数据分析 + return { + data: res.data, //分析无分页的数据字段结构 + rows: res.data, //分析行数据字段结构 + total: res.count, //分析总数字段结构 + summary: res.summary, //分析合计行字段结构 + msg: res.msg, //分析描述字段结构 + code: res.code //分析状态字段结构 + } + }, + request: { //请求规定字段 + page: 'page', //规定当前分页字段 + pageSize: 'limit', //规定一页条数字段 + prop: 'prop', //规定排序字段名字段 + order: 'order' //规定排序规格字段 + }, + /** + * 自定义列保存处理 + * @tableName scTable组件的props->tableName + * @column 用户配置好的列 + */ + columnSettingSave: function (tableName, column) { + return new Promise((resolve) => { + setTimeout(()=>{ + //这里为了演示使用了session和setTimeout演示,开发时应用数据请求 + tools.data.set(tableName, column) + resolve(true) + },1000) + }) + }, + /** + * 获取自定义列 + * @tableName scTable组件的props->tableName + * @column 组件接受到的props->column + */ + columnSettingGet: function (tableName, column) { + return new Promise((resolve) => { + //这里为了演示使用了session和setTimeout演示,开发时应用数据请求 + const userColumn = tools.data.get(tableName) + if(userColumn){ + resolve(userColumn) + }else{ + resolve(column) + } + }) + }, + /** + * 重置自定义列 + * @tableName scTable组件的props->tableName + * @column 组件接受到的props->column + */ + columnSettingReset: function (tableName, column) { + return new Promise((resolve) => { + //这里为了演示使用了session和setTimeout演示,开发时应用数据请求 + setTimeout(()=>{ + tools.data.remove(tableName) + resolve(column) + },1000) + }) + } +} diff --git a/src/layout/components/userbar.vue b/src/layout/components/userbar.vue index 3da5179..2c23f30 100644 --- a/src/layout/components/userbar.vue +++ b/src/layout/components/userbar.vue @@ -100,16 +100,16 @@ defineOptions({ name: "userBar" }) -import {ref, onMounted, getCurrentInstance} from "vue"; +import {ref, onMounted, getCurrentInstance} from "vue" import search from './search.vue' import setting from './setting.vue' import tasks from './tasks.vue' -import websocket from "@/utils/websocket"; -import {ElNotification} from 'element-plus'; -import tools from "@/utils/tools.js"; -import api from "@/api/index.js"; -import {useRouter} from "vue-router"; -import {useI18n} from "vue-i18n"; +import websocket from "@/utils/websocket" +import {ElNotification} from 'element-plus' +import tools from "@/utils/tools" +import api from "@/api/index" +import {useRouter} from "vue-router" +import {useI18n} from "vue-i18n" const {proxy} = getCurrentInstance() const router = useRouter() diff --git a/src/pi.ts b/src/pi.ts index 02554ab..02f9951 100644 --- a/src/pi.ts +++ b/src/pi.ts @@ -10,11 +10,15 @@ import drag from './directives/drag' import errorHandler from "@/utils/errorHandler"; import piDialog from "@/components/piDialog" +import piTable from "@/components/piTable" +import piPage from "@/components/piPage" export default { install(app: App) { // 注册全局组件 app.component('piDialog', piDialog) + app.component('piTable', piTable) + app.component('piPage', piPage) //注册全局指令 app.directive('auth', auth) diff --git a/src/utils/tools.ts b/src/utils/tools.ts index f6e55bb..8e4d166 100644 --- a/src/utils/tools.ts +++ b/src/utils/tools.ts @@ -105,7 +105,7 @@ const tools = { }, /* 复制对象 */ objCopy: function (obj) { - return JSON.parse(JSON.stringify(obj)); + return JSON.parse(JSON.stringify(obj || [])); }, /* 日期格式化 */ dateFormat: function (date, fmt='yyyy-MM-dd hh:mm:ss') { @@ -128,6 +128,21 @@ const tools = { } } return fmt; + }, + makeTreeData: function (data, pid = 0, key = "id") { + const arr = []; + for (let item of data) { + if(item.pid == pid){ + // 数据格式处理 + const tmp = item; + const children = tools.makeTreeData(data, item[key], key); + if (children.length > 0) { + tmp['children'] = children + } + arr.push(tmp) + } + } + return arr } } diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue index ba21324..15f507d 100644 --- a/src/views/system/menu/index.vue +++ b/src/views/system/menu/index.vue @@ -158,7 +158,7 @@ async function delMenu() { } menuloading.value = true var ids = CheckedNodes.map(item => item.menu_id) - var res = await api.system.menu.del({menu_id: ids.toString()}) + var res = await api.system.menu.del({ids: ids.toString()}) menuloading.value = false proxy.$message.success(res.msg) CheckedNodes.forEach(item => { diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue new file mode 100644 index 0000000..416573c --- /dev/null +++ b/src/views/system/role/index.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/src/views/system/role/save.vue b/src/views/system/role/save.vue new file mode 100644 index 0000000..4669d6b --- /dev/null +++ b/src/views/system/role/save.vue @@ -0,0 +1,124 @@ + + + + + diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue new file mode 100644 index 0000000..bcbd6dc --- /dev/null +++ b/src/views/system/user/index.vue @@ -0,0 +1,46 @@ + + + + +