diff --git a/.env.development b/.env.development index 0bb782a..b6a3143 100644 --- a/.env.development +++ b/.env.development @@ -5,7 +5,7 @@ VITE_PUBLIC_PATH = '/' VITE_APP_USE_MOCK = false # proxy -VITE_PROXY = [["/api-dev","http://127.0.0.1:8002/api"]] +VITE_PROXY = [["/api-dev","http://192.168.11.11:9070/api"]] # base api VITE_APP_GLOB_BASE_API = '/api-dev' \ No newline at end of file diff --git a/mock/system/index.js b/mock/system/index.js index 15848ac..365e488 100644 --- a/mock/system/index.js +++ b/mock/system/index.js @@ -21,6 +21,7 @@ function deepClone(source) { const menuList = [] const userList = [] +// const deptList = [] const count = 100 for (let i = 0; i < count; i++) { @@ -48,7 +49,84 @@ for (let i = 0; i < count; i++) { createTime: '@datetime', updateTime: '@datetime' })) + // deptList.push(Mock.mock({ + // code: '', + // id: 1, + // name: '@name', + // fullname: '@cname', + // 'pid|1': [1, 2, 3, 4, 5], + // 'sort|+1': 0, + // type: 1, + // 'note|1-8': '好', + // createTime: '@datetime', + // updateTime: '@datetime' + // })) } +const deptList = Mock.mock({ + code: 0, + message: '获取成功', + type: 'success', + data: [{ + code: 'XH212313', + id: 1, + name: '@name', + fullname: '@cname', + pid: 0, + sort: 0, + type: 1, + 'note|1-8': '好', + createTime: '@datetime', + updateTime: '@datetime' + }, + { + code: 'XH212312', + id: 2, + name: '@name', + fullname: '@cname', + pid: 1, + sort: 0, + type: 2, + 'note|1-8': '好', + createTime: '@datetime', + updateTime: '@datetime' + }, + { + code: 'XH212323', + id: 3, + name: '@name', + fullname: '@cname', + pid: 2, + sort: 0, + type: 2, + 'note|1-8': '好', + createTime: '@datetime', + updateTime: '@datetime' + }, + { + code: 'XH212319', + id: 4, + name: '@name', + fullname: '@cname', + pid: 0, + sort: 1, + type: 1, + 'note|1-8': '好', + createTime: '@datetime', + updateTime: '@datetime' + }, + { + code: 'XH212398', + id: 5, + name: '@name', + fullname: '@cname', + pid: 0, + sort: 2, + type: 2, + 'note|1-8': '好', + createTime: '@datetime', + updateTime: '@datetime' + }] +}) export default [ { @@ -90,5 +168,20 @@ export default [ } return resultSuccess(data) } + }, + { + url: '/api-mock/dept/apiIndex', + timeout: 1000, + method: 'get', + response: config => { + const { page = 1, limit = 10 } = config.query + const data = { + list: deptList, + page: Number(page), + limit: Number(limit), + total: 5 + } + return resultSuccess(data) + } } ] diff --git a/mock/system/router.js b/mock/system/router.js index 4ea86ec..9b99b23 100644 --- a/mock/system/router.js +++ b/mock/system/router.js @@ -31,6 +31,14 @@ const asyncRoutes = [ meta: { title: '角色管理' } + }, + { + path: 'dept', + component: 'views/system/dept/index', + name: 'SystemDept', + meta: { + title: '部门管理' + } } ] } diff --git a/package-lock.json b/package-lock.json index cb76d58..0624a21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "@vicons/antd": "^0.10.0", "@vicons/ionicons5": "^0.10.0", "axios": "^0.26.1", - "dayjs": "^1.11.0", + "dayjs": "^1.11.2", "mockjs": "^1.1.0", "pinia": "^2.0.13", "vue": "^3.2.16", @@ -3049,7 +3049,11 @@ "node_modules/connect/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +<<<<<<< HEAD "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", +======= + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", +>>>>>>> 40d50ccf36aef63b9c0df852b2171d9185ea2c1f "dev": true }, "node_modules/consola": { @@ -3535,9 +3539,15 @@ } }, "node_modules/dayjs": { +<<<<<<< HEAD "version": "1.11.3", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==" +======= + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz", + "integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw==" +>>>>>>> 40d50ccf36aef63b9c0df852b2171d9185ea2c1f }, "node_modules/debug": { "version": "4.3.4", @@ -4352,9 +4362,15 @@ } }, "node_modules/esbuild-register": { +<<<<<<< HEAD "version": "3.3.3", "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.3.3.tgz", "integrity": "sha512-eFHOkutgIMJY5gc8LUp/7c+LLlDqzNi9T6AwCZ2WKKl3HmT+5ef3ZRyPPxDOynInML0fgaC50yszPKfPnjC0NQ==", +======= + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.3.2.tgz", + "integrity": "sha512-jceAtTO6zxPmCfSD5cBb3rgIK1vmuqCKYwgylHiS1BF4pq0jJiJb4K2QMuqF4BEw7XDBRatYzip0upyTzfkgsQ==", +>>>>>>> 40d50ccf36aef63b9c0df852b2171d9185ea2c1f "dev": true, "peerDependencies": { "esbuild": ">=0.12 <1" @@ -6082,7 +6098,11 @@ "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", +<<<<<<< HEAD "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", +======= + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", +>>>>>>> 40d50ccf36aef63b9c0df852b2171d9185ea2c1f "dev": true }, "node_modules/is-number": { @@ -6232,9 +6252,15 @@ } }, "node_modules/jake/node_modules/async": { +<<<<<<< HEAD "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", +======= + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", +>>>>>>> 40d50ccf36aef63b9c0df852b2171d9185ea2c1f "dev": true }, "node_modules/jake/node_modules/chalk": { @@ -7854,9 +7880,15 @@ } }, "node_modules/pinia/node_modules/vue-demi": { +<<<<<<< HEAD "version": "0.13.1", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.1.tgz", "integrity": "sha512-xmkJ56koG3ptpLnpgmIzk9/4nFf4CqduSJbUM0OdPoU87NwRuZ6x49OLhjSa/fC15fV+5CbEnrxU4oyE022svg==", +======= + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz", + "integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==", +>>>>>>> 40d50ccf36aef63b9c0df852b2171d9185ea2c1f "hasInstallScript": true, "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", @@ -13694,7 +13726,11 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +<<<<<<< HEAD "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", +======= + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", +>>>>>>> 40d50ccf36aef63b9c0df852b2171d9185ea2c1f "dev": true } } @@ -14049,9 +14085,15 @@ "requires": {} }, "dayjs": { +<<<<<<< HEAD "version": "1.11.3", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==" +======= + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz", + "integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw==" +>>>>>>> 40d50ccf36aef63b9c0df852b2171d9185ea2c1f }, "debug": { "version": "4.3.4", @@ -14603,9 +14645,15 @@ "optional": true }, "esbuild-register": { +<<<<<<< HEAD "version": "3.3.3", "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.3.3.tgz", "integrity": "sha512-eFHOkutgIMJY5gc8LUp/7c+LLlDqzNi9T6AwCZ2WKKl3HmT+5ef3ZRyPPxDOynInML0fgaC50yszPKfPnjC0NQ==", +======= + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.3.2.tgz", + "integrity": "sha512-jceAtTO6zxPmCfSD5cBb3rgIK1vmuqCKYwgylHiS1BF4pq0jJiJb4K2QMuqF4BEw7XDBRatYzip0upyTzfkgsQ==", +>>>>>>> 40d50ccf36aef63b9c0df852b2171d9185ea2c1f "dev": true, "requires": {} }, @@ -15884,7 +15932,11 @@ "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", +<<<<<<< HEAD "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", +======= + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", +>>>>>>> 40d50ccf36aef63b9c0df852b2171d9185ea2c1f "dev": true }, "is-number": { @@ -15989,9 +16041,15 @@ }, "dependencies": { "async": { +<<<<<<< HEAD "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", +======= + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", +>>>>>>> 40d50ccf36aef63b9c0df852b2171d9185ea2c1f "dev": true }, "chalk": { @@ -17254,9 +17312,15 @@ }, "dependencies": { "vue-demi": { +<<<<<<< HEAD "version": "0.13.1", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.1.tgz", "integrity": "sha512-xmkJ56koG3ptpLnpgmIzk9/4nFf4CqduSJbUM0OdPoU87NwRuZ6x49OLhjSa/fC15fV+5CbEnrxU4oyE022svg==", +======= + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz", + "integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==", +>>>>>>> 40d50ccf36aef63b9c0df852b2171d9185ea2c1f "requires": {} } } diff --git a/package.json b/package.json index 6e263dc..80b8df6 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "@vicons/antd": "^0.10.0", "@vicons/ionicons5": "^0.10.0", "axios": "^0.26.1", - "dayjs": "^1.11.0", + "dayjs": "^1.11.2", "mockjs": "^1.1.0", "pinia": "^2.0.13", "vue": "^3.2.16", diff --git a/src/App.vue b/src/App.vue index 907fbcf..b267072 100644 --- a/src/App.vue +++ b/src/App.vue @@ -2,16 +2,25 @@ - - - + + + + + + + + + diff --git a/src/components/DataTable/tools/props.js b/src/components/DataTable/tools/props.js index 876a8b7..3d86f04 100644 --- a/src/components/DataTable/tools/props.js +++ b/src/components/DataTable/tools/props.js @@ -30,7 +30,7 @@ export const tableProps = { // 每页数量字段名 sizeField: 'limit', // 接口返回的数据字段名 - listField: 'list', + listField: 'records', // 接口返回总页数字段名 totalField: 'total', // 默认分页数量 diff --git a/src/components/DataTable/tools/toTree.js b/src/components/DataTable/tools/toTree.js new file mode 100644 index 0000000..65888c3 --- /dev/null +++ b/src/components/DataTable/tools/toTree.js @@ -0,0 +1,69 @@ +/** + * pid形式数据转children形式 + * @param data 需要转换的数组 + * @param idKey id字段名 + * @param pidKey pid字段名 + * @param childKey 生成的children字段名 + * @param pid 顶级的pid + * @param addPIds 是否添加所有父级id的字段 + * @param parentsKey 所有父级id的字段名称,默认parentIds + * @param parentIds 所有父级id + * @returns {[]} + */ +export function toTreeData(data, idKey, pidKey, childKey, pid, addPIds, parentsKey, parentIds) { + if (typeof data === 'object' && !Array.isArray(data)) { + idKey = data.idKey + pidKey = data.pidKey + childKey = data.childKey + pid = data.pid + addPIds = data.addPIds + parentsKey = data.parentsKey + parentIds = data.parentIds + data = data.data + } + if (!childKey) { + childKey = 'children' + } + if (typeof pid === 'undefined') { + pid = [] + data.forEach((d) => { + let flag = true + for (let i = 0; i < data.length; i++) { + if (d[pidKey] === data[i][idKey]) { + flag = false + break + } + } + if (flag) { + pid.push(d[pidKey]) + } + }) + } + const result = [] + data.forEach((d) => { + if (d[idKey] === d[pidKey]) { + console.error('data error: ', d) + return + } + if (Array.isArray(pid) ? (pid.indexOf(d[pidKey]) !== -1) : (d[pidKey] === pid)) { + const children = toTreeData({ + data: data, + idKey: idKey, + pidKey: pidKey, + childKey: childKey, + pid: d[idKey], + addPIds: addPIds, + parentsKey: parentsKey, + parentIds: (parentIds || []).concat([d[idKey]]) + }) + if (children.length > 0) { + d[childKey] = children + } + if (addPIds) { + d[parentsKey || 'parentIds'] = parentIds || [] + } + result.push(d) + } + }) + return result +} diff --git a/src/components/DataTable/tools/useDataSource.js b/src/components/DataTable/tools/useDataSource.js index fad04b9..c0ed56a 100644 --- a/src/components/DataTable/tools/useDataSource.js +++ b/src/components/DataTable/tools/useDataSource.js @@ -1,5 +1,6 @@ import { ref, unref, computed, onMounted } from 'vue' import { isBoolean } from '@/utils/is' +import { toTreeData } from './toTree' export function useDataSource(propsRef, { getPaginationInfo, setPagination, setLoading, tableData }, emit) { const dataSourceRef = ref([]) @@ -42,6 +43,7 @@ export function useDataSource(propsRef, { getPaginationInfo, setPagination, setL fetch(opt) } } + // 处理数据结构 const resultInfo = res[listField] ? res[listField] : [] dataSourceRef.value = dataType === 'tree' ? dealTree(resultInfo) : resultInfo setPagination({ @@ -67,8 +69,12 @@ export function useDataSource(propsRef, { getPaginationInfo, setPagination, setL } } - function dealTree() { - const tree = [] + /** + * 递归遍历数据处理成树形结构 + * @returns 返回树形结构数据 + */ + function dealTree(info) { + const tree = toTreeData(info.data, 'id', 'pid', 'children') return tree } diff --git a/src/components/DataTable_back/index.vue b/src/components/DataTable_back/index.vue deleted file mode 100644 index a9abc57..0000000 --- a/src/components/DataTable_back/index.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - - - 刷新 - - - - - - - - - - - - - - - - diff --git a/src/components/DataTable_back/tools/props.js b/src/components/DataTable_back/tools/props.js deleted file mode 100644 index 8d952a0..0000000 --- a/src/components/DataTable_back/tools/props.js +++ /dev/null @@ -1,35 +0,0 @@ -import { NDataTable } from 'naive-ui' - -export const tableProps = { - ...NDataTable.props, - /* 初始化接口请求 */ - request: { - type: Function, - default: null - }, - /* 分页信息 */ - pagination: { - type: [Object, Boolean], - default: () => {} - }, - /* 分页设置信息 */ - paginationSetting: { - type: Object, - default: () => { - return { - // 当前页的字段名 - pageField: 'page', - // 每页数量字段名 - sizeField: 'pageSize', - // 接口返回的数据字段名 - listField: 'list', - // 接口返回总页数字段名 - totalField: 'pageCount', - // 默认分页数量 - defaultPageSize: 10, - // 可切换每页数量集合 - pageSizes: [10, 20, 30, 40, 50] - } - } - } -} diff --git a/src/components/DataTable_back/tools/useDataSource.js b/src/components/DataTable_back/tools/useDataSource.js deleted file mode 100644 index 5b6e611..0000000 --- a/src/components/DataTable_back/tools/useDataSource.js +++ /dev/null @@ -1,99 +0,0 @@ -import { ref, unref, computed, onMounted } from 'vue' -import { isBoolean } from '@/utils/is' - -export function useDataSource(propsRef, { getPaginationInfo, setPagination, setLoading, tableData }, emit) { - const dataSourceRef = ref([]) - - async function fetch(opt) { - try { - // setLoading(true) - const { request, pagination } = unref(propsRef) - /* 无接口请求中断 */ - if (!request) return - /* 获取分页信息 */ - const paginationSetting = propsRef.paginationSetting - const pageField = paginationSetting.pageField - const sizeField = paginationSetting.sizeField - const totalField = paginationSetting.totalField - const listField = paginationSetting.listField - - let pageParams = {} - const { page = 1, pageSize = 10 } = unref(getPaginationInfo) - if ((isBoolean(pagination) && !pagination) || isBoolean(getPaginationInfo)) { - pageParams = {} - } else { - pageParams[pageField] = (opt && opt[pageField]) || page - pageParams[sizeField] = pageSize - } - - const params = { - ...pageParams - } - const res = await request(params) - console.log('res', res) - const resultTotal = res[totalField] || 0 - const currentPage = res[pageField] - - // // 如果数据异常,需获取正确的页码再次执行 - // if (resultTotal) { - // if (page > resultTotal) { - // setPagination({ - // [pageField]: resultTotal - // }) - // fetch(opt) - // } - // } - const resultInfo = res[listField] ? res[listField] : [] - dataSourceRef.value = resultInfo - setPagination({ - [pageField]: currentPage, - [totalField]: resultTotal - }) - // if (opt && opt[pageField]) { - // setPagination({ - // [pageField]: opt[pageField] || 1 - // }) - // } - emit('fetch-success', { - items: unref(resultInfo), - resultTotal - }) - } catch (error) { - console.error(error) - // emit('fetch-error', error) - // dataSourceRef.value = [] - } finally { - setLoading(false) - } - } - - const getDataSourceRef = computed(() => { - const dataSource = unref(dataSourceRef) - if (!dataSource || dataSource.length === 0) { - return unref(dataSourceRef) - } - return unref(dataSourceRef) - }) - - function getDataSource() { - console.log(getDataSourceRef.value) - return getDataSourceRef.value - } - - function setTableData(values) { - dataSourceRef.value = values - } - - onMounted(() => { - setTimeout(() => { - fetch() - }, 15) - }) - - return { - fetch, - getDataSourceRef, - getDataSource, - setTableData - } -} diff --git a/src/components/DataTable_back/tools/usePagination.js b/src/components/DataTable_back/tools/usePagination.js deleted file mode 100644 index 6c449bc..0000000 --- a/src/components/DataTable_back/tools/usePagination.js +++ /dev/null @@ -1,34 +0,0 @@ -import { computed, unref, ref } from 'vue' -import { isBoolean } from '@/utils/is' - -export function usePagination(refProps) { - const configRef = ref({}) - const show = ref(true) - console.log('configRef', configRef) - console.log('refProps', refProps) - const getPaginationInfo = computed(() => { - const { pagination, paginationSetting } = unref(refProps) - if (!unref(show) || (isBoolean(pagination) && !pagination)) { - return false - } - return { - pageSize: paginationSetting.defaultPageSize, - pageSizes: paginationSetting.pageSizes, - showSizePicker: true, - showQuickJumper: true, - ...(isBoolean(pagination) ? {} : pagination), - ...unref(configRef), - pageCount: unref(configRef)[paginationSetting.totalField] - } - }) - - function setPagination(info) { - const paginationInfo = unref(getPaginationInfo) - configRef.value = { - ...(!isBoolean(paginationInfo) ? paginationInfo : {}), - ...info - } - } - - return { getPaginationInfo, setPagination } -} diff --git a/src/components/Dialog/index.vue b/src/components/Dialog/index.vue index 2d527fe..8d8418f 100644 --- a/src/components/Dialog/index.vue +++ b/src/components/Dialog/index.vue @@ -1,6 +1,54 @@ - + + + + diff --git a/src/components/ImgUpload/index.vue b/src/components/ImgUpload/index.vue new file mode 100644 index 0000000..37a7280 --- /dev/null +++ b/src/components/ImgUpload/index.vue @@ -0,0 +1,83 @@ + + + + 点击上传 + + + + + + + + + diff --git a/src/components/Message/index.vue b/src/components/Message/index.vue index f288a73..06d50c2 100644 --- a/src/components/Message/index.vue +++ b/src/components/Message/index.vue @@ -1,4 +1,6 @@ - + + + diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue new file mode 100644 index 0000000..b1a85cb --- /dev/null +++ b/src/views/system/dept/index.vue @@ -0,0 +1,157 @@ + + + + + + 新建 + 删除 + + + + + + + + diff --git a/src/views/system/menu/components/MenuModal.vue b/src/views/system/menu/components/MenuModal.vue index f008d84..bf4296e 100644 --- a/src/views/system/menu/components/MenuModal.vue +++ b/src/views/system/menu/components/MenuModal.vue @@ -1,36 +1,185 @@ - + - 111 + + + + + + + + + + + + {{ item.label }} + + + + + + + + + + + + + + {{ item.label }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ item.label }} + + + + + + + + + {{ item.label }} + + + + + + + + diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index 7c75b49..90e31e5 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -1,29 +1,36 @@ - - - - 新建 - - - 删除 - - - - + + + + 新建 + + + + + +