From fe37e2e1dfda90295f2b7add3024aa40b42aef66 Mon Sep 17 00:00:00 2001 From: weicw <594098497@qq.com> Date: Tue, 7 Nov 2023 17:15:33 +0800 Subject: [PATCH] 1107 --- .gitignore | 3 + App.vue | 130 + LICENSE.md | 21 + README.md | 305 +++ app.config.js | 135 + app.config.menu.js | 13 + changelog.md | 1748 ++++++++++++ changelog.new.md | 14 + common/css/app.scss | 47 + common/css/uni.scss | 104 + common/function/myPubFunction.js | 15 + common/theme/black.js | 23 + common/theme/blackWhite.js | 23 + common/theme/index.js | 9 + common/theme/white.js | 23 + common/uni-admin/css/uni-icons.css | 542 ++++ common/uni-admin/css/uni.css | 543 ++++ common/uni-admin/说明.md | 35 + .../vk-data-input-editor.vue | 1005 +++++++ main.js | 55 + manifest.json | 88 + package-lock.json | 125 + package.json | 96 + pages-dev.json | 61 + pages.js | 24 + pages.json | 125 + pages/config/site.vue | 147 + pages/enquiry/attributes/list.vue | 320 +++ pages/enquiry/template/list.vue | 335 +++ pages/index/index.vue | 79 + pages/login/index.vue | 276 ++ pages/product/goods/list.vue | 358 +++ pages/product/product-category/list.vue | 338 +++ .../product-category/product-category.vue | 74 + pages_plugs/error/403.vue | 77 + pages_plugs/error/404.vue | 77 + pages_plugs/error/500.vue | 77 + .../app-upgrade-center/form/addUpdate.vue | 278 ++ .../system/app-upgrade-center/list.vue | 305 +++ pages_plugs/system/app/form/addUpdate.vue | 515 ++++ .../system/app/form/createPublishHtml.vue | 207 ++ pages_plugs/system/app/list.vue | 215 ++ .../system/menu/form/addMenuByJson.vue | 171 ++ .../system/menu/form/bindPermission.vue | 218 ++ pages_plugs/system/menu/list.vue | 364 +++ .../system/permission/form/updateCategory.vue | 105 + .../system/permission/form/updateLevel.vue | 106 + pages_plugs/system/permission/list.vue | 386 +++ pages_plugs/system/role/form/bindMenu.vue | 215 ++ .../system/role/form/bindPermission.vue | 264 ++ pages_plugs/system/role/list.vue | 340 +++ pages_plugs/system/user/form/bindRole.vue | 160 ++ .../system/user/form/resetPassword.vue | 146 + .../user/form/setAuthorizedAppLogin.vue | 178 ++ pages_plugs/system/user/list.vue | 473 ++++ pages_plugs/system_uni/opendb-admin-log.vue | 119 + .../uni-id-files/form/addCategory.vue | 128 + .../system_uni/uni-id-files/form/preview.vue | 107 + .../uni-id-files/form/updateCategory.vue | 130 + .../uni-id-files/form/updateFileCategory.vue | 137 + .../uni-id-files/form/updateFileName.vue | 128 + .../uni-id-files/form/updateVideo.vue | 131 + .../uni-id-files/form/uploadProgress.vue | 143 + pages_plugs/system_uni/uni-id-files/list.vue | 704 +++++ pages_plugs/system_uni/uni-id-log.vue | 182 ++ .../system_uni/vk-components-dynamic.vue | 289 ++ pages_plugs/system_uni/vk-global-data.vue | 221 ++ pages_plugs/system_uni/vk-pay-orders.vue | 227 ++ .../components/detail/detail-basic.vue | 170 ++ .../components/detail/detail-table.vue | 169 ++ .../components/dialog/dialog-basic.vue | 101 + .../components/dialog/dialog-form.vue | 141 + .../components/dialog/dialog-table.vue | 119 + pages_template/components/editor/editor.vue | 93 + .../components/form/form-array-object.vue | 274 ++ pages_template/components/form/form-basic.vue | 157 ++ pages_template/components/form/form-cert.vue | 88 + .../components/form/form-dialog-2.vue | 182 ++ .../components/form/form-dialog.vue | 142 + .../components/form/form-inline.vue | 152 ++ .../components/form/form-pay-cert.vue | 197 ++ pages_template/components/form/form-pro.vue | 543 ++++ pages_template/components/form/form-slot.vue | 142 + .../components/icons/element-icons-page.vue | 122 + .../components/icons/element-icons.vue | 121 + .../components/icons/js/element-icons.js | 282 ++ .../components/icons/js/vk-icons.js | 468 ++++ .../components/icons/vk-icons-page.vue | 100 + pages_template/components/icons/vk-icons.vue | 99 + .../components/input/input-address.vue | 99 + .../components/input/input-json.vue | 85 + .../components/input/input-money.vue | 98 + .../components/input/input-number-box.vue | 146 + .../components/input/input-number.vue | 130 + .../components/input/input-percentage.vue | 99 + .../components/input/input-province.vue | 86 + .../components/input/input-remote-select.vue | 89 + .../components/input/input-select.vue | 119 + pages_template/components/input/input.vue | 90 + .../components/table/table-basic.vue | 85 + .../components/table/table-easy.vue | 308 +++ .../components/table/table-expand.vue | 304 +++ .../components/table/table-query.vue | 155 ++ .../components/upload/upload-basic.vue | 93 + .../components/upload/upload-drag.vue | 78 + pages_template/element/detail/detail.vue | 259 ++ pages_template/element/form/advanced-form.vue | 484 ++++ pages_template/element/form/basic-form.vue | 271 ++ pages_template/element/form/step-form.vue | 307 +++ pages_template/element/popup/alert.vue | 132 + pages_template/element/popup/dialog.vue | 219 ++ pages_template/element/popup/drawer.vue | 256 ++ pages_template/element/popup/loading.vue | 280 ++ pages_template/element/popup/message-box.vue | 237 ++ pages_template/element/popup/message.vue | 203 ++ pages_template/element/popup/notification.vue | 267 ++ pages_template/element/popup/popconfirm.vue | 111 + pages_template/element/popup/popover.vue | 158 ++ pages_template/element/popup/tooltip.vue | 203 ++ pages_template/element/result/fail.vue | 179 ++ pages_template/element/result/success.vue | 169 ++ pages_template/element/setting/account.vue | 429 +++ pages_template/kong/kong.vue | 74 + pages_template/kong/list.vue | 247 ++ postcss.config.js | 23 + static/bg/001.jpg | Bin 0 -> 132027 bytes static/bg/002.jpg | Bin 0 -> 229008 bytes static/bg/003.jpg | Bin 0 -> 213552 bytes static/bg/004.jpg | Bin 0 -> 606924 bytes static/bg/005.jpg | Bin 0 -> 394616 bytes static/bg/006.jpg | Bin 0 -> 489954 bytes static/bg/007.jpg | Bin 0 -> 584690 bytes static/icon/icon-403.svg | 119 + static/icon/icon-404.svg | 63 + static/icon/icon-500.svg | 162 ++ static/icon/loading.gif | Bin 0 -> 72788 bytes static/logo.png | Bin 0 -> 20235 bytes static/logo1.png | Bin 0 -> 21276 bytes static/logo2.png | Bin 0 -> 26089 bytes static/logo3.png | Bin 0 -> 51120 bytes static/plugs/element/index.css | 1 + static/plugs/quill/image-resize.min.js | 1 + static/plugs/quill/index.css | 951 +++++++ static/plugs/quill/quill.min.js | 8 + static_menu/menu-dev.json | 468 ++++ static_menu/menu.json | 59 + store/index.js | 133 + store/modules/$app.js | 78 + store/modules/$error.js | 54 + store/modules/$user.js | 51 + template.h5.html | 35 + uni.scss | 1 + .../cloudfunctions/router/config.js | 12 + .../cloudfunctions/router/dao/index.js | 29 + .../router/dao/modules/userDao.js | 621 +++++ .../cloudfunctions/router/index.js | 7 + .../cloudfunctions/router/middleware/index.js | 29 + .../router/middleware/modules/addAdminLog.js | 63 + .../middleware/modules/customFilter1.js | 22 + .../middleware/modules/customFilter2.js | 19 + .../middleware/modules/registerInitFilter.js | 46 + .../modules/returnUserInfoFilter.js | 81 + .../cloudfunctions/router/package.json | 28 + .../cloudfunctions/router/router.param.json | 13 + .../router/service/admin/kong/sys/add.js | 34 + .../router/service/admin/kong/sys/delete.js | 29 + .../router/service/admin/kong/sys/getList.js | 29 + .../router/service/admin/kong/sys/update.js | 40 + .../router/service/admin/select/kh/user.js | 96 + .../app-upgrade-center/sys/addUpdate.js | 162 ++ .../system/app-upgrade-center/sys/delete.js | 34 + .../system/app-upgrade-center/sys/getList.js | 31 + .../app-upgrade-center/util/formRules.js | 83 + .../service/admin/system/app/sys/add.js | 100 + .../admin/system/app/sys/createPublishHtml.js | 22 + .../service/admin/system/app/sys/delete.js | 31 + .../service/admin/system/app/sys/getInfo.js | 26 + .../service/admin/system/app/sys/getList.js | 31 + .../service/admin/system/app/sys/update.js | 98 + .../app/util/createPublishHtml/index.js | 214 ++ .../createPublishHtml/lib/art-template.js | 2 + .../app/util/createPublishHtml/template.html | 241 ++ .../admin/system/app/util/formRules.js | 72 + .../service/admin/system/menu/sys/add.js | 87 + .../service/admin/system/menu/sys/adds.js | 74 + .../admin/system/menu/sys/bindPermission.js | 33 + .../service/admin/system/menu/sys/delete.js | 40 + .../service/admin/system/menu/sys/getAll.js | 31 + .../admin/system/menu/sys/getCascader.js | 57 + .../service/admin/system/menu/sys/update.js | 87 + .../admin/system/menu/sys/updateBase.js | 43 + .../admin/system/menu/util/formRules.js | 80 + .../admin/system/permission/sys/add.js | 96 + .../admin/system/permission/sys/delete.js | 39 + .../admin/system/permission/sys/getAll.js | 30 + .../admin/system/permission/sys/update.js | 97 + .../admin/system/permission/sys/updateBase.js | 40 + .../system/permission/sys/updateCategory.js | 34 + .../system/permission/sys/updateLevel.js | 34 + .../admin/system/permission/util/formRules.js | 46 + .../service/admin/system/role/sys/add.js | 58 + .../service/admin/system/role/sys/bindMenu.js | 49 + .../admin/system/role/sys/bindPermission.js | 40 + .../service/admin/system/role/sys/delete.js | 28 + .../service/admin/system/role/sys/getList.js | 51 + .../service/admin/system/role/sys/update.js | 50 + .../admin/system/role/sys/updateBase.js | 37 + .../admin/system/role/util/formRules.js | 43 + .../service/admin/system/user/sys/add.js | 93 + .../system/user/sys/batchUpdateAppLogin.js | 78 + .../system/user/sys/batchUpdateInviterUid.js | 42 + .../system/user/sys/batchUpdateStatus.js | 40 + .../service/admin/system/user/sys/bindRole.js | 29 + .../service/admin/system/user/sys/delete.js | 32 + .../service/admin/system/user/sys/getList.js | 54 + .../admin/system/user/sys/resetPassword.js | 27 + .../service/admin/system/user/sys/update.js | 102 + .../admin/system/user/util/formRules.js | 81 + .../admin/system_uni/admin-log/sys/getList.js | 32 + .../system_uni/components-dynamic/sys/add.js | 61 + .../components-dynamic/sys/delete.js | 32 + .../components-dynamic/sys/getList.js | 32 + .../components-dynamic/sys/update.js | 69 + .../admin/system_uni/global-data/sys/add.js | 59 + .../system_uni/global-data/sys/delete.js | 33 + .../system_uni/global-data/sys/getList.js | 32 + .../system_uni/global-data/sys/update.js | 52 + .../system_uni/global-data/util/formRules.js | 64 + .../system_uni/pay-orders/sys/afreshNotice.js | 117 + .../system_uni/pay-orders/sys/getList.js | 29 + .../uni-id-files/categories/kh/getList.js | 33 + .../uni-id-files/categories/sys/add.js | 51 + .../uni-id-files/categories/sys/delete.js | 30 + .../uni-id-files/categories/sys/update.js | 57 + .../uni-id-files/files/kh/delete.js | 60 + .../uni-id-files/files/kh/getList.js | 40 + .../uni-id-files/files/kh/update.js | 64 + .../system_uni/uni-id-log/sys/getList.js | 66 + .../router/service/admin/后台PC管理端.md | 17 + .../service/client/小程序、h5、APP客户端.md | 11 + .../service/common/公共逻辑(公共接口).md | 0 .../cloudfunctions/router/service/muban.js | 35 + .../router/service/muban_easy.js | 23 + .../plugs/baidu/client/pub/getAccessToken.js | 21 + .../baidu/client/pub/ocr/business_license.js | 29 + .../plugs/baidu/client/pub/ocr/idcard.js | 29 + .../client/pub/getComponentsDynamicData.js | 37 + .../components_dynamic/client/pub/init.js | 138 + .../components_dynamic/client/pub/update.js | 29 + .../router/service/plugs/插件.md | 15 + .../template/db_api/pub/Promise.all.js | 54 + .../router/service/template/db_api/pub/add.js | 36 + .../service/template/db_api/pub/adds.js | 51 + .../router/service/template/db_api/pub/avg.js | 27 + .../service/template/db_api/pub/count.js | 28 + .../router/service/template/db_api/pub/del.js | 33 + .../service/template/db_api/pub/deleteById.js | 25 + .../service/template/db_api/pub/findById.js | 33 + .../template/db_api/pub/findByWhereJson.js | 32 + .../router/service/template/db_api/pub/geo.js | 31 + .../service/template/db_api/pub/getList.js | 73 + .../service/template/db_api/pub/groupCount.js | 38 + .../router/service/template/db_api/pub/max.js | 27 + .../router/service/template/db_api/pub/min.js | 27 + .../service/template/db_api/pub/sample.js | 27 + .../service/template/db_api/pub/select.js | 30 + .../service/template/db_api/pub/select2.js | 50 + .../service/template/db_api/pub/selects.js | 51 + .../template/db_api/pub/selects_geo.js | 47 + .../template/db_api/pub/selects_getOne.js | 48 + .../template/db_api/pub/selects_mode_2.js | 43 + .../template/db_api/pub/selects_mode_3.js | 44 + .../router/service/template/db_api/pub/sum.js | 29 + .../service/template/db_api/pub/update.js | 30 + .../template/db_api/pub/updateAndReturn.js | 63 + .../service/template/db_api/pub/updateById.js | 29 + .../router/service/template/db_api/sys/add.js | 33 + .../service/template/db_api/sys/delete.js | 30 + .../service/template/db_api/sys/getList.js | 30 + .../service/template/db_api/sys/update.js | 39 + .../template/openapi/qq/pub/imgSecCheck.js | 39 + .../template/openapi/qq/pub/msgSecCheck.js | 36 + .../openapi/weixin/pub/getTemplateList.js | 27 + .../openapi/weixin/pub/imgSecCheck.js | 39 + .../openapi/weixin/pub/msgSecCheck.js | 48 + .../openapi/weixin/pub/sendMessage.js | 45 + .../openapi/weixin/pub/sendTemplateMessage.js | 59 + .../openapi/weixin/pub/sendUniformMessage.js | 59 + .../service/template/test/pub/addition.js | 32 + .../template/test/pub/findGoodsInfo.js | 202 ++ .../template/test/pub/temporaryCache.js | 36 + .../router/service/template/test/sys/test.js | 20 + .../router/service/template/云函数示例模板.md | 11 + .../router/service/user/kh/acceptInvite.js | 25 + .../router/service/user/kh/addUploadRecord.js | 75 + .../router/service/user/kh/bindAlipay.js | 24 + .../router/service/user/kh/bindEmail.js | 23 + .../router/service/user/kh/bindMobile.js | 23 + .../router/service/user/kh/bindNewEmail.js | 72 + .../router/service/user/kh/bindNewMobile.js | 70 + .../router/service/user/kh/bindQQ.js | 23 + .../router/service/user/kh/bindWeixin.js | 24 + .../service/user/kh/getAlipayMiniCode.js | 25 + .../router/service/user/kh/getInvitedUser.js | 34 + .../router/service/user/kh/getMenu.js | 30 + .../router/service/user/kh/getMyUserInfo.js | 16 + .../router/service/user/kh/getQQMiniCode.js | 45 + .../service/user/kh/getWeixinMPqrcode.js | 57 + .../service/user/kh/getWeixinMPscheme.js | 41 + .../router/service/user/kh/getWeixinMPurl.js | 38 + .../router/service/user/kh/resetPwd.js | 24 + .../router/service/user/kh/setAvatar.js | 37 + .../service/user/kh/setUserInviteCode.js | 32 + .../router/service/user/kh/unbindAlipay.js | 24 + .../router/service/user/kh/unbindEmail.js | 25 + .../router/service/user/kh/unbindMobile.js | 25 + .../router/service/user/kh/unbindQQ.js | 23 + .../router/service/user/kh/unbindWeixin.js | 24 + .../router/service/user/kh/updatePwd.js | 26 + .../router/service/user/kh/updateUser.js | 32 + .../router/service/user/pub/checkToken.js | 27 + .../router/service/user/pub/checkVersion.js | 152 ++ .../service/user/pub/code2SessionAlipay.js | 37 + .../service/user/pub/code2SessionWeixin.js | 41 + .../router/service/user/pub/getPhoneNumber.js | 23 + .../user/pub/getUserInfoByInviteCode.js | 36 + .../router/service/user/pub/login.js | 55 + .../router/service/user/pub/loginByAlipay.js | 55 + .../router/service/user/pub/loginByEmail.js | 56 + .../router/service/user/pub/loginByQQ.js | 58 + .../router/service/user/pub/loginBySms.js | 72 + .../service/user/pub/loginByUniverify.js | 74 + .../router/service/user/pub/loginByWeixin.js | 58 + .../user/pub/loginByWeixinPhoneNumber.js | 99 + .../router/service/user/pub/logout.js | 24 + .../router/service/user/pub/register.js | 61 + .../service/user/pub/resetPasswordByEmail.js | 52 + .../service/user/pub/resetPasswordByMobile.js | 52 + .../router/service/user/pub/sendEmailCode.js | 112 + .../router/service/user/pub/sendSmsCode.js | 86 + .../router/service/user/sys/encryptPwd.js | 28 + .../router/service/user/sys/setVerifyCode.js | 27 + .../router/service/user/util/login_log.js | 72 + .../router/service/user/统一用户中心.md | 12 + .../router/service/逻辑层目录说明.md | 45 + .../cloudfunctions/router/util/pubFunction.js | 26 + .../cloudfunctions/router/util/urlrewrite.js | 15 + uniCloud-aliyun/database/JQL查询.jql | 12 + uniCloud-aliyun/database/db_init.json | 892 ++++++ uni_modules/uni-config-center/changelog.md | 6 + uni_modules/uni-config-center/package.json | 81 + uni_modules/uni-config-center/readme.md | 93 + .../common/uni-config-center/index.js | 1 + .../common/uni-config-center/package.json | 9 + .../uni-config-center/uni-id/config.json | 54 + .../alipay/alipayCertPublicKey_RSA2.crt | 3 + .../uni-pay/alipay/alipayRootCert.crt | 15 + .../uni-pay/alipay/appCertPublicKey.crt | 3 + .../alipay/【重要】这里放支付宝证书.md | 5 + .../uni-config-center/uni-pay/config.js | 128 + .../uni-config-center/uni-pay/wxpay/wxpay.p12 | 0 .../wxpay/【重要】这里放微信支付证书.md | 3 + .../uni-config-center/vk-unicloud/index.js | 140 + .../uni-config-center/【重要】请先看这里.md | 73 + uni_modules/uni-id/changelog.md | 111 + uni_modules/uni-id/package.json | 85 + uni_modules/uni-id/readme.md | 33 + .../cloudfunctions/common/uni-id/LICENSE.md | 201 ++ .../cloudfunctions/common/uni-id/config.json | 52 + .../cloudfunctions/common/uni-id/index.js | 1 + .../cloudfunctions/common/uni-id/package.json | 16 + uni_modules/vk-unicloud/changelog.md | 1248 +++++++++ .../vk-data-verification-code.vue | 320 +++ uni_modules/vk-unicloud/index.js | 7 + uni_modules/vk-unicloud/package.json | 86 + uni_modules/vk-unicloud/readme.md | 572 ++++ .../common/vk-unicloud/LICENSE.md | 201 ++ .../common/vk-unicloud/index.js | 1 + .../common/vk-unicloud/package.json | 16 + .../vk_modules/vk-unicloud-page/index.js | 190 ++ .../libs/function/aliyunOSSUtil.js | 274 ++ .../libs/function/debounce.js | 34 + .../libs/function/deepClone.js | 23 + .../libs/function/deepMerge.js | 30 + .../vk-unicloud-page/libs/function/index.js | 2430 +++++++++++++++++ .../vk-unicloud-page/libs/function/modal.js | 297 ++ .../libs/function/permission.js | 33 + .../libs/function/queryParams.js | 60 + .../libs/function/setClipboardData.js | 51 + .../libs/function/throttle.js | 37 + .../libs/function/timeUtil.js | 642 +++++ .../libs/function/treeUtil.js | 93 + .../libs/function/updateManager.js | 61 + .../libs/function/vk.filters.js | 63 + .../vk-unicloud-page/libs/function/vk.h5.js | 60 + .../libs/function/vk.importObject.js | 59 + .../libs/function/vk.localStorage.js | 131 + .../libs/function/vk.navigate.js | 462 ++++ .../libs/function/vk.request.js | 434 +++ .../libs/function/vk.sessionStorage.js | 146 + .../libs/function/weixin-js-sdk.js | 890 ++++++ .../libs/install/console.log.js | 18 + .../vk-unicloud-page/libs/mixin/mixin.js | 40 + .../libs/openapi/baidu/index.js | 170 ++ .../vk-unicloud-page/libs/openapi/index.js | 14 + .../vk-unicloud-page/libs/store/libs/error.js | 25 + .../libs/store/mixin/mixin.js | 67 + .../vk-unicloud-callFunctionUtil.js | 1040 +++++++ .../vk-unicloud/vk-unicloud-user-center.js | 1068 ++++++++ windows/components/breadcrumb.vue | 64 + windows/components/errorLog.vue | 145 + windows/components/updatePassword.vue | 175 ++ windows/leftWindow.vue | 90 + windows/topWindow.vue | 518 ++++ .../0、此处的文档已不更新,请直接看官网文档.md | 2 + 使用帮助/1、快速上手 - 安装步骤.md | 3 + .../代码快捷提示/javascript代码块提示.json | 1243 +++++++++ 使用帮助/代码快捷提示/vue代码块提示.json | 195 ++ 418 files changed, 53012 insertions(+) create mode 100644 .gitignore create mode 100644 App.vue create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 app.config.js create mode 100644 app.config.menu.js create mode 100644 changelog.md create mode 100644 changelog.new.md create mode 100644 common/css/app.scss create mode 100644 common/css/uni.scss create mode 100644 common/function/myPubFunction.js create mode 100644 common/theme/black.js create mode 100644 common/theme/blackWhite.js create mode 100644 common/theme/index.js create mode 100644 common/theme/white.js create mode 100644 common/uni-admin/css/uni-icons.css create mode 100644 common/uni-admin/css/uni.css create mode 100644 common/uni-admin/说明.md create mode 100644 components/vk-data-input-editor/vk-data-input-editor.vue create mode 100644 main.js create mode 100644 manifest.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pages-dev.json create mode 100644 pages.js create mode 100644 pages.json create mode 100644 pages/config/site.vue create mode 100644 pages/enquiry/attributes/list.vue create mode 100644 pages/enquiry/template/list.vue create mode 100644 pages/index/index.vue create mode 100644 pages/login/index.vue create mode 100644 pages/product/goods/list.vue create mode 100644 pages/product/product-category/list.vue create mode 100644 pages/product/product-category/product-category.vue create mode 100644 pages_plugs/error/403.vue create mode 100644 pages_plugs/error/404.vue create mode 100644 pages_plugs/error/500.vue create mode 100644 pages_plugs/system/app-upgrade-center/form/addUpdate.vue create mode 100644 pages_plugs/system/app-upgrade-center/list.vue create mode 100644 pages_plugs/system/app/form/addUpdate.vue create mode 100644 pages_plugs/system/app/form/createPublishHtml.vue create mode 100644 pages_plugs/system/app/list.vue create mode 100644 pages_plugs/system/menu/form/addMenuByJson.vue create mode 100644 pages_plugs/system/menu/form/bindPermission.vue create mode 100644 pages_plugs/system/menu/list.vue create mode 100644 pages_plugs/system/permission/form/updateCategory.vue create mode 100644 pages_plugs/system/permission/form/updateLevel.vue create mode 100644 pages_plugs/system/permission/list.vue create mode 100644 pages_plugs/system/role/form/bindMenu.vue create mode 100644 pages_plugs/system/role/form/bindPermission.vue create mode 100644 pages_plugs/system/role/list.vue create mode 100644 pages_plugs/system/user/form/bindRole.vue create mode 100644 pages_plugs/system/user/form/resetPassword.vue create mode 100644 pages_plugs/system/user/form/setAuthorizedAppLogin.vue create mode 100644 pages_plugs/system/user/list.vue create mode 100644 pages_plugs/system_uni/opendb-admin-log.vue create mode 100644 pages_plugs/system_uni/uni-id-files/form/addCategory.vue create mode 100644 pages_plugs/system_uni/uni-id-files/form/preview.vue create mode 100644 pages_plugs/system_uni/uni-id-files/form/updateCategory.vue create mode 100644 pages_plugs/system_uni/uni-id-files/form/updateFileCategory.vue create mode 100644 pages_plugs/system_uni/uni-id-files/form/updateFileName.vue create mode 100644 pages_plugs/system_uni/uni-id-files/form/updateVideo.vue create mode 100644 pages_plugs/system_uni/uni-id-files/form/uploadProgress.vue create mode 100644 pages_plugs/system_uni/uni-id-files/list.vue create mode 100644 pages_plugs/system_uni/uni-id-log.vue create mode 100644 pages_plugs/system_uni/vk-components-dynamic.vue create mode 100644 pages_plugs/system_uni/vk-global-data.vue create mode 100644 pages_plugs/system_uni/vk-pay-orders.vue create mode 100644 pages_template/components/detail/detail-basic.vue create mode 100644 pages_template/components/detail/detail-table.vue create mode 100644 pages_template/components/dialog/dialog-basic.vue create mode 100644 pages_template/components/dialog/dialog-form.vue create mode 100644 pages_template/components/dialog/dialog-table.vue create mode 100644 pages_template/components/editor/editor.vue create mode 100644 pages_template/components/form/form-array-object.vue create mode 100644 pages_template/components/form/form-basic.vue create mode 100644 pages_template/components/form/form-cert.vue create mode 100644 pages_template/components/form/form-dialog-2.vue create mode 100644 pages_template/components/form/form-dialog.vue create mode 100644 pages_template/components/form/form-inline.vue create mode 100644 pages_template/components/form/form-pay-cert.vue create mode 100644 pages_template/components/form/form-pro.vue create mode 100644 pages_template/components/form/form-slot.vue create mode 100644 pages_template/components/icons/element-icons-page.vue create mode 100644 pages_template/components/icons/element-icons.vue create mode 100644 pages_template/components/icons/js/element-icons.js create mode 100644 pages_template/components/icons/js/vk-icons.js create mode 100644 pages_template/components/icons/vk-icons-page.vue create mode 100644 pages_template/components/icons/vk-icons.vue create mode 100644 pages_template/components/input/input-address.vue create mode 100644 pages_template/components/input/input-json.vue create mode 100644 pages_template/components/input/input-money.vue create mode 100644 pages_template/components/input/input-number-box.vue create mode 100644 pages_template/components/input/input-number.vue create mode 100644 pages_template/components/input/input-percentage.vue create mode 100644 pages_template/components/input/input-province.vue create mode 100644 pages_template/components/input/input-remote-select.vue create mode 100644 pages_template/components/input/input-select.vue create mode 100644 pages_template/components/input/input.vue create mode 100644 pages_template/components/table/table-basic.vue create mode 100644 pages_template/components/table/table-easy.vue create mode 100644 pages_template/components/table/table-expand.vue create mode 100644 pages_template/components/table/table-query.vue create mode 100644 pages_template/components/upload/upload-basic.vue create mode 100644 pages_template/components/upload/upload-drag.vue create mode 100644 pages_template/element/detail/detail.vue create mode 100644 pages_template/element/form/advanced-form.vue create mode 100644 pages_template/element/form/basic-form.vue create mode 100644 pages_template/element/form/step-form.vue create mode 100644 pages_template/element/popup/alert.vue create mode 100644 pages_template/element/popup/dialog.vue create mode 100644 pages_template/element/popup/drawer.vue create mode 100644 pages_template/element/popup/loading.vue create mode 100644 pages_template/element/popup/message-box.vue create mode 100644 pages_template/element/popup/message.vue create mode 100644 pages_template/element/popup/notification.vue create mode 100644 pages_template/element/popup/popconfirm.vue create mode 100644 pages_template/element/popup/popover.vue create mode 100644 pages_template/element/popup/tooltip.vue create mode 100644 pages_template/element/result/fail.vue create mode 100644 pages_template/element/result/success.vue create mode 100644 pages_template/element/setting/account.vue create mode 100644 pages_template/kong/kong.vue create mode 100644 pages_template/kong/list.vue create mode 100644 postcss.config.js create mode 100644 static/bg/001.jpg create mode 100644 static/bg/002.jpg create mode 100644 static/bg/003.jpg create mode 100644 static/bg/004.jpg create mode 100644 static/bg/005.jpg create mode 100644 static/bg/006.jpg create mode 100644 static/bg/007.jpg create mode 100644 static/icon/icon-403.svg create mode 100644 static/icon/icon-404.svg create mode 100644 static/icon/icon-500.svg create mode 100644 static/icon/loading.gif create mode 100644 static/logo.png create mode 100644 static/logo1.png create mode 100644 static/logo2.png create mode 100644 static/logo3.png create mode 100644 static/plugs/element/index.css create mode 100644 static/plugs/quill/image-resize.min.js create mode 100644 static/plugs/quill/index.css create mode 100644 static/plugs/quill/quill.min.js create mode 100644 static_menu/menu-dev.json create mode 100644 static_menu/menu.json create mode 100644 store/index.js create mode 100644 store/modules/$app.js create mode 100644 store/modules/$error.js create mode 100644 store/modules/$user.js create mode 100644 template.h5.html create mode 100644 uni.scss create mode 100644 uniCloud-aliyun/cloudfunctions/router/config.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/dao/index.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/dao/modules/userDao.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/index.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/middleware/index.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/middleware/modules/addAdminLog.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/middleware/modules/customFilter1.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/middleware/modules/customFilter2.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/middleware/modules/registerInitFilter.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/middleware/modules/returnUserInfoFilter.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/package.json create mode 100644 uniCloud-aliyun/cloudfunctions/router/router.param.json create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/kong/sys/add.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/kong/sys/delete.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/kong/sys/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/kong/sys/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/select/kh/user.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app-upgrade-center/sys/addUpdate.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app-upgrade-center/sys/delete.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app-upgrade-center/sys/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app-upgrade-center/util/formRules.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app/sys/add.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app/sys/createPublishHtml.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app/sys/delete.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app/sys/getInfo.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app/sys/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app/sys/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app/util/createPublishHtml/index.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app/util/createPublishHtml/lib/art-template.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app/util/createPublishHtml/template.html create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/app/util/formRules.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/menu/sys/add.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/menu/sys/adds.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/menu/sys/bindPermission.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/menu/sys/delete.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/menu/sys/getAll.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/menu/sys/getCascader.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/menu/sys/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/menu/sys/updateBase.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/menu/util/formRules.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/permission/sys/add.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/permission/sys/delete.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/permission/sys/getAll.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/permission/sys/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/permission/sys/updateBase.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/permission/sys/updateCategory.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/permission/sys/updateLevel.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/permission/util/formRules.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/role/sys/add.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/role/sys/bindMenu.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/role/sys/bindPermission.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/role/sys/delete.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/role/sys/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/role/sys/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/role/sys/updateBase.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/role/util/formRules.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/user/sys/add.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/user/sys/batchUpdateAppLogin.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/user/sys/batchUpdateInviterUid.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/user/sys/batchUpdateStatus.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/user/sys/bindRole.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/user/sys/delete.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/user/sys/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/user/sys/resetPassword.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/user/sys/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system/user/util/formRules.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/admin-log/sys/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/add.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/delete.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/add.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/delete.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/util/formRules.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/pay-orders/sys/afreshNotice.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/pay-orders/sys/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/kh/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/add.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/delete.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/delete.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-log/sys/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/admin/后台PC管理端.md create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/client/小程序、h5、APP客户端.md create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/common/公共逻辑(公共接口).md create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/muban.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/muban_easy.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/plugs/baidu/client/pub/getAccessToken.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/plugs/baidu/client/pub/ocr/business_license.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/plugs/baidu/client/pub/ocr/idcard.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/getComponentsDynamicData.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/init.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/plugs/插件.md create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/Promise.all.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/add.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/adds.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/avg.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/count.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/del.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/deleteById.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/findById.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/findByWhereJson.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/geo.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/groupCount.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/max.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/min.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/sample.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/select.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/select2.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/selects.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/selects_geo.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/selects_getOne.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/selects_mode_2.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/selects_mode_3.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/sum.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/updateAndReturn.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/pub/updateById.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/sys/add.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/sys/delete.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/sys/getList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/db_api/sys/update.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/openapi/qq/pub/imgSecCheck.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/openapi/qq/pub/msgSecCheck.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/openapi/weixin/pub/getTemplateList.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/openapi/weixin/pub/imgSecCheck.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/openapi/weixin/pub/msgSecCheck.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/openapi/weixin/pub/sendMessage.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/openapi/weixin/pub/sendTemplateMessage.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/openapi/weixin/pub/sendUniformMessage.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/test/pub/addition.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/test/pub/findGoodsInfo.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/test/pub/temporaryCache.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/test/sys/test.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/template/云函数示例模板.md create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/acceptInvite.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/addUploadRecord.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/bindAlipay.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/bindEmail.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/bindMobile.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/bindNewEmail.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/bindNewMobile.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/bindQQ.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/bindWeixin.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/getAlipayMiniCode.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/getInvitedUser.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/getMenu.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/getMyUserInfo.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/getQQMiniCode.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/getWeixinMPqrcode.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/getWeixinMPscheme.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/getWeixinMPurl.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/resetPwd.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/setAvatar.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/setUserInviteCode.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/unbindAlipay.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/unbindEmail.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/unbindMobile.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/unbindQQ.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/unbindWeixin.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/updatePwd.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/kh/updateUser.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/checkToken.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/checkVersion.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/code2SessionAlipay.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/code2SessionWeixin.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/getPhoneNumber.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/getUserInfoByInviteCode.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/login.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/loginByAlipay.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/loginByEmail.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/loginByQQ.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/loginBySms.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/loginByUniverify.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/loginByWeixin.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/loginByWeixinPhoneNumber.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/logout.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/register.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/resetPasswordByEmail.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/resetPasswordByMobile.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/sendEmailCode.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/pub/sendSmsCode.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/sys/encryptPwd.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/sys/setVerifyCode.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/util/login_log.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/user/统一用户中心.md create mode 100644 uniCloud-aliyun/cloudfunctions/router/service/逻辑层目录说明.md create mode 100644 uniCloud-aliyun/cloudfunctions/router/util/pubFunction.js create mode 100644 uniCloud-aliyun/cloudfunctions/router/util/urlrewrite.js create mode 100644 uniCloud-aliyun/database/JQL查询.jql create mode 100644 uniCloud-aliyun/database/db_init.json create mode 100644 uni_modules/uni-config-center/changelog.md create mode 100644 uni_modules/uni-config-center/package.json create mode 100644 uni_modules/uni-config-center/readme.md create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/package.json create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-pay/alipay/alipayCertPublicKey_RSA2.crt create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-pay/alipay/alipayRootCert.crt create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-pay/alipay/appCertPublicKey.crt create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-pay/alipay/【重要】这里放支付宝证书.md create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-pay/config.js create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-pay/wxpay/wxpay.p12 create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-pay/wxpay/【重要】这里放微信支付证书.md create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/vk-unicloud/index.js create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/【重要】请先看这里.md create mode 100644 uni_modules/uni-id/changelog.md create mode 100644 uni_modules/uni-id/package.json create mode 100644 uni_modules/uni-id/readme.md create mode 100644 uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/LICENSE.md create mode 100644 uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/config.json create mode 100644 uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/index.js create mode 100644 uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json create mode 100644 uni_modules/vk-unicloud/changelog.md create mode 100644 uni_modules/vk-unicloud/components/vk-data-verification-code/vk-data-verification-code.vue create mode 100644 uni_modules/vk-unicloud/index.js create mode 100644 uni_modules/vk-unicloud/package.json create mode 100644 uni_modules/vk-unicloud/readme.md create mode 100644 uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/LICENSE.md create mode 100644 uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/index.js create mode 100644 uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/package.json create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/index.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/aliyunOSSUtil.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/debounce.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/deepClone.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/deepMerge.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/index.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/modal.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/permission.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/queryParams.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/setClipboardData.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/throttle.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/timeUtil.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/treeUtil.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/updateManager.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/vk.filters.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/vk.h5.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/vk.importObject.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/vk.localStorage.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/vk.navigate.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/vk.request.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/vk.sessionStorage.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/weixin-js-sdk.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/install/console.log.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/mixin/mixin.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/openapi/baidu/index.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/openapi/index.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/store/libs/error.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/store/mixin/mixin.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/vk-unicloud/vk-unicloud-callFunctionUtil.js create mode 100644 uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/vk-unicloud/vk-unicloud-user-center.js create mode 100644 windows/components/breadcrumb.vue create mode 100644 windows/components/errorLog.vue create mode 100644 windows/components/updatePassword.vue create mode 100644 windows/leftWindow.vue create mode 100644 windows/topWindow.vue create mode 100644 使用帮助/0、此处的文档已不更新,请直接看官网文档.md create mode 100644 使用帮助/1、快速上手 - 安装步骤.md create mode 100644 使用帮助/代码快捷提示/javascript代码块提示.json create mode 100644 使用帮助/代码快捷提示/vue代码块提示.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8bbff90 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/.hbuilderx +/node_modules +/unpackage diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..2006917 --- /dev/null +++ b/App.vue @@ -0,0 +1,130 @@ + + + diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..9461fd6 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 VK + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..0463ae1 --- /dev/null +++ b/README.md @@ -0,0 +1,305 @@ + + + +### 插件名称:`vk-unicloud-admin` +### 作者:VK + +## 序 +* 如果你热爱编程,想快速入门云开发,欢迎使用`vk-unicloud`系列开发框架 +* 无需转变开发习惯,0成本上手云开发。 +* 框架内置了众多API、工具包,为你的业务扫平障碍。使你的项目刚起步进度就是50%(微信登录、短信、验证码、缓存、生成小程序码等等) +* 从此你又get一个新技能,只需用js,轻松搞定前后台整体业务。 +* `client端`框架地址: [https://ext.dcloud.net.cn/plugin?id=2204](https://ext.dcloud.net.cn/plugin?id=2204) +* `admin端`框架地址:[https://ext.dcloud.net.cn/plugin?id=5043](https://ext.dcloud.net.cn/plugin?name=vk-unicloud-admin) +* `client端`框架文档:[点击查看](https://vkdoc.fsq.pub/client/) +* `admin端`框架文档:[点击查看](https://vkdoc.fsq.pub/admin/) + +#### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +#### 框架体验地址:[点击进入『框架体验地址』](https://vkunicloud.fsq.pub/admin/) + +#### 体验账号: + +* 高级管理员:test11(账号)123456(密码)可以执行绝大部分功能 +* 初级管理员:test12(账号)123456(密码)只能执行查询功能 +* 无权限用户:test13(账号)123456(密码)无admin登录权限 + +[点击体验『表单可视化生成器』](https://vkunicloud.fsq.pub/vk-form-visualizer/) + +### 什么是 `vk-unicloud-admin` ? + +* `vk-unicloud-admin` 是基于 `uniapp` + `unicloud` + `uni-id` +`element` + `vk-unicloud-router` 的一套快速 `admin` 完整开发框架 +* (只兼容PC,只为PC admin而生,但Ta也是uniapp项目,非传统vue-admin项目,你可以用Ta来做你H5、小程序、app的admin管理端) + +**注意:TA是uniapp项目,支持uniapp所有H5的API和插件市场所有uni-admin插件** + +**最大亮点:使用 `vk-unicloud-admin` 后,即使你是一个纯后端,不会写任何css,照样可以写出功能强大且页面好看的admin管理系统。** + +### `vk-unicloud-admin` 主要功能 以及 对开发者的价值 + +* 1、完美集成 `vk-unicloud-router`,拥有 `vk-unicloud-router` 的所有现成API功能。让你开发事半功倍。[点击查看](https://vkdoc.fsq.pub/client/) +* 2、完美集成 `element` UI框架,并在 `element` 基础上进行了深度封装(支持原生 `element`)[element官网](https://element.eleme.cn/#/zh-CN/component/button) +* 3、`表单可视化拖拽工具`(可直接生成 `vk框架代码 `和 `element` 原生代码 [点击体验](https://vkunicloud.fsq.pub/vk-form-visualizer/) +* 4、`万能表格组件`,通过少量代码即可完成 `CRUD`,同时还拥有较高的自由度。几分钟完成一个页面 `CRUD`。 +* 5、`万能表单组件`,通过少量代码即可完成表单渲染 + 表单请求。 +* 6、超高自由度,支持使用插槽的形式自定义已有的功能和渲染方式,也支持直接使用 `element` 原生代码来写页面。 +* 7、完善的用户角色权限,无需开发即可拥有(权限可精确到每一个云函数)。 +* 8、`pages-dev.json` 机制,开发调试页面不会被发布到正式版中。 +* 9、只要你开发过传统 `vue admin` 项目,那么上手此框架的学习成本几乎为0 +* 10、众多示例代码,为你的云开发之路扫平障碍。 +* 11、内置3个主题(纯黑,纯白,黑白)且支持自定义主题。[点击查看主题](https://vkdoc.fsq.pub/admin/1/theme.html) +* 12、群内众多开发者,关于框架使用问题几乎有问必答。Q群:22466457 +* 13、更多功能敬请体验。 + +### 核心功能 + +#### 一、万能表格 + +核心思想:通过 JSON 配置渲染页面(简单配置一下,表格就完成了) + +如下方JSON用于渲染头像和时间 +```js + [ + { key: "avatar", title: "头像", type: "avatar", width: 80, shape:"circle" }, + { key: "_add_time", title: "添加时间", type: "time", width: 160, valueFormat:"yyyy-MM-dd hh:mm:ss" }, + ] +``` + +* 1、查询:包含分页、排序、多条件搜索、搜索项折叠、多表连表、数据源预处理、展开行、树状结构等等 +* 2、支持多选框(用于批量操作) +* 3、自动生成详情页:点击详情按钮,自动显示详情页弹窗。 +* 4、修改:点击修改按钮,自动显示修改表单弹窗。 +* 5、删除:点击删除,显示气泡二次确认提示,再点击确定,则删除数据。 +* 6、自定义操作按钮:如发货、审核等自定义按钮。 +* 7、高自由度:每个字段都有插槽,在内置组件不满足需求的情况下,可以使用插槽自己编写该字段的渲染规则。(内置组件基本上可满足90%以上的渲染需求) +* 8、导出excel表格:通过内置api只需一行代码即可直接导出表格数据。 +* 9、导出满足表格查询条件的数据库内所有数据(unicloud的查询有限制每次500条记录,但万能表格解决了此问题,可以导出数据库内全部数据) +* 10、异常重试机制:一般不需要此功能,但是由于unicloud-阿里云空间会偶尔查询失败,此时此功能就派上用场了(会自动重新再查询,用户体验上只是感觉这次查询慢了一点而已(因为第一次失败了,查了2次或2次以上)) +* 11、不仅仅支持unicloud云函数请求,还支持http请求。 +* 12、支持下方自动显示合计 +* 13、更多功能敬请体验 [万能表格文档地址](https://vkdoc.fsq.pub/admin/2/table.html) + +#### 二、万能表单 + +核心思想:通过 JSON 配置渲染表单(简单配置一下,表单就完成了) + +如下方JSON用于渲染 一个昵称输入框 和 性别单选按钮组 +```js + [ + { key:"nickname", title:"昵称", type:"text" }, + { + key:"gender", title:"性别", type:"radio", + data:[ + { value:1, label:"男" }, + { value:2, label:"女" } + ] + } + ] +``` + +* 1、自动提交表单 +* 2、提交前自动表单验证 +* 3、防止表单重复提交(提交后按钮自动进入loading状态,不可再点击) +* 4、同一表单可复用(如一般添加和修改的表单基本是一样的) +* 5、表单复用时,支持字段显示规则(如添加时有A字段,修改时,无A字段等) +* 6、拦截器:表单提交前拦截,执行自己逻辑,再放行或终止。 +* 7、高自由度:每个字段都有插槽,在内置组件不满足需求的情况下,可以使用插槽自己编写该字段的渲染规则。(内置组件基本上可满足90%以上的渲染需求) +* 8、重置表单:一键重置表单 +* 9、表单可视化拖拽工具 [点击查看](https://vkunicloud.fsq.pub/vk-form-visualizer/#/) +* 10、更多功能敬请体验 [万能表单文档地址](https://vkdoc.fsq.pub/admin/3/form.html) + +`vk-unicloud-admin` 框架同时还包含 `vk-unicloud-router` 所有功能,[点击查看vk-unicloud-router功能列表](https://vkdoc.fsq.pub/client/) + +### 同时 admin 框架内置了以下页面 + +* 1、用户管理 +* 2、角色管理 +* 3、权限管理 +* 4、菜单管理 +* 5、应用管理 +* 6、系统缓存管理 +* 7、动态组件数据 +* 8、用户登录日志 +* 9、系统操作日志 +* 10、VK框架组件演示 +* 11、element静态功能演示 +* 12、素材管理(图片、视频、文件) +* 13、App升级中心管理(新增于1.14.0) +* 14、持续完善中。。。 + +## 2、快速上手 - 安装步骤 + +* 1、`项目根目录` 执行 `npm i` 命令(必须先执行此npm命令,安装必要的依赖,否则会无法启动。) + +#### 接下来是后端(云函数端)安装步骤 + +* 通常一个完整的项目分为 `client端`(客户端)、`admin端`(管理端)、`service端`(服务端,这里指云函数端) + +#### 这里需要分三种情况 +#### [情况一](#情况一):你之前已经在用 `vk-unicloud-router` 框架开发H5、小程序、APP的开发者。 + +#### [情况二](#情况二):你之前是用别的框架开发H5、小程序、APP,现在只想用VK框架单独开发 admin 项目。 + +#### [情况三](#情况三):你的项目刚开始,`client端` 和 `admin端` 都还没开发。 + +### 情况一 + +#### 思路:因为云函数会互相覆盖,因此我们可以把 `service端(云函数端)` 统一放在 `client端` 的项目中,而 `admin端` 项目 直接绑定 `client端` 项目 +#### 安装步骤: +* 1、把 `admin端` 内的 `uniCloud/router/service/admin` 内的以下文件复制到你之前的 `client端` 项目 `uniCloud/router/service/admin` 内(复制整个目录) +* 2、把 `admin端` 内的 `uniCloud/router/service/template` 内的以下文件复制到你之前的 `client端` 项目 `uniCloud/router/service/template` 内(复制整个目录) +* 3、把 `admin端` 内的 `uniCloud/database/db_init/` 目录下的3个数据库表数据导入对应的表内(导入方法:服务空间后台 - 数据库 - 导入) +```js +uni-id-roles 角色表 +uni-id-permissions 权限表 +opendb-admin-menus 菜单表 +``` +* 3、把 `admin端` 的服务空间直接绑定 `client端` 项目(注意是 `绑定` 不是 `关联`)(注意是 `绑定` 不是 `关联`)(注意是 `绑定` 不是 `关联`) + + + + +* 4、上传 `router` 云函数 + +* 5、完成 + +### 情况二 +已完成情况一的请直接跳过情况二和情况三 +#### 安装步骤: +* 1、在 `项目根目录` 目录执行 `npm i` + +* 2、右键 `uniCloud` 目录 点击 `运行云服务空间初始化向导` + +* 3、完成 + +### 情况三 + +#### 安装步骤: +* 建议你先使用 `vk-unicloud-router` 框架进行 `client端` 开发,`client端` 开发完成后,使用 `vk-unicloud-admin` 开发 `admin端` + +* 当然你也可以先开发 `admin端`,再开发 `client端`。 + +* 如果先开发 `admin端`,则直接用 `情况二` 的安装步骤即可。 + +* 如果先开发 `client端`,则先下载 `client端` 开发框架,等 `client端` 开发完后再用 `情况一` 的安装步骤即可 [点击前往下载client端开发框架](https://ext.dcloud.net.cn/plugin?id=2204) + +#### 初始admin账号密码:123456 + +#### 如密码错误,可以强制重置admin账号密码 +[点击查看『强制重置admin账号密码步骤』](https://vkdoc.fsq.pub/admin/4/forceResetAdminPassword.html) + +### 安装代码快捷提示步骤 +* 1、将 `根目录/使用帮助/代码快捷提示/javascript代码块提示.json` 内的代码 复制到 hbx 工具 - 代码块设置 - javascript代码块 +* 2、将 `根目录/使用帮助/代码快捷提示/vue代码块提示.json` 内的代码 复制到 hbx 工具 - 代码块设置 - vue代码块 + +### 其他 +删除 `pages.json` 内的 `pages_template/components` 和 `pages_template/element` 分包(此为发布演示版本需要而加,你的项目可以删除,删除后开发模式下依然存在(因为在`pages-dev.json`中配置了),发布到线上环境时自动屏蔽) + +### 若提示上传云函数失败,请仔细对比下你的项目 `uniCloud/common` 目录是否跟下图完全一致 + + + +如果不一致,特别是 `uni-id` 目录下没有这个文件 `uni-id/node_modules/uni-config-center/uni-id/config.json`,则在 `uni-id` 目录执行 `npm i` 试试(如果有这个`uni-id/node_modules`目录,先删除目录,再执行npm i) + +### 若新建的用户登录提示用户不存在(数据库明明有数据),此时是因为不同端用户隔离导致的 + +* 1、先用admin账号登录后台,进入应用管理 + +因为每个人的 `DCloud Appid`是不一样的,所以你需要在应用管理中添加自己的应用(或直接修改内置的2条数据的appid即可) + +`DCloud Appid` 获取方法 + +复制 `uniapp` 项目根目录的 `manifest.json` 文件内的 `appid` + + + +* 2、再进入用户管理,对需要设置的用户点击编辑,设置该用户可以登录哪些端。 + + + +* 3、完成,可以登录了。 + + +#### 如有疑问,请加群:22466457 关于插件的问题包教包会! + +[点击查看『完整安装步骤』](https://vkdoc.fsq.pub/admin/1/quickstart.html) + +## 3、框架目录结构 + +[点击查看『目录结构』](https://vkdoc.fsq.pub/admin/1/catalogue.html) + +## 4、万能表格 + +[点击查看『万能表格』](https://vkdoc.fsq.pub/admin/2/table.html) + +## 5、万能表单 + +[点击查看『万能表单』](https://vkdoc.fsq.pub/admin/3/form.html) + +[点击查看『表单可视化生成器』](https://vkunicloud.fsq.pub/vk-form-visualizer/) + +## 6、用户角色权限 + +[点击查看『用户角色权限』](https://vkdoc.fsq.pub/admin/4/role.html) + +## 7、创建我的第一个带CRUD的页面 + +[点击查看『如何创建我的第一个带CRUD的页面』](https://vkdoc.fsq.pub/admin/5/template.html) + +## 8、HBX代码块提示 + +[点击查看『HBX代码块提示』](https://vkdoc.fsq.pub/admin/4/codeTips.html) + +## 9、admin框架更新步骤指南 + +[点击查看『admin框架更新步骤指南』](https://vkdoc.fsq.pub/admin/1/update.html) + +## 10、强制重置admin账号密码 + +[点击查看『强制重置admin账号密码』](https://vkdoc.fsq.pub/admin/4/forceResetAdminPassword.html) + +## 11、admin框架内置组件参数说明 + +[点击查看『admin框架内置组件参数说明』](https://vkdoc.fsq.pub/admin/components/1%E3%80%81text.html) + +## 20、云函数开发文档 + +[点击查看『云函数开发文档』](https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/catalogue.html) + +## 21、vk.baseDao数据库API + +[点击查看『vk.baseDao』数据库API](https://vkdoc.fsq.pub/client/uniCloud/db/api.html) + +## 22、数据库缓存API + +[点击查看『数据库缓存API』](https://vkdoc.fsq.pub/client/uniCloud/cache/cache.html) + +## 23、中间件开发文档 + +[点击查看『中间件开发文档』](https://vkdoc.fsq.pub/client/uniCloud/middleware/filter.html) + +## 24、JS API文档大全 + +[点击查看『JS API文档大全』](https://vkdoc.fsq.pub/client/jsapi.html) + +## 25、前端请求云函数 + +[点击查看『前端请求云函数』](https://vkdoc.fsq.pub/client/pages/callFunction.html) + +## 26、配置前端非法token拦截器 + +[点击查看『前端请求云函数』](https://vkdoc.fsq.pub/client/pages/interceptor1.html) + +## 27、配置前端全局异常拦截器 + +[点击查看『前端请求云函数』](https://vkdoc.fsq.pub/client/pages/interceptor2.html) + +## 28、vuex使用文档 + +[点击查看『vuex使用文档』](https://vkdoc.fsq.pub/client/pages/vuex.html) + +## 29、更多其他功能敬请在框架内体验 + +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 \ No newline at end of file diff --git a/app.config.js b/app.config.js new file mode 100644 index 0000000..61f103f --- /dev/null +++ b/app.config.js @@ -0,0 +1,135 @@ +// 引入自定义公共函数 +import myPubFunction from '@/common/function/myPubFunction.js' +// 引入静态菜单 +import staticMenu from '@/app.config.menu.js' +// 引入主题配置文件 +import themeConfig from '@/common/theme/index.js' +export default { + // 开发模式启用调式模式(请求时会打印日志) + debug: process.env.NODE_ENV !== "production", + // 主云函数名称 + functionName: "router", + // 登录页面路径 + login: { + url: "/pages/login/index", + testUser: { + show: false, // 是否显示 + list: [ + { username: "test11", password: "123456", nickname: "高级管理员" }, + { username: "test12", password: "123456", nickname: "初级管理员" }, + { username: "test13", password: "123456", nickname: "无权限用户" } + ] + } + }, + // 首页页面路径 + index: { + url: '/pages/index/index' + }, + // 404 Not Found 错误页面路径 + error: { + url: "/pages_plugs/error/404" + }, + // 前端默认时区(中国为8) + targetTimezone:8, + globalError: true, // 是否开启全局错误提示 + // 需要检查是否登录的页面列表 + // let { mode, list } = config.checkTokenPages + checkTokenPages: { + /** + * 如果 mode = 0 则代表自动检测 + * 如果 mode = 1 则代表list内的页面需要登录,不在list内的页面不需要登录 + * 如果 mode = 2 则代表list内的页面不需要登录,不在list内的页面需要登录 + * 注意1: list内是通配符表达式,非正则表达式 + * 在无需登录的页面上执行kh或sys函数,也会自动判断是否登录,未登录会自动跳登录页面,登录成功后会自动返回本来要跳转的页面。 + */ + mode: 2, + list: [ + "/pages/login/*", + "/pages_template/*", + ] + }, + // 静态文件的资源URL地址 + staticUrl: { + // 顶部导航 + navBar: { + // 正方形 Logo 160*160 + logo: "/static/logo.png", + // 长方形 Logo 224*160 + logo1: "/static/logo1.png", + // 横幅 Logo 480*100 + logo2: "/static/logo2.png" + }, + }, + // 自定义公共函数,myPubFunction内的函数可通过vk.myfn.xxx() 调用 + myfn: myPubFunction, + // 第三方服务配置 + service: { + // 阿里云oss配置 + aliyunOSS: { + // 密钥和签名信息 (由于签名的获取比较麻烦,建议初学者使用上传到unicloud的方案,上传到阿里云OSS是给有特殊需求的用户使用) + // 相关文档 : https://help.aliyun.com/document_detail/31925.html?spm=a2c4g.11186623.6.1757.b7987d9czoFCVu + uploadData: { + OSSAccessKeyId: "", + policy: "", + signature: "", + }, + // oss上传地址 + action: "", + // 根目录名称 + dirname: "", + // oss外网访问地址,也可以是阿里云cdn地址 + host: "", + // 上传时,是否按用户id进行分组储存 + groupUserId: true, + // vk.callFunctionUtil.uploadFile 是否默认上传到阿里云OSS + isDefault: false + } + }, + // 全局异常码,可以自定义提示结果 + globalErrorCode: { + // 阿里云10秒非正常超时,其实请求还在执行(且一般已经成功了,但前端接受不到成功结果) + "cloudfunction-unusual-timeout": "请求超时,但请求还在执行,请重新进入页面。", + // 请求超时(真正的请求超时) + "cloudfunction-timeout": "请求超时,请重试!", + // 不在预期内的异常(如数据库异常、云函数编译异常等) + "cloudfunction-system-error": "网络开小差了!" + }, + // 页面风格 + pageStyle: { + // 表单组件和表格组件的size + size: "auto", // medium / small / mini / auto + }, + // 左侧菜单 + sideBar: { + // 配置静态菜单列表 + "staticMenu": staticMenu + }, + // 主题配置 + theme: { + // 当前使用哪个主题 + use: "blackWhite", // white blackWhite black custom + ...themeConfig, + // 自定义主题 + custom: { + // 左侧菜单样式 + leftMenu: { + backgroundColor: "", + subBackgroundColor: "", + textColor: "", + activeTextColor: "", + activeBackgroundColor: "", + collapseActiveTextColor:"", + collapseActiveBackgroundColor: "", + hoverTextColor: "", + hoverBackgroundColor: "", + boxShadow: "", + borderTop: "" + }, + // 顶部菜单样式 + topMenu: { + backgroundColor: "", + textColor: "", + } + } + } +} diff --git a/app.config.menu.js b/app.config.menu.js new file mode 100644 index 0000000..f36295e --- /dev/null +++ b/app.config.menu.js @@ -0,0 +1,13 @@ +const debug = process.env.NODE_ENV !== 'production'; +// 开发环境和正式环境中都会显示的静态菜单 +import menus from './static_menu/menu.json' +// 只在开发环境中显示的静态菜单 +import devMenus from './static_menu/menu-dev.json' +var menusList = []; +if (debug && devMenus) { + menusList = menus.concat(devMenus); +} else { + menusList = menus; +} + +export default menusList; diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..b0c6809 --- /dev/null +++ b/changelog.md @@ -0,0 +1,1748 @@ +## 1.17.3(2023-09-25) +* 【升级】`vk-unicloud-admin-ui` 包升级至 `1.17.45` +* 【调整】`万能表单` `vk-data-input-editor` 组件的js依赖内置到项目里,防止因quill官方CDN无法访问导致editor组件渲染失败的问题 +* 【修复】`万能表单` 部分复杂情况下表单验证未生效的问题 +* 【修复】`万能表格` `object` 内 `oneLine:true` 不生效的bug +* 【修复】`万能表单` `object` 内 `disabled` 不生效的bug +* 【修复】`万能表格` `:searched-clean-selection="false"` 时,分页会导致多选框清空的问题 +* 【修复】`万能表格` 点击右侧按钮时可能会出现请先选中一行的bug +* 【优化】`pages_plugs/system_uni/vk-pay-orders.vue`页面新增支付渠道区分 +* 【优化】`万能表格` 导出的文件名支持自定义扩展名 +* 【优化】`万能表格` 新增 `getRowIndex` 方法 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 +##### 如果你觉得框架对你有用,可以在下方进行评论或赞赏。 +## 1.17.2(2023-07-20) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.17.17` +* 2、【调整】`万能表单` 支持 `object` 新增 `showErrMsg` 属性,默认 `false`,如果设置为 `true`,会多个 `margin-bottom: 22px;` 的样式 +* 3、【修复】`万能表单` `tag` 不触发 `watch` 的问题 +* 4、【优化】`万能表单` `table-select`、`remote-select`、`cascader`、`tree-select`、`checkbox`、`radio` 的 `action` 属性均支持传函数(自定义function请求模式)[传送门](https://vkdoc.fsq.pub/admin/components/12%E3%80%81table-select.html#%E8%87%AA%E5%AE%9A%E4%B9%89function%E8%AF%B7%E6%B1%82%E6%A8%A1%E5%BC%8F) +* 5、【优化】`万能表单` `上传组件` 支持拖拽排序 +* 6、【优化】`万能表单` 新增 `needAlert` 属性,设置false则取消默认的错误弹窗 +* 7、【优化】`万能表单` `object` 支持 `bar-title` +* 8、【优化】`万能表单` `color` 支持 `activeChange` 事件 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 +##### 如果你觉得框架对你有用,可以在下方进行评论或赞赏。 +## 1.17.0(2023-07-04) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.17.0` +* 2、【重要】`万能表格` 的 `action` 属性支持传函数 [传送门 - 自定义function请求模式](https://vkdoc.fsq.pub/admin/2/table.html#%E8%87%AA%E5%AE%9A%E4%B9%89function%E8%AF%B7%E6%B1%82%E6%A8%A1%E5%BC%8F) +* 3、【重要】`万能表单` 的 `action` 属性支持传函数 [传送门 - 自定义function请求模式](https://vkdoc.fsq.pub/admin/3/form.html#%E8%87%AA%E5%AE%9A%E4%B9%89function%E8%AF%B7%E6%B1%82%E6%A8%A1%E5%BC%8F) +* 4、【修复】`万能表单` `group + object` 会报错的问题 +* 5、【修复】`万能表单` `group` 内的组件 `disabled` 函数和字符串表达式不生效的问题 +* 6、【修复】`万能表格` `group` 内的 `object` 的 `showLabel` 属性不生效的问题 +* 7、【修复】`万能表格` `this.$refs.table1.updateRows` 执行后再次点击编辑会报错的问题 +* 8、【优化】`万能表单` `tag` 组件支持 `max` 属性 +* 9、【优化】`万能表单` `上传组件` 支持属性 `cloudDirectory` 可以设置上传至指定的云端目录 +* 10、【优化】`万能表单` `file-select` 支持预览非图片和视频的文件(无法预览的会触发下载) + + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 +##### 如果你觉得框架对你有用,可以在下方进行评论或赞赏。 + +## 1.16.2(2023-06-01) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.16.15` +* 2、【修复】`缓存管理` 页面添加缓存后,`vk.globalDataCache.get(key);` 无法获取到数据的问题(需要手动替换目录`router/service/admin/system_uni/global-data/`) +* 3、【优化】`素材管理` 上传素材时的进度条样式 +* 4、【优化】`万能表格` 新增 `needAlert` 属性,设为false可以取消默认的错误弹窗(默认为true) + + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 +##### 如果你觉得框架对你有用,可以在下方进行评论或赞赏。 +## 1.16.1(2023-05-17) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.16.9` +* 2、【优化】`万能表格` 右侧按钮支持属性 icon、plain、round、circle、loading +* 3、【优化】其他细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 +##### 如果你觉得框架对你有用,可以在下方进行评论或赞赏。 + +## 1.16.0(2023-04-23) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.16.0` +* 2、【升级】`element-ui` 包升级至 `2.15.13` +* 3、【修复】`table-select` 在多选模式下,控制台可能会报 `Cannot read properties of undefined(reading 'length')` 警告的问题。 +* 4、【优化】`topWindow` 支持显示正方形logo+文本(暂无开关,需手动切换注释) +* 5、【优化】`万能表单` `素材选择组件` 多选时显示文件顺序 +* 6、【优化】`万能表单` `富文本` 支持从素材库选择图片 +* 7、【优化】`素材管理` 批量上传时显示上传进度 +* 8、【优化】角色管理页面细节 +* 9、【优化】菜单管理页面细节 +* 10、【优化】权限管理页面细节 +* 11、【新增】内置支付订单明细页面(支持回调失败后重试) + +**注意:本次更新涉及内置页面改动,请仔细比对** + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 +##### 如果你觉得框架对你有用,可以在下方进行评论或赞赏。 +## 1.15.12(2023-03-20) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.15.25` +* 2、【优化】`万能表单` `array` `array` 新增属性 `showDelete` 控制是否显示右侧删除图标 + + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.15.11(2023-01-19) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.15.23` +* 2、【调整】router云函数运行内存调整为512M(实测512M即可达到最优性能) +* 3、【修复】`万能表单` object内的字段disabled不生效的问题。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.15.10(2022-12-29) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.15.19` +* 2、【优化】兼容阿里云新版 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.15.9(2022-12-13) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.15.14` +* 2、【优化】leftWindow,左侧菜单支持自定义默认图标(可设置为默认不显示图标) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.15.8(2022-11-24) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.15.8` +* 2、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.15.1(2022-10-25) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.15.5` +* 2、【优化】`万能表单` 的 `图标选择` 选择时,支持搜索 +* 3、【优化】因 `1.15.0` 导致的表格卡顿问题。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.15.0(2022-10-10) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.15.2` +* 2、【重要】应用管理内置 `生成统一发布页` [传送门 - 应用管理](https://vkdoc.fsq.pub/admin/6/app.html) +* 3、【重要】新增自定义图标库 [传送门 - 拓展教程](https://vkdoc.fsq.pub/admin/components2/1%E3%80%81vk-data-icon.html#%E5%A6%82%E4%BD%95%E6%89%A9%E5%B1%95%E5%9B%BE%E6%A0%87%E5%BA%93) +* 4、【优化】`万能表单` 图标选择组件支持图标过滤 [传送门 - 组件文档](https://vkdoc.fsq.pub/admin/components/26%E3%80%81icon.html#filter) +* 5、【新增】`万能表格` 支持视频预览,设置 `type` 为 `file` 即可 + +**本次更新除了常规升级框架外,还需要下载最新版框架示例项目,从最新版中复制 以下文件 替换 你项目中的对应文件。** + +* 1、`router/service/admin/system/app/`(替换整个目录) +* 2、`根目录/pages_plugs/system/app/`(替换整个目录) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.14.4(2022-10-07) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.14.4` +* 2、【优化】`万能表单` 针对 `type` 为 `object` 且多层嵌套时的内部细节处理优化。(现在可以无限嵌套) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.14.3(2022-10-07) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.14.2` +* 2、【优化】更新依赖 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.14.2(2022-09-29) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.14.2` +* 2、【修复】升级HBX后带来的部分兼容性问题。 +* 3、【优化】`部分组件` 的 `placeholder` 可能不生效的问题 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.14.1(2022-09-13) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.14.1` +* 2、【优化】`vk-data-input-cascader`、`vk-data-input-checkbox`、`vk-data-input-radio`、`vk-data-input-remote-select`、`vk-data-input-tree-select` 组件均支持 `http方式请求数据`(用法与 `vk-data-input-table-select` 一致) +如: +```js +{ + key:"select1", title:"远程select", type:"remote-select", + showAll: true, + isRequest: true, + //requestHeader: {}, // 请求头 + action: "https://www.xxx.com", + props: { list: "rows", value: "id", label: "name" }, +}, +``` +* 3、【优化】`用户管理`、`角色管理`、`权限管理`、`菜单管理` 的内部细节。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.14.0(2022-09-12) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.14.0` +* 2、【重要】`vk-admin` 内置 `App升级中心`(新增 `opendb-app-versions` 表)[传送门](https://vkdoc.fsq.pub/admin/6/app-upgrade-center.html) +* 3、【重要】`应用管理` 重构(对齐官方 `opendb-app-list` 表)[传送门](https://vkdoc.fsq.pub/admin/6/app.html) + +**可以右键项目根目录的 `package.json` 一键更新(注意对比自己修改过的文件)** + +**以下是手动改更新步骤,本次改动涉及到的框架内置文件变动** + +* pages_plugs/system/app/ (替换整个目录) +* pages_plugs/system/app-upgrade-center/ (替换整个目录) +* cloudfunctions/router/service/admin/system/app/ (替换整个目录) +* cloudfunctions/router/service/admin/system/app-upgrade-center/ (替换整个目录) + +**添加菜单** + +进入 `vk-admin` 菜单管理,点击【通过JSON数组批量导入菜单】粘贴下方json数组 导入 + +```js +[{"_id": "sys-app-upgrade-center","_add_time": 1596416400000,"menu_id":"sys-app-upgrade-center","name": "App升级中心","icon":"vk-icon-shengji3-xianxing","url": "/pages_plugs/system/app-upgrade-center/list","comment":"管理和发布新的app版本","sort": 6,"parent_id":"sys-admin","enable":true}] +``` + +**添加pages.json内的页面** + +```js +{ "path": "system/app-upgrade-center/list" }, +``` + +**完成上述步骤后,进入应用管理->编辑->开启App升级中心->即可进入版本管理。** + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.13.2(2022-08-30) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.13.6` +* 2、【优化】`万能表格` 的合计功能支持指定精度(默认2位小数)[传送门](https://vkdoc.fsq.pub/admin/2/table.html?t=20220826#%E4%B8%87%E8%83%BD%E8%A1%A8%E6%A0%BC%E5%90%88%E8%AE%A1%E5%88%97%E7%9A%84%E7%A4%BA%E4%BE%8B) +* 3、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.13.1(2022-08-20) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.13.1` +* 2、【优化】左侧菜单的最大层级支持自定义,需替换 `router/service/user/kh/getMenu.js` 文件,同时 `uni_modules/vk-unicloud` 模块更新到最新版 +* 2、【优化】菜单管理的最大层级支持自定义,需替换 `router/service/admin/system/menu/sys/getAll.js` 文件 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.13.0(2022-08-17) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.13.1` +* 2、【优化】`万能表单` `数值类型` 的输入组件当值为""空字符串时,可通过设置 `emptyValue` 属性更改空值转化的值(默认为null) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.12.10(2022-08-15) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.12.45` +* 2、【修复】`万能表单` `table-select` 组件若设置http请求模式后,init方法不走http请求的bug +* 3、【修复】`万能表单` `数值类型` 的输入组件直接在 `template` 使用时,值为0时不显示值的bug +* 4、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.12.9(2022-08-15) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.12.43` +* 2、【修复】`万能表单` `table-select` 组件若设置http请求模式后,init方法不走http请求的bug +* 3、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.12.8(2022-08-13) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.12.42` +* 2、【优化】表格搜索组件新增 `data` 和 `time` 组件(原先只有范围选择,现在支持单个日期的选择)(属性与万能表单一致) +* 3、【优化】一些细节 +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.12.7(2022-07-30) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.12.36` +* 2、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.12.6(2022-07-25) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.12.35` +* 2、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.12.5(2022-07-23) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.12.35` +* 2、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.12.4(2022-07-23) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.12.32` +* 2、【优化】一些细节 + + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.12.3(2022-07-21) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.12.29` +* 2、【修复】`vk-data-upload` 组件 `before-upload` 属性没有接收到 `file` 参数的问题。 +* 3、【优化】`数字类型` 输入框的交互体验 +* 4、【优化】`icon` 组件文档新增icon预览 [传送门](https://vkdoc.fsq.pub/admin/components/26%E3%80%81icon.html#%E5%9B%BE%E6%A0%87%E5%88%97%E8%A1%A8) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.12.2(2022-07-20) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.12.21` +* 2、【优化】`万能表单` 的 `array` 支持内嵌 `array`,用以渲染对象数组字段内还有对象数组字段的数据形式。(理论上可以无限嵌套) [传送门](https://vkdoc.fsq.pub/admin/components/24%E3%80%81array.html#array%E5%B5%8C%E5%A5%97array) +* 3、【优化】`万能表单` 的 `array` 新增属性 `incMode`(可规定每行数据必须递增或递减)[传送门](https://vkdoc.fsq.pub/admin/components/24%E3%80%81array.html#incmode) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.12.1(2022-07-09) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.12.0` +* 2、【更新】省市区数据源 +* 3、【新增】`vk-data-input-tag` 组件 [传送门](https://vkdoc.fsq.pub/admin/components/29%E3%80%81tag.html) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.12.0(2022-07-09) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.12.0` +* 2、【更新】省市区数据源 +* 3、【新增】`vk-data-input-tag` 组件 [传送门](https://vkdoc.fsq.pub/admin/components/29%E3%80%81tag.html) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.11.7(2022-07-05) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.11.22` +* 2、【优化】`万能表单` `remote-select` 组件 当设置 `showAll:true` 时,新增 `刷新选项按钮`(方便数据库数据变动后手动刷新选项)[传送门](https://vkdoc.fsq.pub/admin/components/10%E3%80%81remote-select.html) + +* 3、【优化】`万能表格` `switch` 组件 支持直接在表格行内编辑 [传送门](https://vkdoc.fsq.pub/admin/components/14%E3%80%81switch.html#%E8%A1%A8%E6%A0%BC%E8%A1%8C%E5%86%85%E5%8A%A8%E6%80%81%E7%BC%96%E8%BE%91%E6%A8%A1%E5%BC%8F) +* 4、【优化】`万能表格` `buttons`(字段扩展按钮列表)新增对应参数 `buttonsPosition` 默认为right(支持 left right bottom top)[传送门](https://vkdoc.fsq.pub/admin/2/table.html#buttons-%E5%AD%97%E6%AE%B5%E6%89%A9%E5%B1%95%E6%8C%89%E9%92%AE%E5%88%97%E8%A1%A8) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.11.6(2022-07-01) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.11.9` +* 2、【优化】`万能表单` 的 `tips` 属性支持解析 `html字符串` 和 `对象数组` [查看详情](https://vkdoc.fsq.pub/admin/3/form.html#tips-%E4%B8%8B%E6%96%B9%E7%9A%84%E5%9B%BA%E5%AE%9A%E6%8F%90%E7%A4%BA) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.11.5(2022-06-25) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.11.6` +* 2、【优化】一些细节。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.11.4(2022-06-18) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.11.6` +* 2、【新增】万能表单公共属性 `watch` 用于监听key对应的值的改变(只监听组件内部造成的值的改变)`watch` 是 `onChange` 的上位替代 [点击查看](https://vkdoc.fsq.pub/admin/3/form.html#watch-%E7%9B%91%E5%90%AC) +* 3、【修复】万能表单公共属性 `disabled` 数组模式不生效的bug + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.11.3(2022-06-16) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.11.4` +* 2、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.11.2(2022-06-16) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.11.4` +* 2、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.11.1(2022-06-15) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.11.4` +* 2、【优化】一些细节 +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.11.0(2022-06-10) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.11.4` +* 2、【新增】`左侧菜单` 支持折叠模式 + + +**由于改动涉及框架文件较多,建议直接更新框架项目(如果你改动了框架内置的部分代码,你改动过的代码可能会被还原,因此如果你改动过框架内置代码,合并的时候,可以先看下改动的文件。)** + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.10.6(2022-06-09) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.10.13` +* 2、【优化】一些细节。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.10.5(2022-06-02) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.10.10` +* 2、【优化】`万能表单` `table-select` 组件支持对已选择的数据进行求和。如下图效果所示。[点击查看](https://vkdoc.fsq.pub/admin/components/12%E3%80%81table-select.html#summarykey-%E6%B1%82%E5%92%8C) + + + +* 3、【优化】`万能表单` `file-select` 组件新增属性 `upload`(是否允许上传,默认true) `updateCategory` (是否允许编辑分类,默认true)[点击查看](https://vkdoc.fsq.pub/admin/components/25%E3%80%81file-select.html) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.10.4(2022-05-26) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.10.7` +* 2、【优化】`vk.baseDao.selects` 和 `vk.baseDao.getTableData` API新增 `lastSortArr` 参数,用于聚合后再排序。 +* 注意:`lastWhereJson` 和 `lastSortArr` 在数据量大的情况下是有性能问题的,(建议主表的where条件中先进行筛选,如只查本季度数据,只要主表过滤完后数据量不大,则没有性能问题。) +* 3、【修复】`lastWhereJson` 后,返回的 `total` 不准确的问题。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.10.3(2022-05-25) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.10.6` +* 2、【优化】应用管理页面,当前项目未添加时,进行友情提醒。 +* 3、【优化】其他细节。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.10.2(2022-05-18) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.10.4` +* 2、【优化】`万能表单` 内公共属性 `disabled` 额外支持函数形式和字符串简写形式(和showRule写法一致)[查看详情](https://vkdoc.fsq.pub/admin/3/form.html#disabled) +* 3、【优化】`万能表格` 右侧按钮宽度计算内部算法。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.10.1(2022-05-14) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.10.2` +* 2、【优化】`万能表格` 的导出功能内部逻辑 +* 3、【优化】`万能表单` 上传组件的内部逻辑 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.10.0(2022-05-13) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.10.0` +* 2、【新增】`万能表格` 右侧按钮区 `right-btns`、`right-btns-more`、`custom-right-btns` 升级显示规则,可自定义根据行记录设置按钮是否显示或禁用 [点击查看](https://vkdoc.fsq.pub/admin/2/table.html#right-btns-%E5%8F%B3%E4%BE%A7%E5%9B%BA%E5%AE%9A%E6%8C%89%E9%92%AE%E5%88%97%E8%A1%A8) +* 3、【新增】`万能表格` 属性 `right-btns-align` 控制右侧按钮的对齐方式,默认center(可选: center left right) [点击查看](https://vkdoc.fsq.pub/admin/2/table.html#%E5%B1%9E%E6%80%A7) +* 4、【优化】其他细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.9.6(2022-05-05) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.9.15` +* 2、【重要】vk实例对象已调整为页面内置对象,vk实例对象内的api在任意地方都可以直接通过vk.xxx()使用,不再需要 this.vk.xxx() 或 uni.vk.xxx() 的方式来调用。 +* 3、【重要】vk实例对象已调整为云函数内置对象,vk实例对象内的api在任意地方都可以直接通过vk.xxx()使用,不再需要 this.vk.xxx() 或 uniCloud.vk.xxx() 的方式来调用。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.9.5(2022-04-28) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.9.14` +* 2、【优化】`万能表单` 中的表格选择组件细节。 +* 3、【修复】`万能表格` 中的图片可能会不显示的问题。 + + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.9.4(2022-04-21) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.9.12` +* 2、【重要】`uni-id` 配置新增 `tokenMaxLimit` 每个账户的最大token数量,0为不限,淘汰策略:新的淘汰旧的(注意,即使设置为0,框架也会自动淘汰已过期的token)[点击查看](https://vkdoc.fsq.pub/client/uniCloud/config/uni-id.html) +* 3、【新增】全局参数 `targetTimezone` 可设置默认时区(中国为8,8代表东8区,-8代表西8区) + +> [查看前端全局配置](https://vkdoc.fsq.pub/client/pages/config.html) + +> [查看云函数全局配置](https://vkdoc.fsq.pub/client/uniCloud/config/vk-unicloud.html) + +**本次更新除了常规升级框架外,还需要下载最新版框架示例项目,从最新版中复制 以下文件 替换 你项目中的对应文件。** + +* 1、`router/middleware/modules/returnUserInfoFilter.js` (此为用户登录注册全局中间件) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.9.3(2022-04-21) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.9.12` +* 2、【重要】`uni-id` 配置新增 `tokenMaxLimit` 每个账户的最大token数量,0为不限,淘汰策略:新的淘汰旧的(注意,即使设置为0,框架也会自动淘汰已过期的token)[点击查看](https://vkdoc.fsq.pub/client/uniCloud/config/uni-id.html) +* 3、【新增】全局参数 `targetTimezone` 可设置默认时区(中国为8,8代表东8区,-8代表西8区) + +> [查看前端全局配置](https://vkdoc.fsq.pub/client/pages/config.html) + +> [查看云函数全局配置](https://vkdoc.fsq.pub/client/uniCloud/config/vk-unicloud.html) + +**本次更新除了常规升级框架外,还需要下载最新版框架示例项目,从最新版中复制 以下文件 替换 你项目中的对应文件。** + +* 1、`router/middleware/modules/returnUserInfoFilter.js` (此为用户登录注册全局中间件) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.9.2(2022-04-14) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.9.11` +* 2、【重要】新增 `云对象` 路由模式 [什么是云对象?](https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html) +* 3、【重要】自此,在VK框架中,可以做到云对象和云函数同时存在。即在VK框架中,同时支持 `云对象路由模式` 和 `云函数路由模式`。 +* 4、【新增】本地运行支持云对象 [点击查看](https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#%E6%9C%AC%E5%9C%B0%E8%BF%90%E8%A1%8C) +* 5、【新增】地图选址组件 `type = "map"` [点击查看](https://vkdoc.fsq.pub/admin/components/28%E3%80%81map.html) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.9.1(2022-03-23) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.9.8` +* 2、【优化】`万能表格` 行内图片支持预览 +* 3、【优化】`万能表格` 新增本地数据过滤器,同elementui的 `filters` [查看详情](https://vkdoc.fsq.pub/admin/2/table.html#filter-%E6%9C%AC%E5%9C%B0%E6%95%B0%E6%8D%AE%E8%BF%87%E6%BB%A4%E5%99%A8) +* 4、【修复】`万能表格` 导出表格时,若值为0,会导出为空字符串的问题。 +* 5、【修复】`万能表格` 导出表格时,字段 `type` 为 `time` 时 `valueFormat` 属性无效的问题。 +* 6、【修复】`万能表格` `radio` `checkbox` `select` 的选项数据data不支持函数计算的问题。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.9.0(2022-02-26) +###【重要】由于uni官方限制自定义表不可以用 `opendb-` 和 `uni-` 开头,故以下数据库表名只能进行调整 + +* 1、`opendb-components-dynamic` 改为 `vk-components-dynamic` +* 2、`opendb-global-data` 改为 `vk-global-data` +* 3、`uni-id-files` 改为 `vk-files` +* 4、`uni-id-files-categories` 改为 `vk-files-categories` + +___更改表名势必会对老项目产生影响。(对新项目无影响)___ + +### 老项目更新注意事项: +* 1、老项目更新后,还需要从 `unicloud控制台` 把表名改成对应的新表名 +* 2、在项目代码中全局搜索旧表名,替换成新表名 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.13(2022-02-24) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.36` +* 2、【新增】`addAdminLog` 中间件示例。 +* 3、【修复】`vk-data-input-editor` 组件通过外部赋值无法达到双向绑定的问题。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.12(2022-02-10) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.27` +* 2、【优化】一些细节。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.11(2022-01-20) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.26` +* 2、【优化】一些细节。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.10(2021-12-24) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.24` +* 2、【修复】`万能表单` 的 `树形选择` 搜索可能会报错的bug。 +* 3、【优化】一些细节。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.9(2021-12-20) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.23` +* 2、【修复】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.8(2021-12-19) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.22` +* 2、【新增】`万能表格` 新增 `pagination-change` 事件 (主要用于手动模式分页)[点击查看](https://vkdoc.fsq.pub/admin/2/table.html#%E4%BA%8B%E4%BB%B6) +* 3、【修复】`万能表格` type 为 `money` 、`percentage` 、`discount` 时,部分情况下,默认值不生效的问题。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.7(2021-12-13) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.15` +* 2、【重要】`万能表格` `columns` 内 `buttons` 属性新增 `showRule` 属性(用于实现根据行记录显示不同按钮) [点击查看](https://vkdoc.fsq.pub/admin/2/table.html#buttons-%E5%AD%97%E6%AE%B5%E6%89%A9%E5%B1%95%E6%8C%89%E9%92%AE%E5%88%97%E8%A1%A8) +* 3、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.6(2021-12-11) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.9` +* 2、【重要】`万能表格` `columns` 内新增 `buttons` 属性(扩展按钮列表,可实现快速修改这1个字段的功能)[点击查看](https://vkdoc.fsq.pub/admin/2/table.html#buttons-%E5%AD%97%E6%AE%B5%E6%89%A9%E5%B1%95%E6%8C%89%E9%92%AE%E5%88%97%E8%A1%A8) +* 3、【优化】`万能表格` 合计功能的简单模式支持金额 [点击查看](https://vkdoc.fsq.pub/admin/2/table.html#%E7%AE%80%E5%8D%95%E6%A8%A1%E5%BC%8F) +* 4、【优化】`万能表单` `cascader` 组件支持 `actionData` [点击查看](https://vkdoc.fsq.pub/admin/components/11%E3%80%81cascader.html) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.5(2021-12-08) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.7` +* 2、【优化】上传api的url自动去除原文件名的中文部分。 +* 3、【优化】`tree-select` 树形选择组件 [点击查看](https://vkdoc.fsq.pub/admin/components/27%E3%80%81tree-select.html) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.4(2021-12-08) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.7` +* 2、【优化】上传api的url自动去除原文件名的中文部分。 +* 3、【优化】`tree-select` 树形选择组件 [点击查看](https://vkdoc.fsq.pub/admin/components/27%E3%80%81tree-select.html) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.3(2021-12-04) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.5` +* 2、【优化】一些细节 +* +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.2(2021-12-01) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.5` +* 2、【升级】`element-ui` 包升级至 `2.15.7` +* 3、【新增】自 `1.8.0` 起,支持自定义主题,内置纯白、纯黑、黑白3个主题,同时支持编写自定义主题。[点击查看主题说明](https://vkdoc.fsq.pub/admin/1/theme.html) +* 4、【优化】主题细节。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.1(2021-12-01) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.2` +* 2、【升级】`element-ui` 包升级至 `2.15.7` +* 3、【新增】自 `1.8.0` 起,支持自定义主题,内置纯白、纯黑、黑白3个主题,同时支持编写自定义主题。[点击查看主题说明](https://vkdoc.fsq.pub/admin/1/theme.html) +* 4、【优化】主题细节。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.8.0(2021-11-30) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.1` +* 2、【新增】自 `1.8.0` 起,支持自定义主题,内置纯白、纯黑、黑白3个主题,同时支持编写自定义主题。[点击查看主题说明](https://vkdoc.fsq.pub/admin/1/theme.html) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.7.4(2021-11-13) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.7.7` +* 2、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.7.3(2021-11-09) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.7.6` +* 2、【优化】`万能表单` `radio` `checkbox` `select` `cascader` `tree-select` 的 `data` 静态模式数据源 支持 `function` 模式 [点击查看](https://vkdoc.fsq.pub/admin/components/9%E3%80%81select.html#%E9%9D%99%E6%80%81%E6%95%B0%E6%8D%AE%E6%96%B9%E5%BC%8F2) +* 3、【修复】`万能表单` `tree-select` 点击清除按钮可能会报错的问题。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.7.2(2021-11-02) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.7.4` +* 2、【优化】美化默认滚动条样式 [点击查看](https://vkdoc.fsq.pub/admin/question/question.html#%E5%A6%82%E4%BD%95%E7%BE%8E%E5%8C%96%E9%BB%98%E8%AE%A4%E6%BB%9A%E5%8A%A8%E6%9D%A1) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.7.1(2021-10-26) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.7.3` +* 2、【重要】`万能表格` 支持导出数据库内所有数据 [点击查看](https://vkdoc.fsq.pub/admin/2/table.html#%E5%AF%BC%E5%87%BA%E6%BB%A1%E8%B6%B3%E8%A1%A8%E6%A0%BC%E6%9F%A5%E8%AF%A2%E6%9D%A1%E4%BB%B6%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93%E5%86%85%E6%89%80%E6%9C%89%E6%95%B0%E6%8D%AE) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.7.0(2021-10-22) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.7.2` +* 2、【重要】万能表单每个字段的 `showRule` 属性支持 `函数`(现在可以用自定义函数来控制表单字段的显示和隐藏)[点击查看](https://vkdoc.fsq.pub/admin/3/form.html#show) +* 3、【重要】万能表单 新增组件 图标选择组件 type: `icon` [点击查看](https://vkdoc.fsq.pub/admin/components/26%E3%80%81icon.html) +* 4、【重要】万能表单 新增组件 树型选择组件 type: `tree-select` [点击查看](https://vkdoc.fsq.pub/admin/components/27%E3%80%81tree-select.html) +* 5、【优化】菜单管理和权限管理页面应用 `icon` 和 `tree-select` 组件。 +* 6、【优化】菜单管理和权限管理在修改时,禁止设置自己为自己的父级。(替换 `admin/system/menu/sys/update` 和 `admin/system/permission/sys/update`) +* 7、【优化】`windows/topWindow.vue` 页面逻辑(替换页面代码),现在可以通过调用 `vk.menuTabs.closeCurrent();` 关闭当前tabs页面 [点击查看](https://vkdoc.fsq.pub/admin/question/question.html#%E5%A6%82%E4%BD%95%E5%85%B3%E9%97%AD%E5%BD%93%E5%89%8D%E6%89%93%E5%BC%80%E7%9A%84tabs%E9%A1%B5%E9%9D%A2) +* 8、【优化】表单示例组件中的关闭按钮 +* 9、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.6.9(2021-10-14) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.6.39` +* 2、【优化】`富文本编辑器` 现在无需使用插槽的形式(需要在 `main.js` 中 `Vue.use(vkAdminUI);` 的下方添加如下代码) [点击查看](https://vkdoc.fsq.pub/admin/components/22%E3%80%81editor.html) +```js +// 引入 富文本编辑器 组件(必须加在Vue.use(vkAdminUI);的后面) +import VkDataInputEditor from "@/components/vk-data-input-editor/vk-data-input-editor"; +Vue.component("vk-data-input-editor", VkDataInputEditor); +``` + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.6.8(2021-10-11) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.6.34` +* 2、【优化】`App.vue` 内的 `init` 逻辑(可以有效解决首次进入首页再返回登录页面的显示问题) +* 3、【修复】`万能表单` 时间选择组件 `pickerOptions` 参数不生效的问题 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.6.7(2021-10-08) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.6.31` +* 2、【优化】`万能表单` `table-select` 新增属性 `dataPreprocess` +* 3、【优化】`万能表单` `table-select` 内部缓存逻辑 +* 4、【优化】`万能表单` `array` 新增属性 `size` 可选值:medium / small / mini + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.6.6(2021-10-07) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.6.28` +* 2、【新增】`万能表格` 新增 `type` : `dateDiff2` 计算出还剩多少时间到期。 +```js +{ key:"exp_time", title:"到期剩", type:"dateDiff2", endText:"已到期", width:80, defaultValue: "永久", sortable:"custom" }, +``` +* 3、【优化】`万能表格` `avatar` 新增属性 `shape` 默认为 `circle` circle 圆形 square 方形 +* 4、【优化】其他细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.6.5(2021-09-30) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.6.13` +* 2、【优化】`万能表格` 查询接口支持异常重试机制(可有效解决阿里云空间偶尔出现数据库连接超时导致异常的问题)[点击查看](https://vkdoc.fsq.pub/admin/2/table.html#%E5%BC%82%E5%B8%B8%E9%87%8D%E8%AF%95%E6%9C%BA%E5%88%B6) +* `万能表单` 暂无计划支持异常重试机制(因为阿里云虽然前端会报超时(执行10秒后),但云函数其实可能还在运行,所以此时重试机制可能会造成表单重复提交多次) +* 3、【优化】其他一些细节。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.6.4(2021-09-30) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.6.13` +* 2、【优化】`万能表格` 查询接口支持异常重试机制(可有效解决阿里云空间偶尔出现数据库连接超时导致异常的问题) +* `万能表单` 暂无计划支持异常重试机制(因为阿里云虽然前端会报超时(执行10秒后),但云函数其实可能还在运行,所以此时重试机制可能会造成表单重复提交多次) +* 3、【优化】其他一些细节。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.6.3(2021-09-27) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.6.10` +* 2、【优化】`万能表单` 新增属性 `success-msg` 可以设置表单提交成功后右上角的提示 +* 3、【优化】`table-select` 的查询action支持http请求(传统后端请求)[点击查看](https://vkdoc.fsq.pub/admin/components/12%E3%80%81table-select.html#http%E8%AF%B7%E6%B1%82%E6%A8%A1%E5%BC%8F) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.6.2(2021-09-18) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.6.7` +* 2、【升级】`element-ui` 包升级至 `2.15.6` [点击查看](https://element.eleme.cn/#/zh-CN/component/changelog) +* 3、【优化】`vk-data-dialog` + `万能表单` 触发 `before-close` 的逻辑。 +* 4、【优化】`vk-data-drawer` + `万能表单` 触发 `before-close` 的逻辑。 + + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.6.1(2021-09-17) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.6.6` +* 2、【优化】`万能表单` `array` 新增 `maxlength` 属性,控制最大可添加的数量 [点击查看文档](https://vkdoc.fsq.pub/admin/components/24%E3%80%81array.html) +* 3、【优化】`万能表单` `array` 新增 `maxlength` 属性,控制最大可添加的数量 [点击查看文档](https://vkdoc.fsq.pub/admin/components/24%E3%80%81array.html) + + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.6.0(2021-09-17) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.6.1` +* 2、【优化】`万能表格` 新增 `leftFixed` 和 `rightFixed` 属性,默认均为true,当为false时,可以取消列固定。 +* 3、【优化】`table-select` 新增 `leftFixed` 和 `rightFixed` 属性,默认均为true,当为false时,可以取消列固定。 +* 4、【优化】`array` 新增 `leftFixed` 和 `rightFixed` 属性,默认均为true,当为false时,可以取消列固定。 +* 5、【修复】`vk-data-dialog` 无法正常触发 `before-close` 的问题 +* 6、【修复】`vk-data-drawer` 无法正常触发 `before-close` 的问题 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.17(2021-09-16) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.30` +* 2、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.16(2021-09-15) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.29` +* 2、【优化】`万能表格` 在弹窗模式下,行高自适应逻辑。 +* 3、【优化】`万能表单` `table-select` 行高自适应逻辑。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.15(2021-09-14) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.27` +* 2、【优化】当页面中有多个 `万能表格` 组件时,表格高度可能无法正常自适应的问题。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.14(2021-09-13) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.23` +* 2、【优化】补全内置的3个组件(icon、dialog、link)文档 [点击查看](https://vkdoc.fsq.pub/admin/components2/1%E3%80%81vk-data-icon.html) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.13(2021-09-13) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.23` +* 2、【修复】`素材管理` 上传图片后有概率无法及时回显的bug。(需同时更新uni_modules/vk-unicloud) [点击查看](https://vkdoc.fsq.pub/admin/components/25%E3%80%81file-select.html) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.12(2021-09-05) +#### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +#### 更新内容 + +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.21` +* 2、【修复】因`1.5.11`更新造成的`db_init.json`数据格式错误,导致权限管理页面无法正常打开的问题。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +#### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.11(2021-09-04) +#### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +#### 更新内容 + +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.21` +* 2、【优化】`万能表格` `tag` 类型渲染支持 数组形式(渲染标签组),同时新增effect:dark / light / plain 3选1 + +```js +{ + key:"xxxxx", title:"身份类型", type:"tag", width:200, + effect:"light", + data:[ + { value:"region", label:"区域代理" }, + { value:"shareholder", label:"商城股东", tagType:"danger" } + ] +} +``` + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +#### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.10(2021-09-01) +#### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +#### 更新内容 + +* 【修复】`素材管理` 上传图片后有概率无法及时回显的bug。(需同时更新uni_modules/vk-unicloud) [点击查看](https://vkdoc.fsq.pub/admin/components/25%E3%80%81file-select.html) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +#### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.9(2021-09-01) +#### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +#### 更新内容 + +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.19` +* 2、【优化】`database`内的初始化文件 +* 3、【优化】`菜单管理`中菜单标识长度修改为2-40个字符。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +#### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.8(2021-08-31) +#### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +#### 更新内容 + +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.19` +* 2、【新增】配置`vk.db.unicloud.getTableData.sortArr`,可以设置`vk.baseDao.getTableData`全局默认排序规则 +* 3、【修复】`万能表单`中 `money`、`number`、`percentage`、`discount` 的 `onChange` 返回的值不是数值类型的bug。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +#### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.7(2021-08-28) +#### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +#### 更新内容 + +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.18` +* 2、【优化】`用户管理` 需自行替换新版文件 /pages_plugs/system/user/list +* 3、【优化】`应用管理` 需自行替换新版文件 /pages_plugs/system/app/list +* 4、【优化】`万能表单` `cascader` 组件支持 `onChange` [点击查看](https://vkdoc.fsq.pub/admin/components/11%E3%80%81cascader.html#onchange-%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +#### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.6(2021-08-28) +#### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +#### 更新内容 + +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.18` +* 2、【优化】`用户管理` 需自行替换新版文件 /pages_plugs/system/user/list +* 3、【优化】`应用管理` 需自行替换新版文件 /pages_plugs/system/app/list +* 4、【优化】`万能表单` `cascader` 组件支持 `onChange` [点击查看](https://vkdoc.fsq.pub/admin/components/11%E3%80%81cascader.html#onchange-%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B) + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +#### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.5(2021-08-28) +#### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +#### 更新内容 + +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.16` +* 2、【修复】万能表格前端`queryForm1.sortRule`(排序)不生效的bug。 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +#### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.4(2021-08-26) +#### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +#### 更新内容 + +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.13` +* 2、【优化】使用帮助/代码快捷提示/javascript代码块提示.json 新增新加的几个api的代码提示,同时输入`qw`可以快捷输出常用过滤器代码。 +* 3、【优化】`万能表格` 支持展开行 [点击查看](https://vkdoc.fsq.pub/admin/2/table.html#http%E8%AF%B7%E6%B1%82%E6%A8%A1%E5%BC%8F) +* 4、【修复】`万能表格` 树形结构展示的bug + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +#### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.3(2021-08-26) +#### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +#### 更新内容 + +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.13` +* 2、【优化】使用帮助/代码快捷提示/javascript代码块提示.json 新增新加的几个api的代码提示,同时输入`qw`可以快捷输出常用过滤器代码。 +* 3、【优化】`万能表格` 支持展开行 [点击查看](https://vkdoc.fsq.pub/admin/2/table.html#http%E8%AF%B7%E6%B1%82%E6%A8%A1%E5%BC%8F) +* 4、【修复】`万能表格` 树形结构展示的bug + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +#### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.2(2021-08-24) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 + +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.11` +* 2、【新增】`vk.pubfn.getDayOffsetStartAndEnd` 获得相对当前时间的偏移 count 天的起止日期(日的开始和结束) [点击查看](https://vkdoc.fsq.pub/client/jsapi.html#vk-pubfn-getdayoffsetstartandend-%E8%8E%B7%E5%BE%97%E7%9B%B8%E5%AF%B9%E5%BD%93%E5%89%8D%E6%97%B6%E9%97%B4%E7%9A%84%E5%81%8F%E7%A7%BB-count-%E5%A4%A9%E7%9A%84%E8%B5%B7%E6%AD%A2%E6%97%A5%E6%9C%9F) +* 3、【新增】`vk.pubfn.getMonthOffsetStartAndEnd` 获得相对当前时间的偏移 count 月的起止日期(月的开始和结束) [点击查看](https://vkdoc.fsq.pub/client/jsapi.html#vk-pubfn-getmonthoffsetstartandend-%E8%8E%B7%E5%BE%97%E7%9B%B8%E5%AF%B9%E5%BD%93%E5%89%8D%E6%97%B6%E9%97%B4%E7%9A%84%E5%81%8F%E7%A7%BB-count-%E6%9C%88%E7%9A%84%E8%B5%B7%E6%AD%A2%E6%97%A5%E6%9C%9F) +* 4、【新增】`vk.pubfn.getYearOffsetStartAndEnd`获得相对当前时间的偏移 count 年的起止日期(年的开始和结束) [点击查看](https://vkdoc.fsq.pub/client/jsapi.html#vk-pubfn-getyearoffsetstartandend-%E8%8E%B7%E5%BE%97%E7%9B%B8%E5%AF%B9%E5%BD%93%E5%89%8D%E6%97%B6%E9%97%B4%E7%9A%84%E5%81%8F%E7%A7%BB-count-%E5%B9%B4%E7%9A%84%E8%B5%B7%E6%AD%A2%E6%97%A5%E6%9C%9F) +* 5、【优化】`万能表格` 的查询action支持http请求(传统后端请求)[点击查看](https://vkdoc.fsq.pub/admin/2/table.html#http%E8%AF%B7%E6%B1%82%E6%A8%A1%E5%BC%8F) +* 6、【优化】`万能表单` 的提交action支持http请求(传统后端请求)[点击查看](https://vkdoc.fsq.pub/admin/3/form.html#http%E8%AF%B7%E6%B1%82%E6%A8%A1%E5%BC%8F) + +#### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.1(2021-08-16) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.2` +#### 2、【重要】文档已搬家(gitee文档地址仅作为备用地址)[查看新版文档地址](https://vkdoc.fsq.pub/) + +#### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.5.0(2021-08-11) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.5.1` +#### 2、【升级】`element-ui` 包升级至 `2.15.5` +#### 3、【优化】一些细节 +#### 4、【新增】万能表格新增方法`getTableFormatterData`(获取整个表格数据(格式化后的数据)) [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4003876&doc_id=975983) +```js +let info = this.$refs.table1.getTableFormatterData(); +console.log(info); +``` +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.4.2(2021-08-06) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.4.1` +#### 2、【新增】登录日志支持按应用搜索,支持显示登录用户头像昵称 +#### 3、【优化】一些细节 +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.4.1(2021-08-04) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.4.0` +#### 2、【重要】适配`uni-id 3.3.3`:支持不同端用户隔离 [点击查看文档](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4313231&doc_id=975983) +#### 3、【重要】用户管理全面升级,支持展示不同端用户,支持`批量设置可登录的应用` +#### 4、【重要】新增应用管理 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.4.0(2021-08-04) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.4.0` +#### 2、【重要】适配`uni-id 3.3.2`:支持不同端用户隔离 [点击查看文档](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4313231&doc_id=975983) +#### 3、【重要】用户管理全面升级,支持展示不同端用户。 +#### 4、【重要】新增应用管理 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.3.6(2021-07-28) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.3.4` +#### 2、【修复】万能表单 `array` 嵌套 `array`时,控制台会报错的问题。 +#### 3、【优化】万能表单 `table-select` 组件新增 `dialogWidth` 属性(控制弹窗宽度) + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.3.5(2021-07-22) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【修复】常用的 vk.baseDao `javascript代码块提示`(有部分错误的问题:少,号的问题)(在编辑器输入dao.即可弹出代码提示)[点击查看详情](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4019184&doc_id=975983) + + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.3.4(2021-07-22) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.3.3` +#### 2、【优化】新增常用的 vk.baseDao `javascript代码块提示` (在编辑器输入dao.即可弹出代码提示)[点击查看详情](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4019184&doc_id=975983) + + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.3.3(2021-07-12) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 【修复】已知问题 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.3.2(2021-07-12) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.3.2` +#### 2、【优化】部分输入性组件补全 readonly(只读)属性 +#### 3、【修复】连表查询时,因`lastWhereJson`而导致`getCount`错误的问题。 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.3.1(2021-07-12) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.3.2` +#### 2、【优化】部分输入性组件补全 readonly(只读)属性 +#### 3、【修复】连表查询时,因`lastWhereJson`而导致`getCount`错误的问题。 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.3.0(2021-07-09) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.3.0` +#### 2、【升级】`element-ui` 包升级至 `2.15.3`(有新增2个组件) [查看elementUI更新日志](https://element.eleme.cn/#/zh-CN/component/changelog) +#### 3、【重要调整】删除了`config`公共模块,升级为`uni-config-center`模式 [点击查看升级教程](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4219337&doc_id=975983) +#### 3、【重要调整】删除了`config`公共模块,升级为`uni-config-center`模式 [点击查看升级教程](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4219337&doc_id=975983) +#### 3、【重要调整】删除了`config`公共模块,升级为`uni-config-center`模式 [点击查看升级教程](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4219337&doc_id=975983) +#### 4、【重要】万能表格搜索组件`vk-data-table-query`文档(支持搜索折叠) [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4214905&doc_id=975983) + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.2.7(2021-07-07) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.2.18` +#### 2、【新增】`admin/system/menu/sys/getCascader`(cascader 级联选择组件 远程懒加载方式的云函数示例)[点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050268&doc_id=975983) +#### 3、【新增】`万能表格`新增合计列的属性show-summary、summary-method 、total-option [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4003876&doc_id=975983) + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.2.6(2021-07-05) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.2.16` +#### 2、【优化】权限管理页面逻辑(部分修改完成后,减少一次数据库查询) +#### 3、【优化】菜单管理页面逻辑(部分修改完成后,减少一次数据库查询) +#### 4、【优化】优化手机H5浏览时的部分样式。 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.2.5(2021-07-03) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.2.15` +#### 2、【调整】去除系统内置的`初级管理员`、`中级管理员`、`高级管理员`角色 +#### 3、【优化】权限管理页面逻辑 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.2.4(2021-07-03) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.2.15` +#### 2、【调整】万能表格 `getCurrentRow()` 方法调整如下 +```js +// 获取当前选中行的数据(拷贝一份新的数据),此时若改变item对象内属性的值,不影响表格本行数据。 +let item = that.$refs.table1.getCurrentRow(); +// 获取当前选中行的数据,此时若改变item对象内属性的值,可以实时更新表格本行数据。 +let item = that.$refs.table1.getCurrentRow(true); +``` +#### 3、【修复】万能表单 `checkbox` 第二次显示可能会报错的问题。 + + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.2.3(2021-07-02) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.2.12` +#### 2、【修复】`万能表单`的 `remote-select` 当 showAll:true 时,actionData参数无效的问题。 +#### 3、【修复】`万能表单`的 `file-select` 已知bug。 + + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.2.2(2021-07-01) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.2.9` +#### 2、【修复】`素材管理`优化。需替换目录`/pages_plugs/system_uni/uni-id-files/` +#### 3、【优化】`万能表单`的 `remote-select`、 `radio`、 `checkbox`新增属性 `dataPreprocess`(数据预处理函数)[点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050267&doc_id=975983) +#### 4、【修复】`万能表单`的 `file-select` 已知bug [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4176041&doc_id=975983) + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.2.1(2021-06-28) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.2.7` +#### 2、【修复】已知bug + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.2.0(2021-06-28) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.2.6` +#### 2、【修复】`manifest.json`的 H5 配置中运行的基础路径 由 `admin` 改成 `/admin/`(规范)(如果你的前端托管只发布admin,则可以设置为空) +#### 3、【新增】万能表单新增 `file-select` 组件(素材库选择组件),可以直接选择已上传的素材。[点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4176041&doc_id=975983) +#### 4、【重要】新增 `素材管理` 页面,可管理已上传的图片、视频、文件等素材。[点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4176041&doc_id=975983) + +#### 5、【优化】万能表单`remote-select` 新增属性`actionData` [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050267&doc_id=975983) +#### 6、【优化】万能表单`radio` 新增属性`actionData` [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050276&doc_id=975983) +#### 7、【优化】万能表单`checkbox` 新增属性`actionData` [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050277&doc_id=975983) + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + + +## 1.1.9(2021-06-23) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.1.19` +#### 2、【修复】`万能表格` 导出 `Excel` 的一些已知问题。 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + + +## 1.1.8(2021-06-22) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.1.17` +#### 2、【修复】`万能表单` 组件 `table-select` 当设置为单选时 `onChange` 事件 返回参数 `option` 的值改为对象(之前是数组)[点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050276&doc_id=975983) + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论。 +## 1.1.7(2021-06-21) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.1.15` +#### 2、【升级】`element-ui` 包升级至 `2.15.2` +#### 3、【优化】`万能表单` 组件 `remote-select`、`table-select`、`select`、`checkbox`、`radio` 的 `onChange` 事件 新增返回参数 `option` 值为选项的对象值 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050276&doc_id=975983) +```js +{ + key:"user_id", title:"用户选择器", type:"remote-select", placeholder:"请输入用户账号/昵称", + action:"admin/select/kh/user", + onChange:function(val, formData, column, index, option){ + // option内的值为与val匹配的选项的数据源完整数据 + console.log(1,val, formData, column, index, option); + } +} +``` + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.1.6(2021-06-18) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.1.13` +#### 2、【修复】`vk.baseDao.add` 因hbx 3.1.18版本导致的本地运行时 `_add_time_str` 错误的问题。 +#### 3、【新增】万能表单 `array` 的 `columns` 中每个元素新增 `onChange` 属性 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4109698&doc_id=975983) +#### 4、【新增】万能表单 `table-select` 新增 `valueFields` 属性(用于控制value的值由哪些字段组成) [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050269&doc_id=975983) +```js +// 不设置 `valueFields` 时 表单绑定的值为`字符串数组形式` +["001","002"] +// 设置 `valueFields` 时 表单绑定的值为`对象数组形式` +// 如 `valueFields:["_id","nickname","mobile"]` 表单绑定的值为 +[ + {"_id":"001","nickname":"昵称1","mobile":"手机号1"}, + {"_id":"002","nickname":"昵称2","mobile":"手机号2"} +] +``` +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + + +## 1.1.5(2021-06-15) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.1.11` +#### 2、【新增】`万能表单` 新增组件 `array`(子表单-对象数组) [点击查看文档](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4109698&doc_id=975983) +####  +#### 3、【新增】`万能表单` 新增组件 `array`(字符串数组) + ```js +{ key:"array1", title:"数组字符串类型", type:"array" } +``` + +#### 4、【新增】`万能表单` 新增组件 `array`(数字数组) +```js +{ key:"array2", title:"数组数字类型", type:"array" } +``` + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + + +## 1.1.4(2021-06-10) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.1.5` +#### 2、【新增】`万能表格`新增属性`default-sort`,支持表格默认排序 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4003876&doc_id=975983) +#### 如默认按时间降序 +```html + +``` +#### 3、【优化】`el-button` 组件支持 `vk-icon` 内置图标 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + + +## 1.1.3(2021-05-31) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.1.2` +#### 2、【优化】`万能表格`中`tag`组件当没有匹配到值时进行忽略处理。 +#### 3、【优化】`万能表格`中`time`组件正确识别10位数时间戳和13位时间戳,同时支持自定义时间g格式化 +```js +{ key:"_add_time", title:"添加时间", type:"time", width:160, valueFormat:"yyyy-MM-dd hh:mm:ss" } +``` + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论。 +## 1.1.2(2021-05-31) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.1.1` +#### 2、【新增】补全内置组件文档 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050270&doc_id=975983) +#### 3、【修复】`上传组件` 上传视频时后缀名可能会错误的问题。 +#### 4、【优化】`云函数URL化` 路由模式下,URL重写支持只允许部分云函数可被访问。(可以做到只暴露指定的API接口,增加URL化后的安全性)[点击URL重写规则](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=3916806&doc_id=975983) + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.1.1(2021-05-29) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.1.0` +#### 2、【新增】用户管理新增强制重置其他账号登录密码。 +#### 3、【新增】`table-select`、`address` 等组件文档 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050269&doc_id=975983) + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.1.0(2021-05-29) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.0.19` +#### 2、【新增】用户管理新增强制重置其他账号登录密码。 +#### 3、【新增】`table-select`、`address` 等组件文档 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050269&doc_id=975983) + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.0.9(2021-05-28) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.0.19` +#### 2、【新增】强制重置admin账号密码教程 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4064984&doc_id=975983) +#### 3、【优化】`下拉选择`支持分组 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050278&doc_id=975983) + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 +## 1.0.8(2021-05-27) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.0.18` +#### 2、【优化】`cascader` 组件的内部逻辑,支持异步加载。 +#### 3、【修复】`上传组件` 上传视频时后缀名可能会错误的问题。 +#### 4、【优化】将`系统设置`菜单变更为动态菜单(导入`database/动态菜单导入/系统设置.json`即可) +```js +动态菜单导入方式: +1、进入admin,点击菜单管理 +2、点击通过JSON批量导入菜单 +3、将`database/动态菜单导入/系统设置.json`内的全部内容复制到JSON内容中,点确定即可 +4、可以删除`static_menu/menu.json`内的系统设置相关的菜单了。(由静态菜单变成了动态菜单) +``` + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.0.7(2021-05-26) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.0.18` +#### 2、【优化】`vk.baseDao.selects` 新增两个属性`getOne` 、 `getMain` [点击查看详情](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4054561&doc_id=975983) +#### 3、【优化】`万能表格`的搜索组件 新增`cascader`、`table-select`组件渲染。 +#### 4、【优化】`万能表格`组件新增API `deleteRows`、`updateRows` (只更新表格内数据,不更新数据库) +```js +// 删除指定的行(不删数据库数据) +that.$refs.table1.deleteRows({ + ids:["60acf6248a69dc00018d8520"], + success:function(){ + + } +}); +// 更新指定的行数据(不更新据库数据) +that.$refs.table1.updateRows({ + mode:"update", // update 局部字段更新 set 覆盖字段更新 + rows:[ + { _id:"60acf6248a69dc00018d8520", remark:"被修改了", money:10000 } + ], + success:function(){ + + } +}); +``` + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.0.6(2021-05-24) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.0.13` +#### 2、【优化】`万能表单`中单选和多选组的样式排版。增加属性`itemWidth` 所有选项的最小宽度。 +#### 3、【优化】`remote-select`新增属性 `props` [点击查看组件文档](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050267&doc_id=975983) +#### 4、【优化】`radio` 和 `checkbox` 支持远程数据(通过云函数获取选项) [点击查看组件文档](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050276&doc_id=975983) + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.0.5(2021-05-24) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.0.11` +#### 2、【优化】`万能表单`中单选和多选组的样式排版。增加属性`itemWidth` 所有选项的最小宽度。 +#### 3、【优化】`remote-select`新增属性 `props` [点击查看组件文档](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050267&doc_id=975983) +#### 4、【优化】`radio` 和 `checkbox` 支持远程数据(通过云函数获取选项) [点击查看组件文档](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4050276&doc_id=975983) +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.0.4(2021-05-22) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【优化】`vk.baseDao` API的查询性能。 +#### 2、【调整】`vk.baseDao.getTableData` 默认排序规则调整为`_id`降序,之前是`_add_time`降序 +#### 3、【优化】`vk.baseDao.getTableData` 和 `vk.baseDao.selects` 连表查询逻辑。 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.0.3(2021-05-20) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.0.10` +#### 2、【修复】`pages_plugs/permission/list`页面`sort`的`type`为`number`(原本为`text`) + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.0.2(2021-05-18) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.0.9` +#### 2、【新增】`JSON编辑器` `type: "json"` 可自由的编辑json对象 + +#### 3、【修复】`vk-data-input-editor` 组件在其他组件中使用时功能异常的bug + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.0.1(2021-05-17) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.0.4` +#### 2、【优化】`opendb-admin-menus`(菜单表) 新增属性`hidden_menu` 若为true,则菜单存在,但在左侧菜单列表中隐藏。 +#### 3、【修复】手机访问时,不显示用户角色权限菜单的bug。 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) + +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 1.0.0(2021-05-15) + +### 2021-05-15 `vk-unicloud-admin` 框架正式发布。 + + + +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 插件名称:`vk-unicloud-admin` +### 作者:VK + +## 序 +##### 如果你热爱编程,想快速入门云开发,欢迎使用`vk-unicloud`系列开发框架 +##### 无需转变开发习惯,0成本上手云开发。 +##### 框架内置了众多API、工具包,为你的业务扫平障碍。使你的项目刚起步进度就是50%(微信登录、短信、验证码、缓存、生成小程序码等等) +##### 从此你又get一个新技能,只需用js,轻松搞定前后台整体业务。 +##### `client端`框架文档:`https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=2912167&doc_id=975983` [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=2912167&doc_id=975983) +##### `admin端`框架文档:`https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4003875&doc_id=975983` [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4003875&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 框架体验地址 + +[点击进入admin框架体验地址](https://vkunicloud.fsq.pub/admin/) + +#### 体验账号: +##### 高级管理员:test11(账号)123456(密码)可以执行绝大部分功能 +##### 初级管理员:test12(账号)123456(密码)只能执行查询功能 +##### 无权限用户:test13(账号)123456(密码)无admin登录权限 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 2021-05-15 `vk-unicloud-admin` 框架正式发布。 + + + +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 插件名称:`vk-unicloud-admin` +### 作者:VK + +## 序 +##### 如果你热爱编程,想快速入门云开发,欢迎使用`vk-unicloud`系列开发框架 +##### 无需转变开发习惯,0成本上手云开发。 +##### 框架内置了众多API、工具包,为你的业务扫平障碍。使你的项目刚起步进度就是50%(微信登录、短信、验证码、缓存、生成小程序码等等) +##### 从此你又get一个新技能,只需用js,轻松搞定前后台整体业务。 +##### `client端`框架文档:`https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=2912167&doc_id=975983` [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=2912167&doc_id=975983) +##### `admin端`框架文档:`https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4003875&doc_id=975983` [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4003875&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 框架体验地址 + +[点击进入admin框架体验地址](https://vkunicloud.fsq.pub/admin/) + +#### 体验账号: +##### 高级管理员:test11(账号)123456(密码)可以执行绝大部分功能 +##### 初级管理员:test12(账号)123456(密码)只能执行查询功能 +##### 无权限用户:test13(账号)123456(密码)无admin登录权限 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + +## 2021-05-15 `vk-unicloud-admin` 框架正式发布。 + + + +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 插件名称:`vk-unicloud-admin` +### 作者:VK + +## 序 +##### 如果你热爱编程,想快速入门云开发,欢迎使用`vk-unicloud`系列开发框架 +##### 无需转变开发习惯,0成本上手云开发。 +##### 框架内置了众多API、工具包,为你的业务扫平障碍。使你的项目刚起步进度就是50%(微信登录、短信、验证码、缓存、生成小程序码等等) +##### 从此你又get一个新技能,只需用js,轻松搞定前后台整体业务。 +##### `client端`框架文档:`https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=2912167&doc_id=975983` [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=2912167&doc_id=975983) +##### `admin端`框架文档:`https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4003875&doc_id=975983` [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4003875&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 框架体验地址 + +[点击进入admin框架体验地址](https://vkunicloud.fsq.pub/admin/) + +#### 体验账号: +##### 高级管理员:test11(账号)123456(密码)可以执行绝大部分功能 +##### 初级管理员:test12(账号)123456(密码)只能执行查询功能 +##### 无权限用户:test13(账号)123456(密码)无admin登录权限 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + diff --git a/changelog.new.md b/changelog.new.md new file mode 100644 index 0000000..a8dfd35 --- /dev/null +++ b/changelog.new.md @@ -0,0 +1,14 @@ +* 【升级】`vk-unicloud-admin-ui` 包升级至 `1.17.45` +* 【调整】`万能表单` `vk-data-input-editor` 组件的js依赖内置到项目里,防止因quill官方CDN无法访问导致editor组件渲染失败的问题 +* 【修复】`万能表单` 部分复杂情况下表单验证未生效的问题 +* 【修复】`万能表格` `object` 内 `oneLine:true` 不生效的bug +* 【修复】`万能表单` `object` 内 `disabled` 不生效的bug +* 【修复】`万能表格` `:searched-clean-selection="false"` 时,分页会导致多选框清空的问题 +* 【修复】`万能表格` 点击右侧按钮时可能会出现请先选中一行的bug +* 【优化】`pages_plugs/system_uni/vk-pay-orders.vue`页面新增支付渠道区分 +* 【优化】`万能表格` 导出的文件名支持自定义扩展名 +* 【优化】`万能表格` 新增 `getRowIndex` 方法 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 +##### 如果你觉得框架对你有用,可以在下方进行评论或赞赏。 diff --git a/common/css/app.scss b/common/css/app.scss new file mode 100644 index 0000000..dd8bc6f --- /dev/null +++ b/common/css/app.scss @@ -0,0 +1,47 @@ +/* 这里是你自己写的全局css样式 */ + +/* 滚动条美化方案开始 去掉下方css的注释即可 */ + +::-webkit-scrollbar { + width: 6px; + height: 6px; +} +::-webkit-scrollbar-track { + background: rgba(135, 135, 135, 0.1); +} +::-webkit-scrollbar-thumb { + background: rgba(135, 135, 135, 0.4); + border-radius: 6px; +} +::-webkit-scrollbar-thumb:hover { + background: rgba(135, 135, 135, 0.8); +} + +/* 滚动条美化方案结束 */ + +/* 富文本编辑器样式开始 */ +.ql-indent-1{ + padding-left: 3em; +} +.ql-indent-2{ + padding-left: 6em; +} +.ql-indent-3{ + padding-left: 9em; +} +.ql-indent-4{ + padding-left: 12em; +} +.ql-indent-5{ + padding-left: 15em; +} +.ql-indent-6{ + padding-left: 18em; +} +.ql-indent-7{ + padding-left: 21em; +} +.ql-indent-8{ + padding-left: 24em; +} +/* 富文本编辑器样式结束 */ \ No newline at end of file diff --git a/common/css/uni.scss b/common/css/uni.scss new file mode 100644 index 0000000..3e8a5dc --- /dev/null +++ b/common/css/uni.scss @@ -0,0 +1,104 @@ +// 这里是uni-app内置的常用样式变量 + +// uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 +// 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + + +// 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + +// 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + + +// 颜色变量 + +// 行为相关颜色 +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +// 文字基本颜色 +$uni-text-color:#333; // 基本色 +$uni-text-color-inverse:#fff; // 反色 +$uni-text-color-grey:#999; // 辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +// 背景颜色 +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1; //点 击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4); // 遮罩颜色 + +// 边框颜色 +$uni-border-color:#e4e7ed; + +// 尺寸变量 + +// 文字尺寸 +$uni-font-size-sm:12px; +$uni-font-size-base:14px; +$uni-font-size-lg:16px; + +// 图片尺寸 +$uni-img-size-sm:20px; +$uni-img-size-base:26px; +$uni-img-size-lg:40px; + +// Border Radius +$uni-border-radius-sm: 3px; +$uni-border-radius-base: 5px; +$uni-border-radius-lg: 10px; +$uni-border-radius-circle: 50%; + +// 水平间距 +$uni-spacing-row-sm: 10px; +$uni-spacing-row-base: 15px; +$uni-spacing-row-lg: 20px; + +// 垂直间距 +$uni-spacing-col-sm: 5px; +$uni-spacing-col-base: 10px; +$uni-spacing-col-lg: 15px; + +// 透明度 +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +// 文章场景相关 +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:20px; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:18px; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:14px; + + +$menu-bg-color:#fff; // 一级菜单背景色 +$sub-menu-bg-color:darken($menu-bg-color, 8%); // 二级以下菜单背景色 +$menu-bg-color-hover:darken($menu-bg-color, 15%); // 菜单 hover 背景颜色 + +$menu-text-color: #333; // 菜单前景色 +$menu-text-color-actived: #409eff; // 菜单激活前景色 + +$left-window-bg-color: $menu-bg-color; // 左侧窗口背景色 + +$top-window-bg-color: #fff; // 顶部窗口背景色 +$top-window-text-color: #999; // 顶部窗口前景色 +// 水平垂直居中 +@mixin flex_center_center { + display: flex; + justify-content: center; + align-items: center; +} +// 换行居中 +@mixin flex_direction_center { + display: flex; + justify-content: center; + flex-direction: column; +} +// 水平可换行居中 +@mixin flex_justify_center{ + display: flex; + align-items: center; + flex-wrap: wrap; +} diff --git a/common/function/myPubFunction.js b/common/function/myPubFunction.js new file mode 100644 index 0000000..87a7a33 --- /dev/null +++ b/common/function/myPubFunction.js @@ -0,0 +1,15 @@ +/** + * 自定义公共函数 + */ +var myfn = {}; +/** + * 测试函数test1 + * vk.myfn.test1(); + */ +myfn.test1 = function(obj = {}) { + let vk = uni.vk; + console.log("执行了自定义公共函数test1"); + return obj; +}; + +export default myfn; diff --git a/common/theme/black.js b/common/theme/black.js new file mode 100644 index 0000000..df1a8b8 --- /dev/null +++ b/common/theme/black.js @@ -0,0 +1,23 @@ +// 纯黑主题 +export default { + // 左侧菜单样式 + leftMenu: { + backgroundColor: "#191a23", + subBackgroundColor:"#101117", + textColor: "rgba(255,255,255,0.9)", + activeTextColor: "#ffffff", + activeBackgroundColor: "#2d8cf0", + collapseActiveTextColor:"#2d8cf0", + collapseActiveBackgroundColor: "#2c3239", + hoverTextColor: "#ffffff", + hoverBackgroundColor: "#545f6c", + boxShadow: "0px 0 0px rgba(0,21,4,0.2)", + //boxShadow: "2px 0 2px rgba(0,21,4,0.2)", + //borderTop: "1px solid #101117" + }, + // 顶部菜单样式 + topMenu: { + backgroundColor: "#191a23", + textColor: "#f0f0f0", + } +} diff --git a/common/theme/blackWhite.js b/common/theme/blackWhite.js new file mode 100644 index 0000000..485c0e9 --- /dev/null +++ b/common/theme/blackWhite.js @@ -0,0 +1,23 @@ +// 黑白主题(左侧菜单黑,顶部白) +export default { + // 左侧菜单样式 + leftMenu: { + backgroundColor: "#191a23", + subBackgroundColor:"#101117", + textColor: "rgba(255,255,255,0.9)", + activeTextColor: "#ffffff", + activeBackgroundColor: "#2d8cf0", + collapseActiveTextColor:"#2d8cf0", + collapseActiveBackgroundColor: "#2c3239", + hoverTextColor: "#ffffff", + hoverBackgroundColor: "#545f6c", + boxShadow: "0px 0 0px rgba(0,21,4,0.25)", + //boxShadow: "2px 0 4px rgba(0,21,4,0.25)", + //borderTop: "1px solid #101117" + }, + // 顶部菜单样式 + topMenu: { + backgroundColor: "#ffffff", + textColor: "#999999", + } +} diff --git a/common/theme/index.js b/common/theme/index.js new file mode 100644 index 0000000..a68f4db --- /dev/null +++ b/common/theme/index.js @@ -0,0 +1,9 @@ +import white from './white.js' +import black from './black.js' +import blackWhite from './blackWhite.js' + +export default { + white, + black, + blackWhite +}; diff --git a/common/theme/white.js b/common/theme/white.js new file mode 100644 index 0000000..efe5da6 --- /dev/null +++ b/common/theme/white.js @@ -0,0 +1,23 @@ +// 纯白主题 +export default { + // 左侧菜单样式 + leftMenu: { + backgroundColor: "#ffffff", + subBackgroundColor:"#ffffff", + textColor: "#303133", + activeTextColor: "#409EFF", + activeBackgroundColor: "#ecf5ff", + collapseActiveTextColor:"#409EFF", + collapseActiveBackgroundColor: "#ecf5ff", + hoverTextColor: "#303133", + hoverBackgroundColor: "#efefef", + boxShadow: "0px 0 0px 0 rgba(29,35,41,0.05)", + //boxShadow: "2px 0 0px 0 rgba(29,35,41,0.05)", + borderTop: "1px solid #f8f8f9" + }, + // 顶部菜单样式 + topMenu: { + backgroundColor: "#ffffff", + textColor: "#999999", + } +} diff --git a/common/uni-admin/css/uni-icons.css b/common/uni-admin/css/uni-icons.css new file mode 100644 index 0000000..e6e5859 --- /dev/null +++ b/common/uni-admin/css/uni-icons.css @@ -0,0 +1,542 @@ +@font-face { + font-family: uni-icons; + src: url('data:application/octet-stream;base64,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5nkAAOZ5AAAAVQAA5noAAOZ6AAAAVgAA5nsAAOZ7AAAAVwAA5nwAAOZ8AAAAWAAA5n0AAOZ9AAAAWQAA5n4AAOZ+AAAAWgAA5n8AAOZ/AAAASAAA5oAAAOaAAAAASQAA5oEAAOaBAAAASgAA5oIAAOaCAAAASwAA5oMAAOaDAAAAKgAA5oQAAOaEAAAATAAA5oUAAOaFAAAATQAA5oYAAOaGAAAATgAA5ocAAOaHAAAATwAA5ogAAOaIAAAAKwAA5okAAOaJAAAAUAAA5ooAAOaKAAAAUQAA5osAAOaLAAAAUgAA5owAAOaMAAAAUwAA5o0AAOaNAAAAVAAA5o4AAOaOAAAARQAA5o8AAOaPAAAALAAA5pAAAOaQAAAARgAA5pEAAOaRAAAARwAA5pIAAOaSAAAAPwAA5pMAAOaTAAAAQAAA5pQAAOaUAAAAQQAA5pUAAOaVAAAAQgAA5pYAAOaWAAAAQwAA5pcAAOaXAAAARAAA5pgAAOaYAAAAFQAA5pkAAOaZAAAAOQAA5poAAOaaAAAAOgAA5psAAOabAAAAOwAA5pwAAOacAAAAPAAA5p0AAOadAAAAFAAA5p4AAOaeAAAAPQAA5p8AAOafAAAAPgAA5qAAAOagAAAALQAA5qEAAOahAAAALgAA5qIAAOaiAAAALwAA5qMAAOajAAAAMAAA5qQAAOakAAAAMQAA5qUAAOalAAAAMgAA5qYAAOamAAAAMwAA5qcAAOanAAAANAAA5qgAAOaoAAAANQAA5qkAAOapAAAANgAA5qoAAOaqAAAANwAA5qsAAOarAAAAOAAA5qwAAOasAAAAJwAA5q0AAOatAAAAKAAA5q4AAOauAAAAKQAA5q8AAOavAAAAEwAA5rAAAOawAAAAJgAA5rEAAOaxAAAAAgAA5rIAAOayAAAAJQAA5rMAAOazAAAAIgAA5rQAAOa0AAAAIwAA5rUAAOa1AAAAHQAA5rYAAOa2AAAAHgAA5rcAAOa3AAAAHwAA5rgAAOa4AAAAHAAA5rkAAOa5AAAAFgAA5roAAOa6AAAAFwAA5rsAAOa7AAAAGAAA5rwAAOa8AAAAGQAA5r0AAOa9AAAAGgAA5r4AAOa+AAAAGwAA5r8AAOa/AAAAEgAA5sAAAObAAAAADAAA5sEAAObBAAAADQAA5sIAAObCAAAADgAA5sMAAObDAAAADwAA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ZWQLc2hvcC1maWxsZWQMc3RhZmYtZmlsbGVkCnZpcC1maWxsZWQLcGx1cy1maWxsZWQRZm9sZGVyLWFkZC1maWxsZWQMeWFuc2UtZmlsbGVkC3R1bmUtZmlsbGVkD2NhbGVuZGFyLWZpbGxlZBNub3RpZmljYXRpb24tZmlsbGVkDXdhbGxldC1maWxsZWQMbWVkYWwtZmlsbGVkC2dpZnQtZmlsbGVkC2ZpcmUtZmlsbGVkDHJlZnJlc2hlbXB0eQ9sb2NhdGlvbi1maWxsZWQNcGVyc29uLWZpbGxlZBBwZXJzb25hZGQtZmlsbGVkBGJhY2sHZm9yd2FyZAthcnJvdy1yaWdodAphcnJvdy1sZWZ0CGFycm93LXVwCmFycm93LWRvd24GYm90dG9tBXJpZ2h0A3RvcARsZWZ0A2V5ZQpleWUtZmlsbGVkCWV5ZS1zbGFzaBBleWUtc2xhc2gtZmlsbGVkC2luZm8tZmlsbGVkBnJlbG9hZA1taWNvZmYtZmlsbGVkD21hcC1waW4tZWxsaXBzZQdtYXAtcGluCGxvY2F0aW9uCHN0YXJoYWxmBHN0YXILc3Rhci1maWxsZWQIY2FsZW5kYXIEZmlyZQVtZWRhbARmb250BGdpZnQEbGluawxub3RpZmljYXRpb24Fc3RhZmYDdmlwCmZvbGRlci1hZGQEdHVuZQRhdXRoBnBlcnNvbgxlbWFpbC1maWxsZWQMcGhvbmUtZmlsbGVkBXBob25lBWVtYWlsCXBlcnNvbmFkZBBjaGF0Ym94ZXMtZmlsbGVkB2NvbnRhY3QRY2hhdGJ1YmJsZS1maWxsZWQOY29udGFjdC1maWxsZWQJY2hhdGJveGVzCmNoYXRidWJibGUNdXBsb2FkLWZpbGxlZAZ1cGxvYWQGd2VpeGluB2NvbXBvc2UCcXEPZG93bmxvYWQtZmlsbGVkA3B5cQVzb3VuZAx0cmFzaC1maWxsZWQMc291bmQtZmlsbGVkBXRyYXNoD3ZpZGVvY2FtLWZpbGxlZA1zcGlubmVyLWN5Y2xlBXdlaWJvCHZpZGVvY2FtCGRvd25sb2FkBGhlbHAPbmF2aWdhdGUtZmlsbGVkCXBsdXNlbXB0eQtzbWFsbGNpcmNsZQxtaW51cy1maWxsZWQGbWljb2ZmCmNsb3NlZW1wdHkFY2xlYXIIbmF2aWdhdGUFbWludXMFaW1hZ2UDbWljCnBhcGVycGxhbmUFY2xvc2ULaGVscC1maWxsZWQRcGFwZXJwbGFuZS1maWxsZWQEcGx1cwptaWMtZmlsbGVkDGltYWdlLWZpbGxlZA1sb2NrZWQtZmlsbGVkBGluZm8GbG9ja2VkDWNhbWVyYS1maWxsZWQLY2hhdC1maWxsZWQGY2FtZXJhBmNpcmNsZQ5jaGVja21hcmtlbXB0eQRjaGF0DWNpcmNsZS1maWxsZWQEZmxhZwtmbGFnLWZpbGxlZAtnZWFyLWZpbGxlZARob21lC2hvbWUtZmlsbGVkBGdlYXISc21hbGxjaXJjbGUtZmlsbGVkCm1hcC1maWxsZWQDbWFwDnJlZnJlc2gtZmlsbGVkB3JlZnJlc2gMY2xvdWQtdXBsb2FkFWNsb3VkLWRvd25sb2FkLWZpbGxlZA5jbG91ZC1kb3dubG9hZBNjbG91ZC11cGxvYWQtZmlsbGVkBHJlZG8NaW1hZ2VzLWZpbGxlZAt1bmRvLWZpbGxlZARtb3JlC21vcmUtZmlsbGVkBHVuZG8GaW1hZ2VzCXBhcGVyY2xpcAhzZXR0aW5ncwZzZWFyY2gLcmVkby1maWxsZWQEbGlzdBBtYWlsLW9wZW4tZmlsbGVkEGhhbmQtZG93bi1maWxsZWQJaGFuZC1kb3duDmhhbmQtdXAtZmlsbGVkB2hhbmQtdXAMaGVhcnQtZmlsbGVkCW1haWwtb3BlbgVoZWFydARsb29wCHB1bGxkb3duBHNjYW4EYmFycwtjYXJ0LWZpbGxlZAhjaGVja2JveA9jaGVja2JveC1maWxsZWQEc2hvcApoZWFkcGhvbmVzBGNhcnQAAAAA') format('truetype'); + font-weight: 400; + font-display: "auto"; + font-style: normal +} + +[class*=" uni-icons-"], +[class^=uni-icons-] { + font-family: uni-icons !important; + speak: none; + font-style: normal; + font-weight: 400; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: baseline; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +.uni-icons-shop:before { + content: "\e609"; +} + +.uni-icons-headphones:before { + content: "\e8bf"; +} + +.uni-icons-pulldown:before { + content: "\e588"; +} + +.uni-icons-scan:before { + content: "\e612"; +} + +.uni-icons-back:before { + content: "\e471"; +} + +.uni-icons-forward:before { + content: "\e470"; +} + +.uni-icons-refreshempty:before { + content: "\e461"; +} + +.uni-icons-checkbox-filled:before { + content: "\e442"; +} + +.uni-icons-checkbox:before { + content: "\e7fa"; +} + +.uni-icons-loop:before { + content: "\e565"; +} + +.uni-icons-arrowthindown:before { + content: "\e585"; +} + +.uni-icons-arrowthinleft:before { + content: "\e586"; +} + +.uni-icons-arrowthinright:before { + content: "\e587"; +} + +.uni-icons-arrowthinup:before { + content: "\e584"; +} + +.uni-icons-bars:before { + content: "\e563"; +} + +.uni-icons-cart-filled:before { + content: "\e7f4"; +} + +.uni-icons-cart:before { + content: "\e7f5"; +} + +.uni-icons-arrowleft:before { + content: "\e582"; +} + +.uni-icons-arrowdown:before { + content: "\e581"; +} + +.uni-icons-arrowright:before { + content: "\e583"; +} + +.uni-icons-arrowup:before { + content: "\e580"; +} + +.uni-icons-eye-filled:before { + content: "\e568"; +} + +.uni-icons-eye-slash-filled:before { + content: "\e822"; +} + +.uni-icons-eye-slash:before { + content: "\e823"; +} + +.uni-icons-eye:before { + content: "\e824"; +} + +.uni-icons-reload:before { + content: "\e462"; +} + +.uni-icons-hand-thumbsdown-filled:before { + content: "\e83b"; +} + +.uni-icons-hand-thumbsdown:before { + content: "\e83c"; +} + +.uni-icons-hand-thumbsup-filled:before { + content: "\e83d"; +} + +.uni-icons-heart-filled:before { + content: "\e83e"; +} + +.uni-icons-hand-thumbsup:before { + content: "\e83f"; +} + +.uni-icons-heart:before { + content: "\e840"; +} + +.uni-icons-mail-open-filled:before { + content: "\e84d"; +} + +.uni-icons-mail-open:before { + content: "\e84e"; +} + +.uni-icons-list:before { + content: "\e562"; +} + +.uni-icons-map-pin:before { + content: "\e85e"; +} + +.uni-icons-map-pin-ellipse:before { + content: "\e864"; +} + +.uni-icons-paperclip:before { + content: "\e567"; +} + +.uni-icons-images-filled:before { + content: "\e87a"; +} + +.uni-icons-images:before { + content: "\e87b"; +} + +.uni-icons-search:before { + content: "\e466"; +} + +.uni-icons-settings:before { + content: "\e560"; +} + +.uni-icons-cloud-download:before { + content: "\e8e4"; +} + +.uni-icons-cloud-upload-filled:before { + content: "\e8e5"; +} + +.uni-icons-cloud-upload:before { + content: "\e8e6"; +} + +.uni-icons-cloud-download-filled:before { + content: "\e8e9"; +} + +.uni-icons-more:before { + content: "\e507"; +} + +.uni-icons-more-filled:before { + content: "\e537"; +} + +.uni-icons-refresh:before { + content: "\e407"; +} + +.uni-icons-refresh-filled:before { + content: "\e437"; +} + +.uni-icons-undo-filled:before { + content: "\e7d6"; +} + +.uni-icons-undo:before { + content: "\e406"; +} + +.uni-icons-redo:before { + content: "\e405"; +} + +.uni-icons-redo-filled:before { + content: "\e7d9"; +} + +.uni-icons-camera:before { + content: "\e301"; +} + +.uni-icons-camera-filled:before { + content: "\e7ef"; +} + +.uni-icons-smallcircle-filled:before { + content: "\e801"; +} + +.uni-icons-circle:before { + content: "\e411"; +} + +.uni-icons-flag-filled:before { + content: "\e825"; +} + +.uni-icons-flag:before { + content: "\e508"; +} + +.uni-icons-gear-filled:before { + content: "\e532"; +} + +.uni-icons-gear:before { + content: "\e502"; +} + +.uni-icons-home:before { + content: "\e500"; +} + +.uni-icons-info:before { + content: "\e504"; +} + +.uni-icons-home-filled:before { + content: "\e530"; +} + +.uni-icons-info-filled:before { + content: "\e534"; +} + +.uni-icons-circle-filled:before { + content: "\e441"; +} + +.uni-icons-chat-filled:before { + content: "\e847"; +} + +.uni-icons-chat:before { + content: "\e263"; +} + +.uni-icons-checkmarkempty:before { + content: "\e472"; +} + +.uni-icons-locked-filled:before { + content: "\e856"; +} + +.uni-icons-locked:before { + content: "\e506"; +} + +.uni-icons-map-filled:before { + content: "\e85c"; +} + +.uni-icons-map:before { + content: "\e364"; +} + +.uni-icons-minus-filled:before { + content: "\e440"; +} + +.uni-icons-mic-filled:before { + content: "\e332"; +} + +.uni-icons-minus:before { + content: "\e410"; +} + +.uni-icons-micoff:before { + content: "\e360"; +} + +.uni-icons-mic:before { + content: "\e302"; +} + +.uni-icons-clear:before { + content: "\e434"; +} + +.uni-icons-smallcircle:before { + content: "\e868"; +} + +.uni-icons-close:before { + content: "\e404"; +} + +.uni-icons-closeempty:before { + content: "\e460"; +} + +.uni-icons-paperplane:before { + content: "\e503"; +} + +.uni-icons-paperplane-filled:before { + content: "\e86e"; +} + +.uni-icons-image:before { + content: "\e363"; +} + +.uni-icons-image-filled:before { + content: "\e877"; +} + +.uni-icons-location-filled:before { + content: "\e333"; +} + +.uni-icons-location:before { + content: "\e303"; +} + +.uni-icons-plus-filled:before { + content: "\e439"; +} + +.uni-icons-plus:before { + content: "\e409"; +} + +.uni-icons-plusempty:before { + content: "\e468"; +} + +.uni-icons-help-filled:before { + content: "\e535"; +} + +.uni-icons-help:before { + content: "\e505"; +} + +.uni-icons-navigate-filled:before { + content: "\e884"; +} + +.uni-icons-navigate:before { + content: "\e501"; +} + +.uni-icons-mic-slash-filled:before { + content: "\e892"; +} + +.uni-icons-sound:before { + content: "\e590"; +} + +.uni-icons-sound-filled:before { + content: "\e8a1"; +} + +.uni-icons-spinner-cycle:before { + content: "\e465"; +} + +.uni-icons-download-filled:before { + content: "\e8a4"; +} + +.uni-icons-videocam-filled:before { + content: "\e8af"; +} + +.uni-icons-upload:before { + content: "\e402"; +} + +.uni-icons-upload-filled:before { + content: "\e8b1"; +} + +.uni-icons-starhalf:before { + content: "\e463"; +} + +.uni-icons-star-filled:before { + content: "\e438"; +} + +.uni-icons-star:before { + content: "\e408"; +} + +.uni-icons-trash:before { + content: "\e401"; +} + +.uni-icons-compose:before { + content: "\e400"; +} + +.uni-icons-videocam:before { + content: "\e300"; +} + +.uni-icons-trash-filled:before { + content: "\e8dc"; +} + +.uni-icons-download:before { + content: "\e403"; +} + +.uni-icons-qq:before { + content: "\e264"; +} + +.uni-icons-weibo:before { + content: "\e260"; +} + +.uni-icons-weixin:before { + content: "\e261"; +} + +.uni-icons-pengyouquan:before { + content: "\e262"; +} + +.uni-icons-chatboxes:before { + content: "\e203"; +} + +.uni-icons-chatboxes-filled:before { + content: "\e233"; +} + +.uni-icons-email-filled:before { + content: "\e231"; +} + +.uni-icons-email:before { + content: "\e201"; +} + +.uni-icons-person-filled:before { + content: "\e131"; +} + +.uni-icons-contact-filled:before { + content: "\e130"; +} + +.uni-icons-person:before { + content: "\e101"; +} + +.uni-icons-contact:before { + content: "\e100"; +} + +.uni-icons-phone:before { + content: "\e200"; +} + +.uni-icons-personadd-filled:before { + content: "\e132"; +} + +.uni-icons-personadd:before { + content: "\e102"; +} + +.uni-icons-phone-filled:before { + content: "\e230"; +} + +.uni-icons-chatbubble-filled:before { + content: "\e232"; +} + +.uni-icons-chatbubble:before { + content: "\e202"; +} diff --git a/common/uni-admin/css/uni.css b/common/uni-admin/css/uni.css new file mode 100644 index 0000000..e26a055 --- /dev/null +++ b/common/uni-admin/css/uni.css @@ -0,0 +1,543 @@ +/* 全局公共样式 */ + +/* body, +html { + -webkit-user-select: auto; + user-select: auto; + font-size: 16px; +} */ + +/* #ifdef H5 */ + +.uni-app--showleftwindow uni-main { + position: relative; + background-color: #f5f5f5; +} + +.uni-mask+.uni-left-window, +.uni-mask+.uni-right-window { + position: fixed; +} + +.uni-app--showleftwindow uni-page-head .uni-page-head { + color: #333 !important; +} + +uni-page-head .uni-btn-icon { + color: #333 !important; +} + +.uni-app--showleftwindow uni-page-head[uni-page-head-type=default]~uni-page-wrapper { + height: auto; + padding-top: 59px; +} + +/* .uni-app--showleftwindow uni-page-head~uni-page-wrapper uni-page-body { + padding-top: 44px; +} */ + +/* +.uni-app--showleftwindow uni-page-wrapper { + position: absolute; + width: 100%; + top: 0; + bottom: 0; + padding: 15px; + overflow-y: auto; + box-sizing: border-box; + background-color: #F5F5F5; +} + +.uni-app--showleftwindow uni-page-body { + width: 100%; + min-height: 100%; + box-sizing: border-box; + border-radius: 5px; + box-shadow: -1px -1px 5px 0 rgba(0, 0, 0, .1); + background-color: #fff; +} */ + +.uni-app--showleftwindow .uni-container .uni-forms { + padding: 15px; + max-width: 600px; +} + +/* #endif */ + +/* #ifndef H5 */ +.uni-nav-menu { + height: 100vh; +} + +/* #endif */ + +.pointer { + cursor: pointer; +} + +.uni-top-window { + z-index: 998; + overflow: visible; +} + +.uni-tips { + font-size: 12px; + color: #666; +} + +/* 容器 */ +.uni-container { + padding: 15px; + box-sizing: border-box; +} + +/* 标题栏 */ +.uni-header { + padding: 0 15px; + display: flex; + min-height: 55px; + align-items: center; + justify-content: space-between; + border-bottom: 1px #f5f5f5 solid; + flex-wrap: wrap; +} + +.uni-title { + margin-right: 10px; + font-size: 16px; + font-weight: 500; + color: #333; +} + +.uni-sub-title { + margin-top: 3px; + font-size: 14px; + color: #999; +} + +.uni-link { + color: #3A8EE6; + cursor: pointer; + text-decoration: underline; +} + +.uni-group { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + word-break: keep-all; +} + +/* 按钮样式 */ +.uni-button-group { + margin-top: 30px; + display: flex; + align-items: center; + justify-content: center; +} + +.uni-button { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; + line-height: 1; + margin: 0; + box-sizing: border-box; + overflow: initial; +} + +.uni-group .uni-button { + margin: 10px; +} + +.uni-group .uni-search { + margin: 10px; +} + +.uni-group>.uni-button:first-child { + margin-left: 0; +} + +.uni-button:hover, +.uni-button:focus { + opacity: 0.9; +} + +.uni-button:active { + opacity: 1; +} + +.uni-button-full { + width: 100%; +} + +/* 搜索框样式 */ +.uni-search { + width: 268px; + height: 28px; + line-height: 28px; + font-size: 12px; + color: #606266; + padding: 0 10px; + border: 1px #dcdfe6 solid; + border-radius: 3px; +} + +/* 分页容器 */ +.uni-pagination-box { + margin-top: 20px; +} + + +.uni-input-border, +.uni-textarea-border { + width: 100%; + font-size: 14px; + color: #666; + border: 1px #e5e5e5 solid; + border-radius: 5px; + box-sizing: border-box; +} + +.uni-input-border { + padding: 0 10px; + height: 35px; + +} + +.uni-textarea-border { + padding: 10px; + height: 80px; +} + +.uni-disabled { + background-color: #F5F7FA; + color: #C0C4CC; +} + +.uni-icon-password-eye { + position: absolute; + right: 8px; + top: 6px; + font-family: uniicons; + font-size: 20px; + font-weight: normal; + font-style: normal; + width: 24px; + height: 24px; + line-height: 24px; + color: #999999; +} + +.uni-eye-active { + color: #007AFF; +} + +.uni-tabs__header { + position: relative; + background-color: #f5f7fa; + border-bottom: 1px solid #e4e7ed; +} + +.uni-tabs__nav-wrap { + overflow: hidden; + margin-bottom: -1px; + position: relative; +} + +.uni-tabs__nav-scroll { + overflow: hidden; +} + +.uni-tabs__nav { + position: relative; + white-space: nowrap; +} + + +.uni-tabs__item { + position: relative; + padding: 0 20px; + height: 40px; + box-sizing: border-box; + line-height: 40px; + display: inline-block; + list-style: none; + font-size: 14px; + font-weight: 500; + color: #909399; + margin-top: -1px; + margin-left: -1px; + border: 1px solid transparent; + cursor: pointer; +} + +.uni-tabs__item.is-active { + color: #007aff; + background-color: #fff; + border-right-color: #dcdfe6; + border-left-color: #dcdfe6; +} + +.uni-form-item-tips { + color: #999; + font-size: 12px; + margin-top: 3px; + position: absolute; + top: 40px; + +} + +.uni-form-item-empty { + color: #999; + min-height: 36px; + line-height: 36px; +} + +::v-deep .uni-forms-item__label .label-text { + color: #606266 !important; +} + +::v-deep .flex-center-x .uni-forms-item__content { + display: flex; + align-items: center; + flex-wrap: wrap; +} + +.link-btn { + line-height: 26px; + margin-top: 5px; + color: #007AFF; + text-decoration: underline; + cursor: pointer; +} + +/* button 重置样式 */ +::v-deep button[size=mini] { + line-height: 2.4; + font-size: 12px; + border-radius: 3px; +} + + +button { + background: #fff; + border: 1px solid #dcdfe6; + color: #606266; + box-sizing: border-box; +} + +button[type=primary] { + background-color: #409EFF; + border-color: #409EFF; + border-width: 0; +} + +button[type=warn] { + background-color: #f56c6c; + border-color: #f56c6c; + border-width: 0; +} + +button[type=default] { + background: #fff; + border: 1px solid #dcdfe6; + color: #606266; + box-sizing: border-box; +} + +button[type=primary][plain] { + border-color: #409EFF; + color: #409EFF; +} + +button[type=warn][plain] { + border-color: #f56c6c; + color: #f56c6c; +} + +button[type=default][plain] { + border-color: #dcdfe6; + color: #606266; +} + +button[plain] { + border-color: #dcdfe6; + color: #606266; +} + +button:after { + border-width: 0; +} + +.uni-input-placeholder { + color: #999; +} + + +.uni-pagination-box { + display: flex; + align-items: center; + justify-content: center; +} + +.select-picker { + margin-right: 20px; +} + +.select-picker button { + margin-top: 5px; + line-height: 29px; + font-size: 14px; +} + +.select-picker button text { + color: #999; +} + +.select-picker-icon { + margin-left: 8px; +} + + +/* stat style start */ +.m-m { + margin: 15px; +} + +.mb-s { + margin-bottom: 5px; +} + +.mb-m { + margin-bottom: 15px !important; +} + +.mb-l { + margin-bottom: 30px !important; +} + +.ml-s { + margin-left: 5px; +} + +.ml-m { + margin-left: 15px !important; +} + +.ml-l { + margin-left: 30px !important; +} + +.p-m { + padding: 15px; +} + +.uni-charts-box { + width: 100%; + height: 350px; +} + +.uni-stat--x { + border-radius: 4px; + box-shadow: -1px -1px 5px 0 rgba(0, 0, 0, 0.1); + margin-bottom: 15px; +} + +.uni-stat__actived { + outline: 1px solid #2979ff; +} + +.flex { + display: flex; + flex-wrap: wrap; + align-items: center; +} + +.label-text { + font-size: 14px; + font-weight: bold; + color: #555; + margin: auto 0; + margin-right: 5px; +} + +.uni-stat-edit--x { + display: flex; + justify-content: space-between; +} + +.uni-stat-edit--btn { + cursor: pointer; +} + +.uni-stat-datetime-picker { + margin: 15px +} + +/* #ifndef APP-NVUE */ +@media screen and (max-width: 500px) { + .hide-on-phone { + display: none !important; + } + + .uni-charts-box { + width: 100%; + height: 220px; + } + + .uni-group .uni-search { + height: 32px; + line-height: 32px; + width: 100%; + margin: 20px 20px 10px 20px; + } + + .uni-header { + padding-left: 0px; + padding-right: 0px; + border: unset; + } + + .uni-group { + width: 100%; + } + + .uni-stat-breadcrumb-on-phone { + padding: 0 20px !important; + border-bottom: 1px #f5f5f5 solid; + } + + .uni-stat-datetime-picker { + flex: 1; + } +} + +@media screen and (min-width: 500px) { + .dispaly-grid { + display: grid; + grid-template-columns: 1fr 1fr; + column-gap: 15px; + } + + .pc-flex-wrap { + display: flex; + flex-wrap: wrap; + align-items: center; + } + + .uni-stat-datetime-picker { + max-width: 350px; + } + +} + +/* #endif */ + +/* #ifndef H5 */ +.fix-top-window { + margin-top: 85px; +} + +/* #endif */ diff --git a/common/uni-admin/说明.md b/common/uni-admin/说明.md new file mode 100644 index 0000000..550fd1b --- /dev/null +++ b/common/uni-admin/说明.md @@ -0,0 +1,35 @@ +### 此目录为 `uni-admin` 官方模板的一些样式文件 + +* 如果你需要引入 `uni-admin` 官方的一些插件,如[升级中心](https://ext.dcloud.net.cn/plugin?id=4470) +* 你可能会碰到样式错乱的问题,那是因为 `vk-uni-admin` 并没有引入 `uni-admin` 的公共样式 +* 但框架已经帮你整理好了公共样式的文件,就在 `common/uni-admin` 目录内 + +### 在 `App.vue` 中引入 `uni-admin` 的公共样式 + +```html + + +``` + + +### 同时官方的插件一般是不通过 `云函数` 获取数据的,而是通过 `clientDB` 操作数据库(前端操作数据库) + +* 因此,你需要上传一些数据库的 `schema.json` 文件 + +### 如 `升级中心` 需要上传以下两个 `schema.json` 文件 + +**特别注意:如果 `admin项目` 是绑定 `client项目`,则需要复制到 `client项目` 的 `uniCloud/database/`目录去上传** + +* opendb-app-list.schema.json +* opendb-app-versions.schema.json + +#### 这些 `schema.json` 文件一般在插件包里就有,直接右键点击对应的文件即可上传。 + +* 如升级中心的 `schema.json` 目录在 `uni_modules/uni-upgrade-center/uniCloud/database/opendb-app-list.schema.json` + +* 同时一般插件还会有一个自己的 `db_init.json` 文件 如 `uni_modules/uni-upgrade-center/uniCloud/database/db_init.json` (也是右键上传) + +* 如还有样式问题,建议重启项目试试。 \ No newline at end of file diff --git a/components/vk-data-input-editor/vk-data-input-editor.vue b/components/vk-data-input-editor/vk-data-input-editor.vue new file mode 100644 index 0000000..0a8b428 --- /dev/null +++ b/components/vk-data-input-editor/vk-data-input-editor.vue @@ -0,0 +1,1005 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{item2.type}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{item2}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..13e92f9 --- /dev/null +++ b/main.js @@ -0,0 +1,55 @@ +import Vue from 'vue' +import App from './App' +import store from './store' +import config from '@/app.config.js' + +// 引入 elementUI +import elementUI from "element-ui"; +import 'element-ui/lib/theme-chalk/index.css'; +Vue.use(elementUI); + +// 引入 高性能表格UI 组件 +import UmyUi from 'umy-ui' +import 'umy-ui/lib/theme-chalk/index.css'; +Vue.use(UmyUi); + +// 引入 vk 实例 +import vk from 'uni_modules/vk-unicloud'; +Vue.use(vk); + +// 初始化 vk框架 +Vue.prototype.vk.init({ + Vue, // Vue实例 + config, // 配置 +}); + +// 引入 vkAdminUI 组件 +import vkAdminUI from 'vk-unicloud-admin-ui'; +import 'vk-unicloud-admin-ui/theme/index.css'; +Vue.use(vkAdminUI); + +// 自动注册全局组件(必须加在Vue.use(vkAdminUI);的后面) +const modulesFiles = require.context('./components', true, /\.vue$/); +modulesFiles.keys().map((modulePath, index) => { + const moduleNames = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1'); + const moduleSplit = moduleNames.split("/"); + const moduleName = moduleSplit[0]; + if (moduleSplit.length === 2 && moduleName === moduleSplit[1]) { + const value = modulesFiles(modulePath); + let moduleItem = value.default; + Vue.component(moduleName, moduleItem); + } +}); + +// 引入 自定义全局css 样式 +import '@/common/css/app.scss'; + +Vue.config.productionTip = false + +App.mpType = 'app' + +const app = new Vue({ + store, + ...App +}) +app.$mount() diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..ac1bfcd --- /dev/null +++ b/manifest.json @@ -0,0 +1,88 @@ +{ + "name" : "jinjiuxin-admin", + "appid" : "__UNI__E3B97BE", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + "app-plus" : { + "usingComponents" : true, + "nvueCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + "modules" : {}, + "distribute" : { + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "ios" : {}, + "sdkConfigs" : {} + } + }, + "quickapp" : {}, + "mp-weixin" : { + "appid" : "", + "setting" : { + "urlCheck" : false + }, + "usingComponents" : true + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "h5" : { + "template" : "template.h5.html", + "router" : { + "mode" : "hash", + "base" : "/admin/" + }, + "devServer" : { + "disableHostCheck" : true + }, + "sdkConfigs" : { + "maps" : { + "qqmap" : { + "key" : "3EXBZ-3NYCW-L5MRG-ONN2B-FJYR6-H7BSU" + } + } + } + }, + "vueVersion" : "2" +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3ce507d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,125 @@ +{ + "name": "vk-unicloud-admin", + "version": "1.17.3", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", + "requires": { + "babel-runtime": "6.x" + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" + }, + "element-ui": { + "version": "2.15.13", + "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.13.tgz", + "integrity": "sha512-LJoatEYX6WV74FqXBss8Xfho9fh9rjDSzrDrTyREdGb1h1R3uRvmLh5jqp2JU137aj4/BgqA3K06RQpQBX33Bg==", + "requires": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + } + }, + "normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "sortablejs": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz", + "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==" + }, + "throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==" + }, + "umy-table": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/umy-table/-/umy-table-1.1.8.tgz", + "integrity": "sha512-yqPMFwZ6MUNqI73KamsNKBTbHRA7VuVZDEWobaySghtf4n/s7INuTNQoADB/ROVK57WOXr99Xpnol0aMqGlASA==", + "requires": { + "async-validator": "~1.8.1", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1", + "vuedraggable": "^2.23.2", + "xe-utils": "^3.0.0-beta.12" + } + }, + "umy-ui": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/umy-ui/-/umy-ui-1.1.6.tgz", + "integrity": "sha512-wX0S29B5sFn8q0MvU9PEl8DGZeQmZXOJlLrwaCJ2UHiIQZCANWgXMBjjQgpaequ1gRZ8BekEu7Sn7hJccm9YMQ==", + "requires": { + "async-validator": "~1.8.1", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1", + "umy-table": "1.1.8", + "vuedraggable": "^2.23.2", + "xe-utils": "^3.0.0-beta.12" + } + }, + "vk-unicloud-admin-ui": { + "version": "1.17.46", + "resolved": "https://registry.npmjs.org/vk-unicloud-admin-ui/-/vk-unicloud-admin-ui-1.17.46.tgz", + "integrity": "sha512-VJvi8Gm3mfZOFEilIrZ1bSoi192ov9hPzSFzkR6l62pqJ3UEwgjTr5L2gQqxw4twb+y5qDmWZPS4dQMwya+iiQ==" + }, + "vuedraggable": { + "version": "2.24.3", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz", + "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==", + "requires": { + "sortablejs": "1.10.2" + } + }, + "xe-utils": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/xe-utils/-/xe-utils-3.5.13.tgz", + "integrity": "sha512-ORT6ghCRk0mUVavMBxetcPzUPskS6NGfntzpWazJ86e+XU0uK4HwHfDhN/jKATiyInrOH5RwQo9SO/+DB8XeBw==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..09ed680 --- /dev/null +++ b/package.json @@ -0,0 +1,96 @@ +{ + "id": "vk-unicloud-admin", + "name": "vk-unicloud-admin", + "version": "1.17.3", + "displayName": "【开箱即用】vk-unicloud-admin-快速开发框架-打造unicloud最好用的admin", + "description": "vk-unicloud-admin是基于uniapp+unicloud+uni-id+vk-router+element的一套快速PC admin企业级开发框架。小白几分钟即完成一个页面CRUD。", + "keywords": [ + "vk-unicloud-admin", + "支持表单可视化拖拽生成代码", + "vk云开发", + "uniapp、uni-id、vk-unicloud-router、vk-admin、element", + "内置众多API、工具包" + ], + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": "https://gitee.com/vk-uni/vk-unicloud-admin", + "author": "VK", + "license": "MIT", + "homepage": "https://vkdoc.fsq.pub/admin/", + "dependencies": { + "element-ui": "2.15.13", + "umy-ui": "1.1.6", + "vk-unicloud-admin-ui": "^1.17.45" + }, + "engines": { + "HBuilderX": "^3.1.10" + }, + "dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "370725567" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "https://vkdoc.fsq.pub/admin/", + "type": "unicloud-template-project" + }, + "uni_modules": { + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "n", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "n", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "n", + "阿里": "n", + "百度": "n", + "字节跳动": "n", + "QQ": "n", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "n" + } + } + } + } +} diff --git a/pages-dev.json b/pages-dev.json new file mode 100644 index 0000000..dcea019 --- /dev/null +++ b/pages-dev.json @@ -0,0 +1,61 @@ +{ + "subPackages": [{ + "root": "pages_template/components", + "pages": [ + { "path": "icons/vk-icons" }, + { "path": "icons/element-icons" }, + { "path": "table/table-basic" }, + { "path": "table/table-easy" }, + { "path": "table/table-query" }, + { "path": "table/table-expand" }, + { "path": "form/form-array-object" }, + { "path": "form/form-basic" }, + { "path": "form/form-inline" }, + { "path": "form/form-dialog" }, + { "path": "form/form-pro" }, + { "path": "form/form-dialog-2" }, + { "path": "form/form-slot" }, + { "path": "detail/detail-basic" }, + { "path": "detail/detail-table" }, + { "path": "dialog/dialog-basic" }, + { "path": "dialog/dialog-form" }, + { "path": "dialog/dialog-table" }, + { "path": "upload/upload-basic" }, + { "path": "upload/upload-drag" }, + { "path": "input/input-address" }, + { "path": "input/input-money" }, + { "path": "input/input-number" }, + { "path": "input/input-number-box" }, + { "path": "input/input-percentage" }, + { "path": "input/input-json" }, + { "path": "input/input-province" }, + { "path": "input/input-select" }, + { "path": "input/input-remote-select" }, + { "path": "input/input" }, + { "path": "editor/editor" } + ] + }, + { + "root": "pages_template/element", + "pages": [ + { "path": "detail/detail" }, + { "path": "form/basic-form" }, + { "path": "form/advanced-form" }, + { "path": "form/step-form" }, + { "path": "setting/account" }, + { "path": "popup/alert" }, + { "path": "popup/dialog" }, + { "path": "popup/drawer" }, + { "path": "popup/loading" }, + { "path": "popup/message" }, + { "path": "popup/message-box" }, + { "path": "popup/notification" }, + { "path": "popup/popconfirm" }, + { "path": "popup/popover" }, + { "path": "popup/tooltip" }, + { "path": "result/fail" }, + { "path": "result/success" } + ] + } + ] +} diff --git a/pages.js b/pages.js new file mode 100644 index 0000000..eeb9d14 --- /dev/null +++ b/pages.js @@ -0,0 +1,24 @@ +const debug = process.env.NODE_ENV !== 'production'; +var devPages; +try { + // 只在开发环境中才会被HBX打包的页面 + devPages = require('./pages-dev.json'); +} catch (err) {} +module.exports = function(pagesJson){ + try { + let newDevPages = JSON.parse(JSON.stringify(devPages)); + if(debug && newDevPages){ + for(let keyName in newDevPages){ + let item = newDevPages[keyName] + if (Object.prototype.toString.call(item) === "[object Array]") { + pagesJson[keyName].push(...item); + }else if(Object.prototype.toString.call(item)==='[object Object]'){ + pagesJson[keyName] = Object.assign(pagesJson[keyName], item); + } + } + } + } catch (err) { + console.log(err); + } + return pagesJson; +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..d29a2e5 --- /dev/null +++ b/pages.json @@ -0,0 +1,125 @@ +{ + "pages": [ + { "path": "pages/index/index" }, + { "path": "pages/product/product-category/list" }, + { "path": "pages/product/goods/list" }, + { "path": "pages/config/site"}, + { "path": "pages/enquiry/template/list"}, + { "path": "pages/enquiry/attributes/list"}, + { + "path": "pages/login/index", + "style": { + "topWindow": false, + "leftWindow": false, + "navigationBarTitleText": "登录" + } + } + + ], + "subPackages": [{ + "root": "pages_plugs", + "pages": [ + { "path": "error/404", "style": { "navigationBarTitleText": "页面不存在" } }, + { "path": "error/403", "style": { "navigationBarTitleText": "无权访问" } }, + { "path": "error/500", "style": { "navigationBarTitleText": "服务器出错了" } }, + { "path": "system/user/list" }, + { "path": "system/role/list" }, + { "path": "system/permission/list" }, + { "path": "system/menu/list" }, + { "path": "system/app/list" }, + { "path": "system/app-upgrade-center/list" }, + { "path": "system_uni/vk-global-data" }, + { "path": "system_uni/uni-id-log" }, + { "path": "system_uni/opendb-admin-log" }, + { "path": "system_uni/vk-components-dynamic" }, + { "path": "system_uni/uni-id-files/list" }, + { "path": "system_uni/vk-pay-orders" } + ] + }, + + { + "root": "pages_template/components", + "pages": [ + { "path": "icons/vk-icons" }, + { "path": "icons/element-icons" }, + { "path": "icons/vk-icons-page", "style": { "topWindow": false,"leftWindow": false } }, + { "path": "icons/element-icons-page", "style": { "topWindow": false,"leftWindow": false } }, + { "path": "table/table-basic" }, + { "path": "table/table-easy" }, + { "path": "table/table-query" }, + { "path": "table/table-expand" }, + { "path": "form/form-array-object" }, + { "path": "form/form-basic" }, + { "path": "form/form-cert" , "style": { "topWindow": false,"leftWindow": false } }, + { "path": "form/form-pay-cert" , "style": { "topWindow": false,"leftWindow": false } }, + { "path": "form/form-inline" }, + { "path": "form/form-dialog" }, + { "path": "form/form-pro" }, + { "path": "form/form-dialog-2" }, + { "path": "form/form-slot" }, + { "path": "detail/detail-basic" }, + { "path": "detail/detail-table" }, + { "path": "dialog/dialog-basic" }, + { "path": "dialog/dialog-form" }, + { "path": "dialog/dialog-table" }, + { "path": "upload/upload-basic" }, + { "path": "upload/upload-drag" }, + { "path": "input/input-address" }, + { "path": "input/input-money" }, + { "path": "input/input-number" }, + { "path": "input/input-number-box" }, + { "path": "input/input-percentage" }, + { "path": "input/input-json" }, + { "path": "input/input-province" }, + { "path": "input/input-select" }, + { "path": "input/input-remote-select" }, + { "path": "input/input" }, + { "path": "editor/editor" } + ] + }, + { + "root": "pages_template/element", + "pages": [ + { "path": "detail/detail" }, + { "path": "form/basic-form" }, + { "path": "form/advanced-form" }, + { "path": "form/step-form" }, + { "path": "setting/account" }, + { "path": "popup/alert" }, + { "path": "popup/dialog" }, + { "path": "popup/drawer" }, + { "path": "popup/loading" }, + { "path": "popup/message" }, + { "path": "popup/message-box" }, + { "path": "popup/notification" }, + { "path": "popup/popconfirm" }, + { "path": "popup/popover" }, + { "path": "popup/tooltip" }, + { "path": "result/fail" }, + { "path": "result/success" } + ] + } + ], + "globalStyle": { + "navigationStyle": "custom", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "管理后台", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + }, + "topWindow": { + "path": "windows/topWindow", + "style": { + "height": "100px" + }, + "matchMedia": { + "minWidth": 0 + } + }, + "leftWindow": { + "path": "windows/leftWindow", + "style": { + "width": "240px" + } + } +} diff --git a/pages/config/site.vue b/pages/config/site.vue new file mode 100644 index 0000000..bc71001 --- /dev/null +++ b/pages/config/site.vue @@ -0,0 +1,147 @@ + + + + + + + + + diff --git a/pages/enquiry/attributes/list.vue b/pages/enquiry/attributes/list.vue new file mode 100644 index 0000000..fa435ba --- /dev/null +++ b/pages/enquiry/attributes/list.vue @@ -0,0 +1,320 @@ + + + + + + + + + + + + 添加 + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/enquiry/template/list.vue b/pages/enquiry/template/list.vue new file mode 100644 index 0000000..370a3e0 --- /dev/null +++ b/pages/enquiry/template/list.vue @@ -0,0 +1,335 @@ + + + + + + + + + + + + 添加 + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..14c1b45 --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,79 @@ + + + + + 这里是后台首页 + + + + + + + diff --git a/pages/login/index.vue b/pages/login/index.vue new file mode 100644 index 0000000..49534c5 --- /dev/null +++ b/pages/login/index.vue @@ -0,0 +1,276 @@ + + + + + 欢迎登录 + + + + + + + + + 记住密码 + + 忘记密码? + + 登录 + + + + 体验账号: + + {{ item.nickname }} + 账号:{{ item.username }} + 密码:{{ item.password }} + + + + + + + + + + + + diff --git a/pages/product/goods/list.vue b/pages/product/goods/list.vue new file mode 100644 index 0000000..3847182 --- /dev/null +++ b/pages/product/goods/list.vue @@ -0,0 +1,358 @@ + + + + + + + + + + + + 添加 + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/product/product-category/list.vue b/pages/product/product-category/list.vue new file mode 100644 index 0000000..5520718 --- /dev/null +++ b/pages/product/product-category/list.vue @@ -0,0 +1,338 @@ + + + + + + + + + + + + 添加 + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/product/product-category/product-category.vue b/pages/product/product-category/product-category.vue new file mode 100644 index 0000000..9e6570d --- /dev/null +++ b/pages/product/product-category/product-category.vue @@ -0,0 +1,74 @@ + + + + + 这里是页面内容 + + + + + + + diff --git a/pages_plugs/error/403.vue b/pages_plugs/error/403.vue new file mode 100644 index 0000000..344c3c4 --- /dev/null +++ b/pages_plugs/error/403.vue @@ -0,0 +1,77 @@ + + + + + 403 + 抱歉,你无权访问该页面 + {{ errMsg }} + 返回首页 + + + + + + + diff --git a/pages_plugs/error/404.vue b/pages_plugs/error/404.vue new file mode 100644 index 0000000..52f26ea --- /dev/null +++ b/pages_plugs/error/404.vue @@ -0,0 +1,77 @@ + + + + + 404 + 抱歉,你访问的页面不存在 + {{ errMsg }} + 返回首页 + + + + + + + diff --git a/pages_plugs/error/500.vue b/pages_plugs/error/500.vue new file mode 100644 index 0000000..e00bc69 --- /dev/null +++ b/pages_plugs/error/500.vue @@ -0,0 +1,77 @@ + + + + + 500 + 抱歉,服务器出错了 + {{ errMsg }} + 返回首页 + + + + + + + diff --git a/pages_plugs/system/app-upgrade-center/form/addUpdate.vue b/pages_plugs/system/app-upgrade-center/form/addUpdate.vue new file mode 100644 index 0000000..1d166f2 --- /dev/null +++ b/pages_plugs/system/app-upgrade-center/form/addUpdate.vue @@ -0,0 +1,278 @@ + + + + + + + + + + + diff --git a/pages_plugs/system/app-upgrade-center/list.vue b/pages_plugs/system/app-upgrade-center/list.vue new file mode 100644 index 0000000..18a2d00 --- /dev/null +++ b/pages_plugs/system/app-upgrade-center/list.vue @@ -0,0 +1,305 @@ + + + + + + + + + + + + + 添加 + + 原生App安装包 + wgt资源包 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_plugs/system/app/form/addUpdate.vue b/pages_plugs/system/app/form/addUpdate.vue new file mode 100644 index 0000000..9496c76 --- /dev/null +++ b/pages_plugs/system/app/form/addUpdate.vue @@ -0,0 +1,515 @@ + + + + + + + + + + + diff --git a/pages_plugs/system/app/form/createPublishHtml.vue b/pages_plugs/system/app/form/createPublishHtml.vue new file mode 100644 index 0000000..b9cae1f --- /dev/null +++ b/pages_plugs/system/app/form/createPublishHtml.vue @@ -0,0 +1,207 @@ + + + + + 步骤1:了解“统一发布页” + + + + uni-portal + 是 uni-app 提供的一套开箱即用的“统一发布页”。 + + + uni-portal + 可作为面向用户的统一业务名片,在一个页面集中展现:App下载地址、小程序二维码、H5访问链接等信息。 + + + + + uni-app 官方示例的发布页就是基于uni-portal 制作的,点击体验 + + + + + + 步骤2:获取“统一发布页” + + + uni-portal 可根据「应用管理」中所填写的应用信息,一键生成发布页: + + 生成并下载发布页 + + + 步骤3:上传“统一发布页” + + + + + 步骤2下载的“统一发布页”,是一个静态HTML页面,你可以直接在本地浏览器中打开访问。 + + + + + + 为了让用户访问到这个“统一发布页”,你需要将该静态HTML文件上传到你的服务器中;推荐使用前端网页托管,因为前端网页托管具备使用更简单、价格更便宜、访问更快等优点。 + + + + + + {{ page.submitText }} + + + + + + + diff --git a/pages_plugs/system/app/list.vue b/pages_plugs/system/app/list.vue new file mode 100644 index 0000000..cb32cc7 --- /dev/null +++ b/pages_plugs/system/app/list.vue @@ -0,0 +1,215 @@ + + + + + + + + + + + 添加 + + + + + + + + + + + + + + + + + + diff --git a/pages_plugs/system/menu/form/addMenuByJson.vue b/pages_plugs/system/menu/form/addMenuByJson.vue new file mode 100644 index 0000000..436c3a9 --- /dev/null +++ b/pages_plugs/system/menu/form/addMenuByJson.vue @@ -0,0 +1,171 @@ + + + + + + + + + + + diff --git a/pages_plugs/system/menu/form/bindPermission.vue b/pages_plugs/system/menu/form/bindPermission.vue new file mode 100644 index 0000000..c951e32 --- /dev/null +++ b/pages_plugs/system/menu/form/bindPermission.vue @@ -0,0 +1,218 @@ + + + + + + + 刷新数据 + + + + + + + + + + + + + + diff --git a/pages_plugs/system/menu/list.vue b/pages_plugs/system/menu/list.vue new file mode 100644 index 0000000..c8bbf23 --- /dev/null +++ b/pages_plugs/system/menu/list.vue @@ -0,0 +1,364 @@ + + + + + + + 添加 + 设置内置权限 + 通过JSON数组批量导入菜单 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_plugs/system/permission/form/updateCategory.vue b/pages_plugs/system/permission/form/updateCategory.vue new file mode 100644 index 0000000..a798743 --- /dev/null +++ b/pages_plugs/system/permission/form/updateCategory.vue @@ -0,0 +1,105 @@ + + + + + + + + + + diff --git a/pages_plugs/system/permission/form/updateLevel.vue b/pages_plugs/system/permission/form/updateLevel.vue new file mode 100644 index 0000000..7ec060b --- /dev/null +++ b/pages_plugs/system/permission/form/updateLevel.vue @@ -0,0 +1,106 @@ + + + + + + + + + + diff --git a/pages_plugs/system/permission/list.vue b/pages_plugs/system/permission/list.vue new file mode 100644 index 0000000..c267e7c --- /dev/null +++ b/pages_plugs/system/permission/list.vue @@ -0,0 +1,386 @@ + + + + + + + 添加 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_plugs/system/role/form/bindMenu.vue b/pages_plugs/system/role/form/bindMenu.vue new file mode 100644 index 0000000..7a936e6 --- /dev/null +++ b/pages_plugs/system/role/form/bindMenu.vue @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + diff --git a/pages_plugs/system/role/form/bindPermission.vue b/pages_plugs/system/role/form/bindPermission.vue new file mode 100644 index 0000000..1f371e4 --- /dev/null +++ b/pages_plugs/system/role/form/bindPermission.vue @@ -0,0 +1,264 @@ + + + + + + + + + + + + + + + diff --git a/pages_plugs/system/role/list.vue b/pages_plugs/system/role/list.vue new file mode 100644 index 0000000..020ed35 --- /dev/null +++ b/pages_plugs/system/role/list.vue @@ -0,0 +1,340 @@ + + + + + + + + + + + 添加 + 权限赋予 + 菜单赋予 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_plugs/system/user/form/bindRole.vue b/pages_plugs/system/user/form/bindRole.vue new file mode 100644 index 0000000..2b88385 --- /dev/null +++ b/pages_plugs/system/user/form/bindRole.vue @@ -0,0 +1,160 @@ + + + + + + + + {{ data.nickname }}(ID:{{ data._id }}) + + + + + + + + + + diff --git a/pages_plugs/system/user/form/resetPassword.vue b/pages_plugs/system/user/form/resetPassword.vue new file mode 100644 index 0000000..abbe6e8 --- /dev/null +++ b/pages_plugs/system/user/form/resetPassword.vue @@ -0,0 +1,146 @@ + + + + + + + + {{ data.nickname }}(ID:{{ data._id }}) + + + + + + + + + + diff --git a/pages_plugs/system/user/form/setAuthorizedAppLogin.vue b/pages_plugs/system/user/form/setAuthorizedAppLogin.vue new file mode 100644 index 0000000..fa8ab5e --- /dev/null +++ b/pages_plugs/system/user/form/setAuthorizedAppLogin.vue @@ -0,0 +1,178 @@ + + + + + + + + + + + diff --git a/pages_plugs/system/user/list.vue b/pages_plugs/system/user/list.vue new file mode 100644 index 0000000..7786f40 --- /dev/null +++ b/pages_plugs/system/user/list.vue @@ -0,0 +1,473 @@ + + + + + + + + + + + + + + + + + + 添加 + + + + 批量操作 + + + 账号批量解冻 + 账号批量冻结 + 批量设置可登录的应用 + + + + 角色绑定 + 重置密码 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_plugs/system_uni/opendb-admin-log.vue b/pages_plugs/system_uni/opendb-admin-log.vue new file mode 100644 index 0000000..4b34234 --- /dev/null +++ b/pages_plugs/system_uni/opendb-admin-log.vue @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + diff --git a/pages_plugs/system_uni/uni-id-files/form/addCategory.vue b/pages_plugs/system_uni/uni-id-files/form/addCategory.vue new file mode 100644 index 0000000..cf13f49 --- /dev/null +++ b/pages_plugs/system_uni/uni-id-files/form/addCategory.vue @@ -0,0 +1,128 @@ + + + + + + + + + + + diff --git a/pages_plugs/system_uni/uni-id-files/form/preview.vue b/pages_plugs/system_uni/uni-id-files/form/preview.vue new file mode 100644 index 0000000..340057e --- /dev/null +++ b/pages_plugs/system_uni/uni-id-files/form/preview.vue @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + diff --git a/pages_plugs/system_uni/uni-id-files/form/updateCategory.vue b/pages_plugs/system_uni/uni-id-files/form/updateCategory.vue new file mode 100644 index 0000000..d4d2285 --- /dev/null +++ b/pages_plugs/system_uni/uni-id-files/form/updateCategory.vue @@ -0,0 +1,130 @@ + + + + + + + + + + + diff --git a/pages_plugs/system_uni/uni-id-files/form/updateFileCategory.vue b/pages_plugs/system_uni/uni-id-files/form/updateFileCategory.vue new file mode 100644 index 0000000..ef7065d --- /dev/null +++ b/pages_plugs/system_uni/uni-id-files/form/updateFileCategory.vue @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + diff --git a/pages_plugs/system_uni/uni-id-files/form/updateFileName.vue b/pages_plugs/system_uni/uni-id-files/form/updateFileName.vue new file mode 100644 index 0000000..3a98219 --- /dev/null +++ b/pages_plugs/system_uni/uni-id-files/form/updateFileName.vue @@ -0,0 +1,128 @@ + + + + + + + + + + + diff --git a/pages_plugs/system_uni/uni-id-files/form/updateVideo.vue b/pages_plugs/system_uni/uni-id-files/form/updateVideo.vue new file mode 100644 index 0000000..5bc7ae3 --- /dev/null +++ b/pages_plugs/system_uni/uni-id-files/form/updateVideo.vue @@ -0,0 +1,131 @@ + + + + + + + + + + + diff --git a/pages_plugs/system_uni/uni-id-files/form/uploadProgress.vue b/pages_plugs/system_uni/uni-id-files/form/uploadProgress.vue new file mode 100644 index 0000000..8713da7 --- /dev/null +++ b/pages_plugs/system_uni/uni-id-files/form/uploadProgress.vue @@ -0,0 +1,143 @@ + + + + + + 总进度:{{ currentIndex+1 }} / {{ total }} + + + + 文件{{currentIndex+1}}进度: + + + 正在上传第 {{currentIndex+1}} 个文件 + + + + + + + + + + + + + diff --git a/pages_plugs/system_uni/uni-id-files/list.vue b/pages_plugs/system_uni/uni-id-files/list.vue new file mode 100644 index 0000000..81bacfe --- /dev/null +++ b/pages_plugs/system_uni/uni-id-files/list.vue @@ -0,0 +1,704 @@ + + + + + + 上传 + + + + 图片 + 视频 + 其他 + + + + + + + + + + + + + + {{ item.name }} + + + + + + + + + 添加分组 + + + + + + + + + {{ item.duration | durationFilter }} + {{ item.size | sizeFilter(["B","KB","MB","GB"],1024,1,"MB") }} + + + + + + {{ item.size | sizeFilter(["B","KB","MB","GB"],1024,1) }} + {{ item.original_name | suffixFilter }} + + + + {{ item.display_name }} + 编辑 + 改名 + + 链接 + + + 复制 + 预览 + + {{ item.url }} + + + 分组 + + 删除 + + + + + + + + + + 已选 + {{ selectedIds.length }} / {{ data.content.rows.length }} + 项 + + + 保存到组 + + + 删除 + + + { queryForm1.pageSize = val; getList(); } " + @current-change=" val => { queryForm1.pageIndex = val; getList(); } " + > + + + + + + + + + + + + + + + + + + diff --git a/pages_plugs/system_uni/uni-id-log.vue b/pages_plugs/system_uni/uni-id-log.vue new file mode 100644 index 0000000..d83af66 --- /dev/null +++ b/pages_plugs/system_uni/uni-id-log.vue @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + diff --git a/pages_plugs/system_uni/vk-components-dynamic.vue b/pages_plugs/system_uni/vk-components-dynamic.vue new file mode 100644 index 0000000..62e9715 --- /dev/null +++ b/pages_plugs/system_uni/vk-components-dynamic.vue @@ -0,0 +1,289 @@ + + + + + + + + 添加 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_plugs/system_uni/vk-global-data.vue b/pages_plugs/system_uni/vk-global-data.vue new file mode 100644 index 0000000..cff1dc6 --- /dev/null +++ b/pages_plugs/system_uni/vk-global-data.vue @@ -0,0 +1,221 @@ + + + + + + + + + + 添加 + + + + + + + + + + + + + + + + + + + + diff --git a/pages_plugs/system_uni/vk-pay-orders.vue b/pages_plugs/system_uni/vk-pay-orders.vue new file mode 100644 index 0000000..22d74bd --- /dev/null +++ b/pages_plugs/system_uni/vk-pay-orders.vue @@ -0,0 +1,227 @@ + + + + + + + + + + + - + 成功 + 重新推送 + 失败,但已退款 + 未知 + + + + + + + + + diff --git a/pages_template/components/detail/detail-basic.vue b/pages_template/components/detail/detail-basic.vue new file mode 100644 index 0000000..bdad1aa --- /dev/null +++ b/pages_template/components/detail/detail-basic.vue @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + diff --git a/pages_template/components/detail/detail-table.vue b/pages_template/components/detail/detail-table.vue new file mode 100644 index 0000000..83a6756 --- /dev/null +++ b/pages_template/components/detail/detail-table.vue @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + diff --git a/pages_template/components/dialog/dialog-basic.vue b/pages_template/components/dialog/dialog-basic.vue new file mode 100644 index 0000000..d0d6369 --- /dev/null +++ b/pages_template/components/dialog/dialog-basic.vue @@ -0,0 +1,101 @@ + + + + + + 显示弹窗1 + 显示弹窗2 + + + + + 这里是自定义内容 + + 取 消 + 确 定 + + + + + 这里是自定义内容 + + 取 消 + 确 定 + + + + + + + + + + + diff --git a/pages_template/components/dialog/dialog-form.vue b/pages_template/components/dialog/dialog-form.vue new file mode 100644 index 0000000..9db904b --- /dev/null +++ b/pages_template/components/dialog/dialog-form.vue @@ -0,0 +1,141 @@ + + + + + + 弹出表单 + 重置表单 + + + + 表单数据 + + {{ form1.data }} + + + + + + + + + + + + + + + + diff --git a/pages_template/components/dialog/dialog-table.vue b/pages_template/components/dialog/dialog-table.vue new file mode 100644 index 0000000..3b9273f --- /dev/null +++ b/pages_template/components/dialog/dialog-table.vue @@ -0,0 +1,119 @@ + + + + + + 显示弹窗 + + + + + + + + + 取 消 + 确 定 + + + + + + + + + + + diff --git a/pages_template/components/editor/editor.vue b/pages_template/components/editor/editor.vue new file mode 100644 index 0000000..b0542ab --- /dev/null +++ b/pages_template/components/editor/editor.vue @@ -0,0 +1,93 @@ + + + + + + + + + + + + HTML效果展示 + + + + + + + + + {{ content }} + + + + + + + + + + + diff --git a/pages_template/components/form/form-array-object.vue b/pages_template/components/form/form-array-object.vue new file mode 100644 index 0000000..7b96281 --- /dev/null +++ b/pages_template/components/form/form-array-object.vue @@ -0,0 +1,274 @@ + + + + + + + + + + 表单数据 + + {{ form1.data }} + + + + + + + + + + + diff --git a/pages_template/components/form/form-basic.vue b/pages_template/components/form/form-basic.vue new file mode 100644 index 0000000..972d858 --- /dev/null +++ b/pages_template/components/form/form-basic.vue @@ -0,0 +1,157 @@ + + + + + + + + + + 表单数据 + + {{ form1.data }} + + + + + + + + + + + diff --git a/pages_template/components/form/form-cert.vue b/pages_template/components/form/form-cert.vue new file mode 100644 index 0000000..6e1c65f --- /dev/null +++ b/pages_template/components/form/form-cert.vue @@ -0,0 +1,88 @@ + + + + + + + + 复制证书内容(一行字符串形式) + + + + 证书内容 + + {{ form1 }} + + + + + + + + + + + diff --git a/pages_template/components/form/form-dialog-2.vue b/pages_template/components/form/form-dialog-2.vue new file mode 100644 index 0000000..8333d5a --- /dev/null +++ b/pages_template/components/form/form-dialog-2.vue @@ -0,0 +1,182 @@ + + + + + + + + 当两个表单内的字段有大部分相似时,同一个表单组件可以复用。 + 通过控制 formType 可以切换表单的类型 + 同时在 columns 中添加属性 show:["add"] 代表该字段只有 formType 为 "add" 时才显示 + + 弹出添加表单 + 弹出修改表单 + + + + 表单数据 + + {{ form1.data }} + + + + + + + + + + + + + + + + + diff --git a/pages_template/components/form/form-dialog.vue b/pages_template/components/form/form-dialog.vue new file mode 100644 index 0000000..556b98a --- /dev/null +++ b/pages_template/components/form/form-dialog.vue @@ -0,0 +1,142 @@ + + + + + + 弹出表单 + 重置表单 + + + + 表单数据 + + {{ form1.data }} + + + + + + + + + + + + + + + + diff --git a/pages_template/components/form/form-inline.vue b/pages_template/components/form/form-inline.vue new file mode 100644 index 0000000..65a6587 --- /dev/null +++ b/pages_template/components/form/form-inline.vue @@ -0,0 +1,152 @@ + + + + + + + + + + + 表单数据 + + {{ form1.data }} + + + + + + + + + + diff --git a/pages_template/components/form/form-pay-cert.vue b/pages_template/components/form/form-pay-cert.vue new file mode 100644 index 0000000..72451ae --- /dev/null +++ b/pages_template/components/form/form-pay-cert.vue @@ -0,0 +1,197 @@ + + + + + + 全程无网络请求(打开此页面后无网状态也能执行),直接在前端解析证书,没有证书泄露风险 + + + + + {{ scope.row.name }} + {{ scope.row.content ? '已' : ''}}选择 {{ scope.row.file }} + √ + × + + + + + + 请复制下方证书内容 + + + + + + + 证书内容 + + {{ form1 }} + + + + + + + + + + + diff --git a/pages_template/components/form/form-pro.vue b/pages_template/components/form/form-pro.vue new file mode 100644 index 0000000..330e629 --- /dev/null +++ b/pages_template/components/form/form-pro.vue @@ -0,0 +1,543 @@ + + + + + + + + + + + + + + + + + 确定 + 返回 + + + + + + 表单数据 + + {{ form1.data }} + + + + + + + + + + + diff --git a/pages_template/components/form/form-slot.vue b/pages_template/components/form/form-slot.vue new file mode 100644 index 0000000..54b00d2 --- /dev/null +++ b/pages_template/components/form/form-slot.vue @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + 返回 + 添加 + + + + + + + + 表单数据 + + {{ form1.data }} + + + + + + + + + + + diff --git a/pages_template/components/icons/element-icons-page.vue b/pages_template/components/icons/element-icons-page.vue new file mode 100644 index 0000000..e1cabba --- /dev/null +++ b/pages_template/components/icons/element-icons-page.vue @@ -0,0 +1,122 @@ + + + + + + + + + {{icon}} + + + + + + + + diff --git a/pages_template/components/icons/element-icons.vue b/pages_template/components/icons/element-icons.vue new file mode 100644 index 0000000..795eb84 --- /dev/null +++ b/pages_template/components/icons/element-icons.vue @@ -0,0 +1,121 @@ + + + + + + + + {{icon}} + + + + + + + + diff --git a/pages_template/components/icons/js/element-icons.js b/pages_template/components/icons/js/element-icons.js new file mode 100644 index 0000000..e8d8a1a --- /dev/null +++ b/pages_template/components/icons/js/element-icons.js @@ -0,0 +1,282 @@ +export default [ + "el-icon-platform-eleme", + "el-icon-eleme", + "el-icon-delete-solid", + "el-icon-delete", + "el-icon-s-tools", + "el-icon-setting", + "el-icon-user-solid", + "el-icon-user", + "el-icon-phone", + "el-icon-phone-outline", + "el-icon-more", + "el-icon-more-outline", + "el-icon-star-on", + "el-icon-star-off", + "el-icon-s-goods", + "el-icon-goods", + "el-icon-warning", + "el-icon-warning-outline", + "el-icon-question", + "el-icon-info", + "el-icon-remove", + "el-icon-circle-plus", + "el-icon-success", + "el-icon-error", + "el-icon-zoom-in", + "el-icon-zoom-out", + "el-icon-remove-outline", + "el-icon-circle-plus-outline", + "el-icon-circle-check", + "el-icon-circle-close", + "el-icon-s-help", + "el-icon-help", + "el-icon-minus", + "el-icon-plus", + "el-icon-check", + "el-icon-close", + "el-icon-picture", + "el-icon-picture-outline", + "el-icon-picture-outline-round", + "el-icon-upload", + "el-icon-upload2", + "el-icon-download", + "el-icon-camera-solid", + "el-icon-camera", + "el-icon-video-camera-solid", + "el-icon-video-camera", + "el-icon-message-solid", + "el-icon-bell", + "el-icon-s-cooperation", + "el-icon-s-order", + "el-icon-s-platform", + "el-icon-s-fold", + "el-icon-s-unfold", + "el-icon-s-operation", + "el-icon-s-promotion", + "el-icon-s-home", + "el-icon-s-release", + "el-icon-s-ticket", + "el-icon-s-management", + "el-icon-s-open", + "el-icon-s-shop", + "el-icon-s-marketing", + "el-icon-s-flag", + "el-icon-s-comment", + "el-icon-s-finance", + "el-icon-s-claim", + "el-icon-s-custom", + "el-icon-s-opportunity", + "el-icon-s-data", + "el-icon-s-check", + "el-icon-s-grid", + "el-icon-menu", + "el-icon-share", + "el-icon-d-caret", + "el-icon-caret-left", + "el-icon-caret-right", + "el-icon-caret-bottom", + "el-icon-caret-top", + "el-icon-bottom-left", + "el-icon-bottom-right", + "el-icon-back", + "el-icon-right", + "el-icon-bottom", + "el-icon-top", + "el-icon-top-left", + "el-icon-top-right", + "el-icon-arrow-left", + "el-icon-arrow-right", + "el-icon-arrow-down", + "el-icon-arrow-up", + "el-icon-d-arrow-left", + "el-icon-d-arrow-right", + "el-icon-video-pause", + "el-icon-video-play", + "el-icon-refresh", + "el-icon-refresh-right", + "el-icon-refresh-left", + "el-icon-finished", + "el-icon-sort", + "el-icon-sort-up", + "el-icon-sort-down", + "el-icon-rank", + "el-icon-loading", + "el-icon-view", + "el-icon-c-scale-to-original", + "el-icon-date", + "el-icon-edit", + "el-icon-edit-outline", + "el-icon-folder", + "el-icon-folder-opened", + "el-icon-folder-add", + "el-icon-folder-remove", + "el-icon-folder-delete", + "el-icon-folder-checked", + "el-icon-tickets", + "el-icon-document-remove", + "el-icon-document-delete", + "el-icon-document-copy", + "el-icon-document-checked", + "el-icon-document", + "el-icon-document-add", + "el-icon-printer", + "el-icon-paperclip", + "el-icon-takeaway-box", + "el-icon-search", + "el-icon-monitor", + "el-icon-attract", + "el-icon-mobile", + "el-icon-scissors", + "el-icon-umbrella", + "el-icon-headset", + "el-icon-brush", + "el-icon-mouse", + "el-icon-coordinate", + "el-icon-magic-stick", + "el-icon-reading", + "el-icon-data-line", + "el-icon-data-board", + "el-icon-pie-chart", + "el-icon-data-analysis", + "el-icon-collection-tag", + "el-icon-film", + "el-icon-suitcase", + "el-icon-suitcase-1", + "el-icon-receiving", + "el-icon-collection", + "el-icon-files", + "el-icon-notebook-1", + "el-icon-notebook-2", + "el-icon-toilet-paper", + "el-icon-office-building", + "el-icon-school", + "el-icon-table-lamp", + "el-icon-house", + "el-icon-no-smoking", + "el-icon-smoking", + "el-icon-shopping-cart-full", + "el-icon-shopping-cart-1", + "el-icon-shopping-cart-2", + "el-icon-shopping-bag-1", + "el-icon-shopping-bag-2", + "el-icon-sold-out", + "el-icon-sell", + "el-icon-present", + "el-icon-box", + "el-icon-bank-card", + "el-icon-money", + "el-icon-coin", + "el-icon-wallet", + "el-icon-discount", + "el-icon-price-tag", + "el-icon-news", + "el-icon-guide", + "el-icon-male", + "el-icon-female", + "el-icon-thumb", + "el-icon-cpu", + "el-icon-link", + "el-icon-connection", + "el-icon-open", + "el-icon-turn-off", + "el-icon-set-up", + "el-icon-chat-round", + "el-icon-chat-line-round", + "el-icon-chat-square", + "el-icon-chat-dot-round", + "el-icon-chat-dot-square", + "el-icon-chat-line-square", + "el-icon-message", + "el-icon-postcard", + "el-icon-position", + "el-icon-turn-off-microphone", + "el-icon-microphone", + "el-icon-close-notification", + "el-icon-bangzhu", + "el-icon-time", + "el-icon-odometer", + "el-icon-crop", + "el-icon-aim", + "el-icon-switch-button", + "el-icon-full-screen", + "el-icon-copy-document", + "el-icon-mic", + "el-icon-stopwatch", + "el-icon-medal-1", + "el-icon-medal", + "el-icon-trophy", + "el-icon-trophy-1", + "el-icon-first-aid-kit", + "el-icon-discover", + "el-icon-place", + "el-icon-location", + "el-icon-location-outline", + "el-icon-location-information", + "el-icon-add-location", + "el-icon-delete-location", + "el-icon-map-location", + "el-icon-alarm-clock", + "el-icon-timer", + "el-icon-watch-1", + "el-icon-watch", + "el-icon-lock", + "el-icon-unlock", + "el-icon-key", + "el-icon-service", + "el-icon-mobile-phone", + "el-icon-bicycle", + "el-icon-truck", + "el-icon-ship", + "el-icon-basketball", + "el-icon-football", + "el-icon-soccer", + "el-icon-baseball", + "el-icon-wind-power", + "el-icon-light-rain", + "el-icon-lightning", + "el-icon-heavy-rain", + "el-icon-sunrise", + "el-icon-sunrise-1", + "el-icon-sunset", + "el-icon-sunny", + "el-icon-cloudy", + "el-icon-partly-cloudy", + "el-icon-cloudy-and-sunny", + "el-icon-moon", + "el-icon-moon-night", + "el-icon-dish", + "el-icon-dish-1", + "el-icon-food", + "el-icon-chicken", + "el-icon-fork-spoon", + "el-icon-knife-fork", + "el-icon-burger", + "el-icon-tableware", + "el-icon-sugar", + "el-icon-dessert", + "el-icon-ice-cream", + "el-icon-hot-water", + "el-icon-water-cup", + "el-icon-coffee-cup", + "el-icon-cold-drink", + "el-icon-goblet", + "el-icon-goblet-full", + "el-icon-goblet-square", + "el-icon-goblet-square-full", + "el-icon-refrigerator", + "el-icon-grape", + "el-icon-watermelon", + "el-icon-cherry", + "el-icon-apple", + "el-icon-pear", + "el-icon-orange", + "el-icon-coffee", + "el-icon-ice-tea", + "el-icon-ice-drink", + "el-icon-milk-tea", + "el-icon-potato-strips", + "el-icon-lollipop", + "el-icon-ice-cream-square", + "el-icon-ice-cream-round" +]; diff --git a/pages_template/components/icons/js/vk-icons.js b/pages_template/components/icons/js/vk-icons.js new file mode 100644 index 0000000..938ee24 --- /dev/null +++ b/pages_template/components/icons/js/vk-icons.js @@ -0,0 +1,468 @@ +export default [ + "vk-icon-activityfill", + "vk-icon-crownfill", + "vk-icon-crown", + "vk-icon-goodsfill", + "vk-icon-messagefill", + "vk-icon-profilefill", + "vk-icon-sound", + "vk-icon-sponsorfill", + "vk-icon-sponsor", + "vk-icon-upblock", + "vk-icon-weblock", + "vk-icon-weunblock", + "vk-icon-1111", + "vk-icon-my", + "vk-icon-myfill", + "vk-icon-emojifill", + "vk-icon-emojiflashfill", + "vk-icon-flashbuyfill-copy", + "vk-icon-text", + "vk-icon-goodsfavor", + "vk-icon-musicfill", + "vk-icon-musicforbidfill", + "vk-icon-roundleftfill", + "vk-icon-triangledownfill", + "vk-icon-triangleupfill", + "vk-icon-roundleftfill-copy", + "vk-icon-pulldown1", + "vk-icon-emojilight", + "vk-icon-keyboardlight", + "vk-icon-recordfill", + "vk-icon-recordlight", + "vk-icon-appreciate", + "vk-icon-record", + "vk-icon-check", + "vk-icon-roundaddlight", + "vk-icon-close", + "vk-icon-soundlight", + "vk-icon-edit", + "vk-icon-cardboardfill", + "vk-icon-emoji", + "vk-icon-cardboard", + "vk-icon-favorfill", + "vk-icon-formfill", + "vk-icon-favor", + "vk-icon-coin", + "vk-icon-loading", + "vk-icon-sortlight", + "vk-icon-locationfill", + "vk-icon-cardboardforbid", + "vk-icon-location", + "vk-icon-circlefill", + "vk-icon-phone", + "vk-icon-circle", + "vk-icon-roundcheckfill", + "vk-icon-attentionforbid", + "vk-icon-roundcheck", + "vk-icon-attentionforbidfill", + "vk-icon-roundclosefill", + "vk-icon-attentionfavorfill", + "vk-icon-roundclose", + "vk-icon-attentionfavor", + "vk-icon-roundrightfill", + "vk-icon-piclight", + "vk-icon-roundright", + "vk-icon-shoplight", + "vk-icon-search", + "vk-icon-voicelight", + "vk-icon-taxi", + "vk-icon-attentionfavorfill-copy", + "vk-icon-timefill", + "vk-icon-full", + "vk-icon-time", + "vk-icon-mail", + "vk-icon-unfold", + "vk-icon-peoplelist", + "vk-icon-warnfill", + "vk-icon-goodsnewfill", + "vk-icon-warn", + "vk-icon-goodsnew", + "vk-icon-camerafill", + "vk-icon-medalfill", + "vk-icon-camera", + "vk-icon-medal", + "vk-icon-commentfill", + "vk-icon-newsfill", + "vk-icon-comment", + "vk-icon-newshotfill", + "vk-icon-likefill", + "vk-icon-newshot", + "vk-icon-like", + "vk-icon-news", + "vk-icon-notificationfill", + "vk-icon-videofill", + "vk-icon-notification", + "vk-icon-video", + "vk-icon-order", + "vk-icon-askfill", + "vk-icon-samefill", + "vk-icon-ask", + "vk-icon-same", + "vk-icon-exit", + "vk-icon-deliver", + "vk-icon-skinfill", + "vk-icon-evaluate", + "vk-icon-skin", + "vk-icon-pay", + "vk-icon-moneybagfill", + "vk-icon-send", + "vk-icon-usefullfill", + "vk-icon-shop", + "vk-icon-usefull", + "vk-icon-ticket", + "vk-icon-moneybag", + "vk-icon-wang", + "vk-icon-redpacket_fill", + "vk-icon-back", + "vk-icon-subscription", + "vk-icon-cascades", + "vk-icon-home_light", + "vk-icon-discover", + "vk-icon-my_light", + "vk-icon-list", + "vk-icon-community_light", + "vk-icon-more", + "vk-icon-cart_light", + "vk-icon-scan", + "vk-icon-we_light", + "vk-icon-settings", + "vk-icon-home_fill_light", + "vk-icon-questionfill", + "vk-icon-cart_fill_light", + "vk-icon-question", + "vk-icon-community_fill_light", + "vk-icon-shopfill", + "vk-icon-my_fill_light", + "vk-icon-form", + "vk-icon-we_fill_light", + "vk-icon-wangfill", + "vk-icon-skin_light", + "vk-icon-pic", + "vk-icon-search_light", + "vk-icon-filter", + "vk-icon-scan_light", + "vk-icon-footprint", + "vk-icon-people_list_light", + "vk-icon-top", + "vk-icon-message_light", + "vk-icon-pulldown", + "vk-icon-close_light", + "vk-icon-pullup", + "vk-icon-add_light", + "vk-icon-right", + "vk-icon-profile_light", + "vk-icon-refresh", + "vk-icon-service_light", + "vk-icon-moreandroid", + "vk-icon-friend_add_light", + "vk-icon-deletefill", + "vk-icon-edit_light", + "vk-icon-refund", + "vk-icon-camera_light", + "vk-icon-cart", + "vk-icon-hot_light", + "vk-icon-qrcode", + "vk-icon-refresh_light", + "vk-icon-remind", + "vk-icon-back_light", + "vk-icon-delete", + "vk-icon-share_light", + "vk-icon-profile", + "vk-icon-comment_light", + "vk-icon-home", + "vk-icon-appreciate_light", + "vk-icon-cartfill", + "vk-icon-favor_light", + "vk-icon-discoverfill", + "vk-icon-appreciate_fill_light", + "vk-icon-homefill", + "vk-icon-comment_fill_light", + "vk-icon-message", + "vk-icon-wang_light", + "vk-icon-addressbook", + "vk-icon-more_android_light", + "vk-icon-link", + "vk-icon-friend_light", + "vk-icon-lock", + "vk-icon-more_light", + "vk-icon-unlock", + "vk-icon-goods_favor_light", + "vk-icon-vip", + "vk-icon-goods_new_fill_light", + "vk-icon-weibo", + "vk-icon-goods_new_light", + "vk-icon-activity", + "vk-icon-goods_light", + "vk-icon-big", + "vk-icon-medal_fill_light", + "vk-icon-friendaddfill", + "vk-icon-medal_light", + "vk-icon-friendadd", + "vk-icon-news_fill_light", + "vk-icon-friendfamous", + "vk-icon-news_hot_fill_light", + "vk-icon-friend", + "vk-icon-news_hot_light", + "vk-icon-goods", + "vk-icon-news_light", + "vk-icon-selection", + "vk-icon-video_fill_light", + "vk-icon-tmall", + "vk-icon-message_fill_light", + "vk-icon-explore", + "vk-icon-form_light", + "vk-icon-present", + "vk-icon-video_light", + "vk-icon-squarecheckfill", + "vk-icon-search_list_light", + "vk-icon-square", + "vk-icon-form_fill_light", + "vk-icon-squarecheck", + "vk-icon-global_light", + "vk-icon-round", + "vk-icon-global", + "vk-icon-roundaddfill", + "vk-icon-favor_fill_light", + "vk-icon-roundadd", + "vk-icon-delete_light", + "vk-icon-add", + "vk-icon-back_android", + "vk-icon-notificationforbidfill", + "vk-icon-back_android_light", + "vk-icon-explorefill", + "vk-icon-down_light", + "vk-icon-fold", + "vk-icon-round_close_light", + "vk-icon-game", + "vk-icon-round_close_fill_light", + "vk-icon-redpacket", + "vk-icon-expressman", + "vk-icon-selectionfill", + "vk-icon-punch_light", + "vk-icon-similar", + "vk-icon-evaluate_fill", + "vk-icon-appreciatefill", + "vk-icon-furniture", + "vk-icon-infofill", + "vk-icon-dress", + "vk-icon-info", + "vk-icon-coffee", + "vk-icon-tao", + "vk-icon-sports", + "vk-icon-mobiletao", + "vk-icon-group_light", + "vk-icon-forwardfill", + "vk-icon-location_light", + "vk-icon-forward", + "vk-icon-attention_light", + "vk-icon-rechargefill", + "vk-icon-group_fill_light", + "vk-icon-recharge", + "vk-icon-group_fill", + "vk-icon-vipcard", + "vk-icon-play_forward_fill", + "vk-icon-voice", + "vk-icon-subscription_light", + "vk-icon-voicefill", + "vk-icon-deliver_fill", + "vk-icon-friendfavor", + "vk-icon-notice_forbid_fill", + "vk-icon-wifi", + "vk-icon-qr_code_light", + "vk-icon-share", + "vk-icon-settings_light", + "vk-icon-wefill", + "vk-icon-pick", + "vk-icon-we", + "vk-icon-form_favor_light", + "vk-icon-lightauto", + "vk-icon-round_comment_light", + "vk-icon-lightforbid", + "vk-icon-phone_light", + "vk-icon-lightfill", + "vk-icon-round_down_light", + "vk-icon-camerarotate", + "vk-icon-friend_settings_light", + "vk-icon-light", + "vk-icon-change", + "vk-icon-barcode", + "vk-icon-round_list_light", + "vk-icon-flashlightclose", + "vk-icon-ticket_fill", + "vk-icon-flashlightopen", + "vk-icon-round_friend_fill", + "vk-icon-searchlist", + "vk-icon-round_crown_fill", + "vk-icon-service", + "vk-icon-round_link_fill", + "vk-icon-sort", + "vk-icon-round_light_fill", + "vk-icon-1212", + "vk-icon-round_favor_fill", + "vk-icon-down", + "vk-icon-round_menu_fill", + "vk-icon-mobile", + "vk-icon-round_location_fill", + "vk-icon-mobilefill", + "vk-icon-round_pay_fill", + "vk-icon-copy", + "vk-icon-round_like_fill", + "vk-icon-countdownfill", + "vk-icon-round_people_fill", + "vk-icon-countdown", + "vk-icon-round_pay", + "vk-icon-noticefill", + "vk-icon-round_rank_fill", + "vk-icon-notice", + "vk-icon-round_redpacket_fill", + "vk-icon-qiang", + "vk-icon-round_skin_fill", + "vk-icon-upstagefill", + "vk-icon-round_record_fill", + "vk-icon-upstage", + "vk-icon-round_ticket_fill", + "vk-icon-babyfill", + "vk-icon-round_redpacket", + "vk-icon-baby", + "vk-icon-round_text_fill", + "vk-icon-brandfill", + "vk-icon-round_ticket", + "vk-icon-brand", + "vk-icon-round_transfer_fill", + "vk-icon-choicenessfill", + "vk-icon-subtitle_block_light", + "vk-icon-choiceness", + "vk-icon-warn_light", + "vk-icon-clothesfill", + "vk-icon-round_transfer", + "vk-icon-clothes", + "vk-icon-vip_code_light", + "vk-icon-creativefill", + "vk-icon-subtitle_unblock_light", + "vk-icon-creative", + "vk-icon-round_shop_fill", + "vk-icon-female", + "vk-icon-oppose_fill_light", + "vk-icon-keyboard", + "vk-icon-oppose_light", + "vk-icon-male", + "vk-icon-living", + "vk-icon-newfill", + "vk-icon-goods_hot_fill", + "vk-icon-new", + "vk-icon-ticket_money_fill", + "vk-icon-pullleft", + "vk-icon-arrow_left_fill", + "vk-icon-pullright", + "vk-icon-arrow_up_fill", + "vk-icon-rankfill", + "vk-icon-xiaoheiqun", + "vk-icon-rank", + "vk-icon-auction", + "vk-icon-bad", + "vk-icon-return", + "vk-icon-cameraadd", + "vk-icon-mall_light", + "vk-icon-focus", + "vk-icon-mall_fill_light", + "vk-icon-friendfill", + "vk-icon-broadcast_fill", + "vk-icon-cameraaddfill", + "vk-icon-at", + "vk-icon-apps", + "vk-icon-card_fill", + "vk-icon-paintfill", + "vk-icon-paint", + "vk-icon-picfill", + "vk-icon-refresharrow", + "vk-icon-markfill", + "vk-icon-mark", + "vk-icon-presentfill", + "vk-icon-repeal", + "vk-icon-album", + "vk-icon-peoplefill", + "vk-icon-people", + "vk-icon-servicefill", + "vk-icon-repair", + "vk-icon-file", + "vk-icon-repairfill", + "vk-icon-taoxiaopu", + "vk-icon-attentionfill", + "vk-icon-attention", + "vk-icon-commandfill", + "vk-icon-command", + "vk-icon-communityfill", + "vk-icon-community", + "vk-icon-read", + "vk-icon-suan", + "vk-icon-hua", + "vk-icon-ju", + "vk-icon-tian", + "vk-icon-calendar", + "vk-icon-cut", + "vk-icon-magic", + "vk-icon-backwardfill", + "vk-icon-playfill", + "vk-icon-stop", + "vk-icon-tagfill", + "vk-icon-tag", + "vk-icon-group", + "vk-icon-all", + "vk-icon-backdelete", + "vk-icon-hotfill", + "vk-icon-hot", + "vk-icon-post", + "vk-icon-radiobox", + "vk-icon-rounddown", + "vk-icon-upload", + "vk-icon-writefill", + "vk-icon-write", + "vk-icon-radioboxfill", + "vk-icon-punch", + "vk-icon-shake", + "vk-icon-add1", + "vk-icon-move", + "vk-icon-safe", + "vk-icon-qi", + "vk-icon-ye", + "vk-icon-cangku", + "vk-icon-cangku1", + "vk-icon-percentage", + "vk-icon-select", + "vk-icon-cascader", + "vk-icon-radio1", + "vk-icon-radio2", + "vk-icon-checkbox1", + "vk-icon-checkbox2", + "vk-icon-checkbox3", + "vk-icon-discount", + "vk-icon-number", + "vk-icon-color", + "vk-icon-json", + "vk-icon-text1", + "vk-icon-textarea", + "vk-icon-quyuguanli", + "vk-icon-dengji", + "vk-icon-jiagoufenxiao", + "vk-icon-gudongfenhong", + "vk-icon-tixianguanli", + "vk-icon-miaosha", + "vk-icon-youhuiquan", + "vk-icon-jifen1", + "vk-icon-shouqicaidan", + "vk-icon-zhankaicaidan", + "vk-icon-weixin", + "vk-icon-weixin1", + "vk-icon-zhifubaozhifu", + "vk-icon-zhifubaozhifu1", + "vk-icon-zhifubaozhifu2", + "vk-icon-anzhuo", + "vk-icon-iOS", + "vk-icon-QQ", + "vk-icon-APPku", + "vk-icon-weixingongzhonghao", + "vk-icon-weixinxiaochengxu", + "vk-icon-heading-h5", + "vk-icon-shengji3-xianxing" +]; diff --git a/pages_template/components/icons/vk-icons-page.vue b/pages_template/components/icons/vk-icons-page.vue new file mode 100644 index 0000000..308b25b --- /dev/null +++ b/pages_template/components/icons/vk-icons-page.vue @@ -0,0 +1,100 @@ + + + + + + + + {{icon}} + + + + + + + + diff --git a/pages_template/components/icons/vk-icons.vue b/pages_template/components/icons/vk-icons.vue new file mode 100644 index 0000000..691854c --- /dev/null +++ b/pages_template/components/icons/vk-icons.vue @@ -0,0 +1,99 @@ + + + + + + + {{icon}} + + + + + + + + diff --git a/pages_template/components/input/input-address.vue b/pages_template/components/input/input-address.vue new file mode 100644 index 0000000..5627cb6 --- /dev/null +++ b/pages_template/components/input/input-address.vue @@ -0,0 +1,99 @@ + + + + + + + 同时支持下拉选择 和 输入搜索 + + + + + + + + + + + + + {{form1}} + + + + + + + + + diff --git a/pages_template/components/input/input-json.vue b/pages_template/components/input/input-json.vue new file mode 100644 index 0000000..dd09ddc --- /dev/null +++ b/pages_template/components/input/input-json.vue @@ -0,0 +1,85 @@ + + + + + + + + + + + + + {{form1}} + + + + + + + + + diff --git a/pages_template/components/input/input-money.vue b/pages_template/components/input/input-money.vue new file mode 100644 index 0000000..5d800eb --- /dev/null +++ b/pages_template/components/input/input-money.vue @@ -0,0 +1,98 @@ + + + + + + + 金额 与 数字不一样的地方是 此处金额单位是分 + 输入框显示的是1,但值其实是100 + + + 金额输入框: + + + + 表单绑定值: + + + + + {{form1}} + + + + + + + + + diff --git a/pages_template/components/input/input-number-box.vue b/pages_template/components/input/input-number-box.vue new file mode 100644 index 0000000..c82958e --- /dev/null +++ b/pages_template/components/input/input-number-box.vue @@ -0,0 +1,146 @@ + + + + + + + 整数 + + + + + + 2位小数 + + + + + + + + 只能输入1-10内的数 + + + + + + + 隐藏按钮 + + + + + + + 使上方输入框获得焦点 + 选中上方输入框中的文字 + + + + + {{form1}} + + + + + + + + + + + diff --git a/pages_template/components/input/input-number.vue b/pages_template/components/input/input-number.vue new file mode 100644 index 0000000..fc1cd3b --- /dev/null +++ b/pages_template/components/input/input-number.vue @@ -0,0 +1,130 @@ + + + + + + + 正整数 + + + + + + 2位小数 + + + + + + + + 最大值100 + + + + + + + 使上方输入框获得焦点 + 使上方输入框失去焦点 + 选中上方输入框中的文字 + + + + + + {{form1}} + + + + + + + + + diff --git a/pages_template/components/input/input-percentage.vue b/pages_template/components/input/input-percentage.vue new file mode 100644 index 0000000..2ed262c --- /dev/null +++ b/pages_template/components/input/input-percentage.vue @@ -0,0 +1,99 @@ + + + + + + + 百分比 与 数字不一样的地方是 + 输入框显示的是1,但值其实是0.01 + + + 百分比输入框: + + + + 表单绑定的值: + + + + + {{form1}} + + + + + + + + + diff --git a/pages_template/components/input/input-province.vue b/pages_template/components/input/input-province.vue new file mode 100644 index 0000000..f1dbb43 --- /dev/null +++ b/pages_template/components/input/input-province.vue @@ -0,0 +1,86 @@ + + + + + + + 同时支持下拉选择 和 输入搜索 + + + + + + + + {{ form1.value }} + + + + + + + + + + diff --git a/pages_template/components/input/input-remote-select.vue b/pages_template/components/input/input-remote-select.vue new file mode 100644 index 0000000..0c3fb3c --- /dev/null +++ b/pages_template/components/input/input-remote-select.vue @@ -0,0 +1,89 @@ + + + + + + + 主要用于选择 user_id 等外键字段 + + + + + + + + {{ form1 }} + + + + + + + + + + diff --git a/pages_template/components/input/input-select.vue b/pages_template/components/input/input-select.vue new file mode 100644 index 0000000..968325c --- /dev/null +++ b/pages_template/components/input/input-select.vue @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + {{ form1 }} + + + + + + + + + + diff --git a/pages_template/components/input/input.vue b/pages_template/components/input/input.vue new file mode 100644 index 0000000..97b0db8 --- /dev/null +++ b/pages_template/components/input/input.vue @@ -0,0 +1,90 @@ + + + + + + + 根据type自动渲染的不同的输入框 + + + + 数字输入框 + 金额输入框 + 百分比输入框 + 折扣输入框 + 步进器 + + 多行文本输入框 + + + + + + + + {{form1}} + + + + + + + + + diff --git a/pages_template/components/table/table-basic.vue b/pages_template/components/table/table-basic.vue new file mode 100644 index 0000000..c6eec7b --- /dev/null +++ b/pages_template/components/table/table-basic.vue @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + diff --git a/pages_template/components/table/table-easy.vue b/pages_template/components/table/table-easy.vue new file mode 100644 index 0000000..011bfad --- /dev/null +++ b/pages_template/components/table/table-easy.vue @@ -0,0 +1,308 @@ + + + + + + + + + + + + 添加 + + + + 批量操作 + + + 批量操作1 + 批量操作2 + + + 订单导出xls + 导出全部 + + + + + + + + + + + + + + + + + + + + diff --git a/pages_template/components/table/table-expand.vue b/pages_template/components/table/table-expand.vue new file mode 100644 index 0000000..5d4d120 --- /dev/null +++ b/pages_template/components/table/table-expand.vue @@ -0,0 +1,304 @@ + + + + + + + + + + + + 添加 + + + + 批量操作 + + + 批量操作1 + 批量操作2 + + + + 订单导出xls + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_template/components/table/table-query.vue b/pages_template/components/table/table-query.vue new file mode 100644 index 0000000..0436a80 --- /dev/null +++ b/pages_template/components/table/table-query.vue @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + diff --git a/pages_template/components/upload/upload-basic.vue b/pages_template/components/upload/upload-basic.vue new file mode 100644 index 0000000..b862c9d --- /dev/null +++ b/pages_template/components/upload/upload-basic.vue @@ -0,0 +1,93 @@ + + + + + + + + + 清空值 + 设置值 + + + + 表单数据 + + {{ form1 }} + + + + + + + + + diff --git a/pages_template/components/upload/upload-drag.vue b/pages_template/components/upload/upload-drag.vue new file mode 100644 index 0000000..77476f7 --- /dev/null +++ b/pages_template/components/upload/upload-drag.vue @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + diff --git a/pages_template/element/detail/detail.vue b/pages_template/element/detail/detail.vue new file mode 100644 index 0000000..0a1f045 --- /dev/null +++ b/pages_template/element/detail/detail.vue @@ -0,0 +1,259 @@ + + + + + + 综合详情功能演示 + + + + + + + + + + + 姓名: + 蒙奇D-呵呵 + + + 年龄: + ???? + + + 性别: + 男 + + + + + + + + 星座: + 天秤座 + + + 爱好: + 女 + + + 民族: + 神族 + + + + + + + + 仙术: + 凌波微步 + + + 仙骨: + 百万年 + + + 查克拉: + ????? + + + + + + + + 斗气等级: + ????? + + + 果实能力: + 震震果实 + + + 所属派别: + 黑手党 + + + + + + + + + + + + 其它信息 + + + + + 住址: + 天界 + + + 家乡: + 神界 + + + + + + + + 城市: + 天宫 + + + 仙龄: + 6000年 + + + + + + + + 仙术: + 炎咒 + + + 公司: + 魔界 + + + + + + + + + + 表格信息 + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_template/element/form/advanced-form.vue b/pages_template/element/form/advanced-form.vue new file mode 100644 index 0000000..8883b88 --- /dev/null +++ b/pages_template/element/form/advanced-form.vue @@ -0,0 +1,484 @@ + + + + 高级表单功能演示 + + + + + + 出差信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 审批人一号 + + + + + 审批人二号 + + + + + + + + + + + 超级紧急 + + + + 一般紧急 + + + + 丝毫不慌 + + + + + + + + + + + 行程信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 同行人员 + + + + + + + + + + + + + + {{ row.date }} + + + + + + + + + + + {{ row.name }} + + + + + + + + + + + {{ row.address }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 确定 + + + + + + + + + + + diff --git a/pages_template/element/form/basic-form.vue b/pages_template/element/form/basic-form.vue new file mode 100644 index 0000000..385ff42 --- /dev/null +++ b/pages_template/element/form/basic-form.vue @@ -0,0 +1,271 @@ + + + + + 普通表单功能演示 + + + + + + 左对齐 + 右对齐 + 顶部对齐 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + — + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 立即创建 + 重置 + + + + + + + + + + + diff --git a/pages_template/element/form/step-form.vue b/pages_template/element/form/step-form.vue new file mode 100644 index 0000000..dd4a7cc --- /dev/null +++ b/pages_template/element/form/step-form.vue @@ -0,0 +1,307 @@ + + + + + 分步表单功能演示 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ¥ + + + + + + + + + + 注意!确认转账后,资金将进到对方账户,无法退回 + + + + 付款账户: + {{data.ruleForm.account}} + + + + 收款账户: + {{data.ruleForm.pay}} + + + + 收款人姓名: + {{data.ruleForm.name}} + + + + 转账金额: + ¥{{data.ruleForm.price}} + + + + + + + + + + + + + + + + + + 操作成功 + + 预计两小时内到账 + + + + + + + 付款账户: + {{data.ruleForm.account}} + + + + 收款账户: + {{data.ruleForm.pay}} + + + + 收款人姓名: + {{data.ruleForm.name}} + + + + 转账金额: + ¥{{data.ruleForm.price}} + + + + + + + + 下一步 + 提交 + + 再来一单 + + + + + + + + + + + + + + diff --git a/pages_template/element/popup/alert.vue b/pages_template/element/popup/alert.vue new file mode 100644 index 0000000..072c3db --- /dev/null +++ b/pages_template/element/popup/alert.vue @@ -0,0 +1,132 @@ + + + + + 弹窗功能演示 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_template/element/popup/dialog.vue b/pages_template/element/popup/dialog.vue new file mode 100644 index 0000000..7598178 --- /dev/null +++ b/pages_template/element/popup/dialog.vue @@ -0,0 +1,219 @@ + + + + + 弹窗功能演示 + + + + + + 基本用法: + + 点击打开 Dialog + + + 这是一段信息 + + 取 消 + 确 定 + + + + + + + + + + 嵌套表格: + + + 打开嵌套表格的 Dialog + + + + + + + + + + + + + + + + 嵌套表单: + + + 打开嵌套表单的 Dialog + + + + + + + + + + + + + + + + + + + + + + + + 多层嵌套: + + 点击打开外层 Dialog + + + + + + + + + + + + + 居中布局: + + 点击打开 Dialog + + + 需要注意的是内容是默认不居中的 + + 取 消 + 确 定 + + + + + + + + + + + + + + diff --git a/pages_template/element/popup/drawer.vue b/pages_template/element/popup/drawer.vue new file mode 100644 index 0000000..16c504a --- /dev/null +++ b/pages_template/element/popup/drawer.vue @@ -0,0 +1,256 @@ + + + + + + 抽屉功能演示 + + + + + + 普通功能: + + + 从左往右开 + 从右往左开 + 从上往下开 + 从下往上开 + + + + + 点我打开 + + + + + 我来啦! + + + + + + + + + 无标题: + + + 点我打开 + + + + 我来啦! + + + + + + + + + + 嵌套内容: + + + 打开嵌套表格的 Drawer + 打开嵌套 Form 的 Drawer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 多层嵌套: + + + 点我打开 + + + + + 打开里面的! + + _(:зゝ∠)_ + + + + + + + + + + + + + diff --git a/pages_template/element/popup/loading.vue b/pages_template/element/popup/loading.vue new file mode 100644 index 0000000..8a17b5c --- /dev/null +++ b/pages_template/element/popup/loading.vue @@ -0,0 +1,280 @@ + + + + + + 加载功能演示 + + + + + + 区域加载: + + + + + + + + + + + + + + + + + 自定义加载: + + + + + + + + + + + + + + + + + 全屏加载: + + + 指令方式 + + + + 服务方式 + + + + 自定义方式 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_template/element/popup/message-box.vue b/pages_template/element/popup/message-box.vue new file mode 100644 index 0000000..ce887d2 --- /dev/null +++ b/pages_template/element/popup/message-box.vue @@ -0,0 +1,237 @@ + + + + + 消息提示功能演示 + + + + + + 消息提示: + + 点击打开 Message Box + + + + + + + + 确认消息: + + 点击打开 Message Box + + + + + + + + 确认消息: + + 点击打开 Message Box + + + + + + + + 使用HTML片段: + + 点击打开 Message Box + + + + + + + + + 区分取消和关闭: + + 点击打开 Message Box + + + + + + + 内容居中布局: + + 点击打开 Message Box + + + + + + + + + diff --git a/pages_template/element/popup/message.vue b/pages_template/element/popup/message.vue new file mode 100644 index 0000000..457a7ac --- /dev/null +++ b/pages_template/element/popup/message.vue @@ -0,0 +1,203 @@ + + + + + 消息提示功能演示 + + + + + + 基础用法: + + 打开消息提示 + VNode + + + + + + + + 不同状态: + + 成功 + 警告 + 消息 + 错误 + + + + + + + + 可关闭: + + 消息 + 成功 + 警告 + 错误 + + + + + + + + 文字居中: + + 文字居中 + + + + + + + + 嵌入HMTL片段: + + 使用 HTML 片段 + + + + + + + + + diff --git a/pages_template/element/popup/notification.vue b/pages_template/element/popup/notification.vue new file mode 100644 index 0000000..3b3dd55 --- /dev/null +++ b/pages_template/element/popup/notification.vue @@ -0,0 +1,267 @@ + + + + + 悬浮提示功能演示 + + + + + + 基本用法: + + + + 可自动关闭 + + + 不会自动关闭 + + + + + + + + + + 具有倾向性: + + + 成功 + + + 警告 + + + 消息 + + + 错误 + + + + + + + + 自定义弹出位置: + + + 右上角 + + + 右下角 + + + 左下角 + + + 左上角 + + + + + + + + + 带偏移的消息提示: + + + 偏移的消息 + + + + + + + + + 使用HTML字段: + + + 使用 HTML 片段 + + + + + + + + + + 不显示关闭按钮: + + + 隐藏关闭按钮 + + + + + + + + + + + diff --git a/pages_template/element/popup/popconfirm.vue b/pages_template/element/popup/popconfirm.vue new file mode 100644 index 0000000..34ab19e --- /dev/null +++ b/pages_template/element/popup/popconfirm.vue @@ -0,0 +1,111 @@ + + + + + 悬浮提示功能演示 + + + + + + + + 基本用法: + + + + 删除 + + + + + + + + + + + 自定义用法: + + + 删除 + + + + + + + + + + diff --git a/pages_template/element/popup/popover.vue b/pages_template/element/popup/popover.vue new file mode 100644 index 0000000..a0d0825 --- /dev/null +++ b/pages_template/element/popup/popover.vue @@ -0,0 +1,158 @@ + + + + + 提示弹框功能演示 + + + + + + + + 基本用法: + + + hover 激活 + + + + click 激活 + + + + + focus 激活 + + + 手动激活 + + + + + + + + + + + + 嵌套信息: + + + + + + + + click 激活 + + + + + + + + + + 嵌套操作: + + + 这是一段内容这是一段内容确定删除吗? + + 取消 + 确定 + + 删除 + + + + + + + + + + diff --git a/pages_template/element/popup/tooltip.vue b/pages_template/element/popup/tooltip.vue new file mode 100644 index 0000000..da556bd --- /dev/null +++ b/pages_template/element/popup/tooltip.vue @@ -0,0 +1,203 @@ + + + + + 文字提示功能演示 + + + + + + + + 基础用法: + + + + + + 上左 + + + 上边 + + + 上右 + + + + + 左上 + + + 左边 + + + 左下 + + + + + + 右上 + + + 右边 + + + 右下 + + + + + 下左 + + + 下边 + + + 下右 + + + + + + + + + + + 设置主题: + + + Dark + + + Light + + + + + + + + + 设置主题: + + + 多行信息第二行信息 + Top center + + + + + + + + + 设置主题: + + + 点击{{disabled ? '开启' : '关闭'}} tooltip 功能 + + + + + + + + + + + diff --git a/pages_template/element/result/fail.vue b/pages_template/element/result/fail.vue new file mode 100644 index 0000000..c89bf0e --- /dev/null +++ b/pages_template/element/result/fail.vue @@ -0,0 +1,179 @@ + + + + + 提交失败 + 请核对并修改以下信息后,再重新提交。 + + 您提交的内容有如下错误: + + + 您的账户已被冻结 + 立即解冻 + + + + + 您的账户还不具备申请资格 + 立即升级 + + + + 返回修改 + + + + + + diff --git a/pages_template/element/result/success.vue b/pages_template/element/result/success.vue new file mode 100644 index 0000000..aad0580 --- /dev/null +++ b/pages_template/element/result/success.vue @@ -0,0 +1,169 @@ + + + + + 提交成功 + 提交结果页用于反馈一系列操作任务的处理结果,如果仅是简单操作,使用 Message 全局提示反馈即可。灰色区域可以显示一些补充的信息。 + 已提交申请,等待部门审核。 + + 返回列表 + 查看项目 + 打印 + + + + + + + diff --git a/pages_template/element/setting/account.vue b/pages_template/element/setting/account.vue new file mode 100644 index 0000000..c82b48f --- /dev/null +++ b/pages_template/element/setting/account.vue @@ -0,0 +1,429 @@ + + + + + + + + 个人设置 + + + {{item.name}} + {{item.title}} + + + + + + + 基本设置 + + + + + + + + + + + + + + + + + 更新基本信息 + + + + 头像 + + 修改头像 + + + + {{item.title}} + + + + + + + {{value.name}} + + {{value.tips}} + + + 修改 + + + + + + + + + + diff --git a/pages_template/kong/kong.vue b/pages_template/kong/kong.vue new file mode 100644 index 0000000..9e6570d --- /dev/null +++ b/pages_template/kong/kong.vue @@ -0,0 +1,74 @@ + + + + + 这里是页面内容 + + + + + + + diff --git a/pages_template/kong/list.vue b/pages_template/kong/list.vue new file mode 100644 index 0000000..7eb7d8a --- /dev/null +++ b/pages_template/kong/list.vue @@ -0,0 +1,247 @@ + + + + + + + + + + + + 添加 + + + + 批量操作 + + + 批量操作1 + 批量操作2 + + + + + + + + + + + + + + + + + + + + + + diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..be3d6d2 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,23 @@ +const path = require('path') +module.exports = { + parser: 'postcss-comment', + plugins: { + 'postcss-import': { + resolve(id, basedir, importOptions) { + if (id.startsWith('~@/')) { + return path.resolve(process.env.UNI_INPUT_DIR, id.substr(3)) + } else if (id.startsWith('@/')) { + return path.resolve(process.env.UNI_INPUT_DIR, id.substr(2)) + } else if (id.startsWith('/') && !id.startsWith('//')) { + return path.resolve(process.env.UNI_INPUT_DIR, id.substr(1)) + } + return id + } + }, + 'autoprefixer': { + overrideBrowserslist: ["> 1%", "last 2 versions"], + remove: process.env.UNI_PLATFORM !== 'h5' + }, + '@dcloudio/vue-cli-plugin-uni/packages/postcss': {} + } +} diff --git a/static/bg/001.jpg b/static/bg/001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..440f680ab1c777702c6acb363c5dfea8fbeb1ea3 GIT binary patch literal 132027 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
+ {{ form1.data }} +
+ {{ content }} +
+ {{ form1 }} +
+ {{form1}} +
+ {{ form1.value }} +
_(:зゝ∠)_
这是一段内容这是一段内容确定删除吗?
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
1Cc!Hi~$Tkd+@K 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
DvH=?6qPQfvAfM)fk&j-lDSMHz@*L0= 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
TS*{WU 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
Mm{x4Sv7ees? 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
;bE2 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