diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/app.less b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/app.less index c0ab4b7..0c48611 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/app.less +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/app.less @@ -4,6 +4,7 @@ @import './lib/align.less'; @import './lib/font-size.less'; @import './lib/margin.less'; +@import './lib/width-height.less'; @import './lib/scrollbar.less'; @import './main.less'; @import './frame/dark.less'; diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/form.less b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/form.less index 8caa7eb..cda89de 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/form.less +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/form.less @@ -136,3 +136,24 @@ } } } +.yo-modal-form { + .ant-modal-body { + padding: 0; + } + .yo-form { + >h3 { + margin-top: @padding-sm; + padding: 0 @padding-md; + } + .yo-form-group { + margin-bottom: 0; + } + .ant-form-item { + border-right: 0; + border-left: 0; + &:first-child { + margin-top: -1px; + } + } + } +} diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/table.less b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/table.less index cc086b8..3b92909 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/table.less +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/table.less @@ -46,3 +46,37 @@ } } } +.yo-table { + .border-right-none { + border-right-width: 0; + &:last-child { + border-right-width: 1px; + } + } + .ant-table-content { + >.ant-table-body { + >table { + >.ant-table-thead { + >tr { + >th { + .border-right-none(); + } + } + } + >.ant-table-tbody { + >tr { + >td { + .border-right-none(); + } + } + } + } + } + } +} +.yo-table-actions { + display: inline-block; + >a { + color: darken(@primary-color, 20%); + } +} diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/width-height.css b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/width-height.css new file mode 100644 index 0000000..88ed53c --- /dev/null +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/width-height.css @@ -0,0 +1,3 @@ +.w-100-p { + width: 100%; +} diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/width-height.less b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/width-height.less new file mode 100644 index 0000000..323dabc --- /dev/null +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/width-height.less @@ -0,0 +1,3 @@ +.w-100-p { + width: 100%; +} diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/index.js b/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/index.js index b3dc121..eb6f495 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/index.js +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/index.js @@ -61,25 +61,27 @@ for (let key in urls) { } } - api[`${key}E`] = function (params = {}) { - return initInstance()[method](url, params) + api[`${key}Wait`] = function (params = {}) { + if (method === 'post') { + return initInstance().post(url, params) + } else { + return initInstance().get(url, { + params + }) + } } api[key] = function (params = {}) { return new Promise((reslove, reject) => { - api[`${key}E`](params) + api[`${key}Wait`](params) .then(({ data }) => { - if (data.code === status.OK) { - reslove(data) - } else { - reject(data) - } + reslove(data) }) .catch(err => { if (process.env.VUE_APP_NODE_ENV === 'development') { alert('发生错误,请联系管理员') } else { - console.warn(err, urls[key]) + reject(err, urls[key]) } }) }) @@ -94,10 +96,10 @@ for (let key in urls) { */ api.$queue = function (queue) { return new Promise((reslove) => { - axios.all(queue).then(axios.spread(function () { - const res = Array.prototype.slice.apply(arguments).map(p => p.data) + axios.all(queue).then((results) => { + const res = results.map(p => p.data) reslove(res) - })) + }) }) } diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests/appManage.js b/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests/appManage.js new file mode 100644 index 0000000..0840a01 --- /dev/null +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests/appManage.js @@ -0,0 +1,7 @@ +export default { + getAppPage: ['/sysApp/page', 'get'], + sysAppAdd: '/sysApp/add', + sysAppEdit: '/sysApp/edit', + sysAppDelete: '/sysApp/delete', + sysAppSetAsDefault: '/sysApp/setAsDefault' +} \ No newline at end of file diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests/dictManage.js b/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests/dictManage.js new file mode 100644 index 0000000..8d880c1 --- /dev/null +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests/dictManage.js @@ -0,0 +1,3 @@ +export default { + sysDictTypeDropDown: ['/sysDictType/dropDown', 'get'], +} \ No newline at end of file diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests.js b/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests/index.js similarity index 69% rename from Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests.js rename to Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests/index.js index c520688..c1ab57c 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests.js +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests/index.js @@ -11,12 +11,12 @@ * [url]必填,为接口地址,[method]选填,为请求方式(不区分大小写),默认为POST */ +import loginManage from './loginManage' +import dictManage from './dictManage' +import appManage from './appManage' + export default { - login: '/login', - logout: ['/logout', 'get'], - getLoginUser: ['/getLoginUser', 'get'], - - getMenu: '/menu/get', - - test: '/gate/allownullapi' + ...loginManage, + ...dictManage, + ...appManage } \ No newline at end of file diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests/loginManage.js b/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests/loginManage.js new file mode 100644 index 0000000..f8009d0 --- /dev/null +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/requests/loginManage.js @@ -0,0 +1,5 @@ +export default { + login: '/login', + logout: ['/logout', 'get'], + getLoginUser: ['/getLoginUser', 'get'], +} \ No newline at end of file diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/authorized/index.js b/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/authorized/index.js index 4e9b0a0..d917b6f 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/authorized/index.js +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/authorized/index.js @@ -16,12 +16,12 @@ * 此时验证的是同时拥有"sysApp:page"和"sysApp:add"两项权限才会渲染 * 2.3.或者关系多项权限 * 例: :auth="[['sysApp:page', 'sysApp:add'], ['sysApp:edit']]" - * 等同于: :auth="[['sysApp:page', 'sysApp:add'], 'sysApp:edit']" * 二维数组结构,内部数组之间为并且关系 * 此时验证的是"sysApp:page"&"sysApp:add"||"sysApp:edit" + * 注意:或者的条件必须包括在数组中,暴露在外则判定为并且 * 2.4.可直接传入布尔值 * 例: :auth="['sysApp:page', 1 === 1]" - * :auth="[['sysApp:page', 'sysApp:add'], 1 === 1]" + * :auth="[['sysApp:page', 'sysApp:add'], [1 === 1]]" * * 3.Json * 如果觉得多项权限时每次都要写应用编号比较繁琐,可对Array形式进行简化 @@ -31,12 +31,81 @@ * 例: :auth="{ sysApp: ['page', 'add'] }" * 3.3.或者关系多项权限 * 例: :auth="{ sysApp: [['page', 'add'], ['edit']]}" - * 等同于: :auth="{ sysApp: [['page', 'add'], 'edit']}" * 3.4.可直接传入布尔值 * 例: :auth="{ sysApp: ['page', 1 === 1] }" - * :auth="{ sysApp: [['page', 'add'], 1 === 1] }" + * :auth="{ sysApp: [['page', 'add'], [1 === 1]] }" * */ + +const authByArray = (auth, permissions) => { + + let result = true + + const flags = [] + + auth.forEach(p => { + switch (p.constructor) { + case String: + flags.push([permissions.indexOf(p) > -1, '&&']) + break + case Array: + flags.push([authByArray(p, permissions), '||']) + break + case Boolean: + flags.push([p, '&&']) + break + } + }) + + flags.forEach(p => { + result = p[1] === '&&' ? result && p[0] : result || p[0] + }) + + return result +} + +const authByJson = (auth, permissions) => { + + let result = true + + const flags = [] + + const deepName = (arr, key) => { + arr.forEach(p => { + switch (p.constructor) { + case String: + p = `${key}:${p}` + break + case Array: + p = deepName(p, key) + break + default: + p = p + break + } + }) + } + + for (let key in auth) { + const app = auth[key] + switch (app.constructor) { + case String: + flags.push(permissions.indexOf(`${key}:${p}`) > -1) + break + case Array: + flags.push(authByArray(deepName(app, key), permissions)) + break + } + } + + flags.forEach(p => { + result = result && p + }) + + return result + +} + export default { functional: true, props: { @@ -44,7 +113,7 @@ export default { default() { return new Array() }, - type: Array, + type: [Array, Object, String], }, authExclude: { default() { @@ -53,42 +122,45 @@ export default { type: Array, }, }, + render(h, context) { const { props, scopedSlots } = context - const global = context.parent.$root.global + const { info } = context.parent.$root.global + const permissions = info.permissions const auth = props.auth const authExclude = props.authExclude - if (!global.info) { + if (!info) { return false } /** * 超级管理员 */ - // if (global.info.adminType === 1) { - // return scopedSlots.default() - // } + if (info.adminType === 1) { + return scopedSlots.default() + } - if (auth.length) { - for (let i = 0; i < auth.length; i++) { - if (global.info && (auth[i] & global.info.authority) === auth[i]) { - return scopedSlots.default() - } - } - } else if (authExclude.length) { - let flag = false - for (let i = 0; i < authExclude.length; i++) { - if (global.info && (authExclude[i] & global.info.authority) === authExclude[i]) { - flag = true - } - } + let flag = false - if (!flag) { - return scopedSlots.default() + if (auth) { + switch (auth.constructor) { + case String: + flag = permissions.indexOf(auth) > -1 + break + case Array: + flag = authByArray(auth, permissions) + break + case Object: + flag = authByJson(auth, permissions) + break } } + if (flag) { + return scopedSlots.default() + } + return false }, } \ No newline at end of file diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoTable/index.js b/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoTable/index.js new file mode 100644 index 0000000..7b71ecb --- /dev/null +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoTable/index.js @@ -0,0 +1,105 @@ +export default { + props: { + pageNo: { + default: 1, + type: Number, + }, + pageSize: { + default: 20, + type: Number, + }, + loadData: { + type: Function, + require: true, + }, + columns: { + type: Array, + require: true, + }, + }, + + data() { + return { + loading: false, + + data: [], + + pagination: { + current: this.pageNo, + pageSize: this.pageSize, + total: 0, + size: 'small', + showSizeChanger: true, + showQuickJumper: true, + showTotal: (total) => `总共${total}条数据` + }, + }; + }, + + created() { + this.onLoadData() + }, + + methods: { + + onLoading() { + this.loading = { + indicator: + } + }, + + onLoaded() { + this.loading = false + }, + + onLoadData() { + this.onLoading() + + this.loadData({ + pageNo: this.pagination.current, + pageSize: this.pagination.pageSize + }).then((res) => { + this.data = res.rows + this.pagination.total = res.totalRows + this.onLoaded() + }) + }, + + onReloadData(refresh = false) { + if (refresh) { + this.pagination.current = this.pageNo + this.pagination.pageSize = this.pageSize + } + this.onLoadData() + }, + + onTableChange(pagination, filters, sorter) { + this.pagination = pagination + this.onLoadData() + } + }, + + render() { + const props = { + loading: this.loading, + pagination: this.pagination, + dataSource: this.data, + columns: this.columns, + bordered: true, + size: 'middle', + rowKey: record => record.id + } + + const on = { + change: this.onTableChange + } + + return ( + + {Object.keys(this.$slots).map((name) => ( + + ))} + + ) + }, +} \ No newline at end of file diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoTableActions/index.js b/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoTableActions/index.js new file mode 100644 index 0000000..2e32bcb --- /dev/null +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoTableActions/index.js @@ -0,0 +1,21 @@ +export default { + render() { + + const components = [] + + const slots = this.$slots.default.filter(p => p.tag) + + slots.forEach((p, i) => { + components.push(p) + if (i < slots.length - 1) { + components.push() + } + }) + + return ( +
+ {components} +
+ ) + } +} \ No newline at end of file diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/addForm.vue b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/addForm.vue new file mode 100644 index 0000000..8002997 --- /dev/null +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/addForm.vue @@ -0,0 +1,69 @@ + + \ No newline at end of file diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/editForm.vue b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/editForm.vue new file mode 100644 index 0000000..3f917c2 --- /dev/null +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/editForm.vue @@ -0,0 +1,72 @@ + + \ No newline at end of file diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/form.vue b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/form.vue new file mode 100644 index 0000000..d2368f4 --- /dev/null +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/form.vue @@ -0,0 +1,63 @@ + + \ No newline at end of file diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/index.vue b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/index.vue index 1ad8e6f..b3c6d26 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/index.vue +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/app/index.vue @@ -2,7 +2,7 @@
- +
@@ -12,131 +12,208 @@ - 查询 + + 查询 + 重置 +
- +
- Button - Button - Button - Button - - Button - Button - Button - - - - 1st item - 2nd item - 3rd item - - - Actions - - - - - Dropdown - - - 1st menu item - - - 2nd menu item - - - 3rd item - - - + 新增应用
-
+ + {{ bindCodeValue(text, 'yes_or_no') }} + +
+ + + 设为默认 + +
+
+
+ {{ bindCodeValue(text, 'common_status') }} + + + + 编辑 + + + + 删除 + + + + +

+ +