diff --git a/package.json b/package.json index 85eeadc..723b4d5 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "ruoyi", "version": "3.6.2", - "description": "后台管理系统", - "author": "hainayun", + "description": "智聪后台管理系统", + "author": "intc", "license": "MIT", "scripts": { "dev": "vite", @@ -29,7 +29,7 @@ "@editorjs/paragraph": "^2.11.4", "@editorjs/quote": "^2.6.0", "@editorjs/table": "^2.3.0", - "@element-plus/icons-vue": "^2.0.10", + "@element-plus/icons-vue": "2.3.1", "@fullcalendar/bootstrap5": "^6.1.14", "@fullcalendar/core": "^6.1.14", "@fullcalendar/daygrid": "^6.1.14", @@ -60,11 +60,17 @@ "prettier": "^2.8.4", "prettier-eslint": "^15.0.1", "save": "^2.9.0", - "video.js": "^8.9.0", + "video.js": "^7.4.1", "videojs-contrib-hls": "^5.15.0", "vue": "3.2.45", "vue-cropper": "1.0.3", "vue-router": "4.1.4", + "sockjs-client": "^1.6.1", + "stompjs": "^2.3.3", + "benz-amr-recorder": "^1.1.5", + "@smallwei/avue": "^3.5.1", + "vue-video-player": "^6.0.0", + "@vueup/vue-quill": "1.2.0", "wangeditor5-for-vue3": "^1.0.0" }, "devDependencies": { diff --git a/src/api/wxma/wxuser.js b/src/api/wxma/wxuser.js new file mode 100644 index 0000000..05d365f --- /dev/null +++ b/src/api/wxma/wxuser.js @@ -0,0 +1,45 @@ +/** + * Copyright (C) 2018-2019 + * All rights reserved, Designed By www.joolun.com + * 注意: + * 本软件为www.joolun.com开发研制,项目使用请保留此说明 + */ +import request from '@/utils/request' + +export function getPage(query) { + return request({ + url: '/weixin/wxuser/page', + method: 'get', + params: query + }) +} + +export function addObj(obj) { + return request({ + url: '/weixin/wxuser', + method: 'post', + data: obj + }) +} + +export function getObj(id) { + return request({ + url: '/weixin/wxuser/' + id, + method: 'get' + }) +} + +export function delObj(id) { + return request({ + url: '/weixin/wxuser/' + id, + method: 'delete' + }) +} + +export function putObj(obj) { + return request({ + url: '/weixin/wxuser', + method: 'put', + data: obj + }) +} diff --git a/src/api/wxmp/wxautoreply.js b/src/api/wxmp/wxautoreply.js new file mode 100644 index 0000000..3b0ff3e --- /dev/null +++ b/src/api/wxmp/wxautoreply.js @@ -0,0 +1,62 @@ +/* +MIT License + +Copyright (c) 2020 www.joolun.com + +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. +*/ +import request from '@/utils/request' + +export function getPage(query) { + return request({ + url: '/weixin/wxautoreply/page', + method: 'get', + params: query + }) +} + +export function addObj(obj) { + return request({ + url: '/weixin/wxautoreply', + method: 'post', + data: obj + }) +} + +export function getObj(id) { + return request({ + url: '/weixin/wxautoreply/' + id, + method: 'get' + }) +} + +export function delObj(id) { + return request({ + url: '/weixin/wxautoreply/' + id, + method: 'delete' + }) +} + +export function putObj(obj) { + return request({ + url: '/weixin/wxautoreply', + method: 'put', + data: obj + }) +} diff --git a/src/api/wxmp/wxdraft.js b/src/api/wxmp/wxdraft.js new file mode 100644 index 0000000..1029bd2 --- /dev/null +++ b/src/api/wxmp/wxdraft.js @@ -0,0 +1,70 @@ +/* +MIT License + +Copyright (c) 2020 www.joolun.com + +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. +*/ +import request from '@/utils/request' + +export function getPage(query) { + return request({ + url: '/weixin/wxdraft/page', + method: 'get', + params: query + }) +} + +export function addObj(obj) { + return request({ + url: '/weixin/wxdraft', + method: 'post', + data: obj + }) +} + +export function getObj(id) { + return request({ + url: '/weixin/wxdraft/' + id, + method: 'get' + }) +} + +export function delObj(query) { + return request({ + url: '/weixin/wxdraft', + method: 'delete', + params: query + }) +} + +export function putObj(obj) { + return request({ + url: '/weixin/wxdraft', + method: 'put', + data: obj + }) +} + +export function publish(id) { + return request({ + url: '/weixin/wxdraft/publish/' + id, + method: 'post' + }) +} diff --git a/src/api/wxmp/wxfreepublish.js b/src/api/wxmp/wxfreepublish.js new file mode 100644 index 0000000..6d9cca4 --- /dev/null +++ b/src/api/wxmp/wxfreepublish.js @@ -0,0 +1,40 @@ +/* +MIT License + +Copyright (c) 2020 www.joolun.com + +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. +*/ +import request from '@/utils/request' + +export function getPage(query) { + return request({ + url: '/weixin/freepublish/page', + method: 'get', + params: query + }) +} + +export function delObj(query) { + return request({ + url: '/weixin/freepublish', + method: 'delete', + params: query + }) +} diff --git a/src/api/wxmp/wxmaterial.js b/src/api/wxmp/wxmaterial.js new file mode 100644 index 0000000..a4f7368 --- /dev/null +++ b/src/api/wxmp/wxmaterial.js @@ -0,0 +1,89 @@ +/* +MIT License + +Copyright (c) 2020 www.joolun.com + +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. +*/ +import request from '@/utils/request' + +export function getPage(query) { + return request({ + url: '/weixin/wxmaterial/page', + method: 'get', + params: query + }) +} + +export function addObj(obj) { + return request({ + url: '/weixin/wxmaterial/materialNews', + method: 'post', + data: obj + }) +} + +export function getObj(id) { + return request({ + url: '/weixin/wxmaterial/' + id, + method: 'get' + }) +} + +export function delObj(query) { + return request({ + url: '/weixin/wxmaterial', + method: 'delete', + params: query + }) +} + +export function putObj(obj) { + return request({ + url: '/weixin/wxmaterial', + method: 'put', + data: obj + }) +} + +export function getMaterialOther(query) { + return request({ + url: '/weixin/wxmaterial/materialOther', + method: 'get', + params: query, + responseType: 'blob' + }) +} + +export function getMaterialVideo(query) { + return request({ + url: '/weixin/wxmaterial/materialVideo', + method: 'get', + params: query + }) +} + +export function getTempMaterialOther(query) { + return request({ + url: '/weixin/wxmaterial/tempMaterialOther', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/src/api/wxmp/wxmenu.js b/src/api/wxmp/wxmenu.js new file mode 100644 index 0000000..d3b00cc --- /dev/null +++ b/src/api/wxmp/wxmenu.js @@ -0,0 +1,55 @@ +/* +MIT License + +Copyright (c) 2020 www.joolun.com + +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. +*/ +import request from '@/utils/request' + +export function save(obj) { + return request({ + url: '/weixin/wxmenu', + method: 'post', + data: obj + }) +} + +export function saveAndRelease(obj) { + return request({ + url: '/weixin/wxmenu/release', + method: 'post', + data: obj + }) +} + +export function getList(query) { + return request({ + url: '/weixin/wxmenu/list', + method: 'get', + params: query + }) +} + +export function delByRuleId(ruleId) { + return request({ + url: '/weixin/wxmenu/' + ruleId, + method: 'delete' + }) +} diff --git a/src/api/wxmp/wxmsg.js b/src/api/wxmp/wxmsg.js new file mode 100644 index 0000000..2702915 --- /dev/null +++ b/src/api/wxmp/wxmsg.js @@ -0,0 +1,62 @@ +/* +MIT License + +Copyright (c) 2020 www.joolun.com + +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. +*/ +import request from '@/utils/request' + +export function getPage(query) { + return request({ + url: '/weixin/wxmsg/page', + method: 'get', + params: query + }) +} + +export function addObj(obj) { + return request({ + url: '/weixin/wxmsg', + method: 'post', + data: obj + }) +} + +export function getObj(id) { + return request({ + url: '/weixin/wxmsg/' + id, + method: 'get' + }) +} + +export function delObj(id) { + return request({ + url: '/weixin/wxmsg/' + id, + method: 'delete' + }) +} + +export function putObj(obj) { + return request({ + url: '/weixin/wxmsg', + method: 'put', + data: obj + }) +} diff --git a/src/api/wxmp/wxsummary.js b/src/api/wxmp/wxsummary.js new file mode 100644 index 0000000..e968196 --- /dev/null +++ b/src/api/wxmp/wxsummary.js @@ -0,0 +1,48 @@ +/* +MIT License + +Copyright (c) 2020 www.joolun.com + +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. +*/ +import request from '@/utils/request' + +export function getUserSummary(query) { + return request({ + url: '/weixin/wxsummary/usersummary', + method: 'get', + params: query + }) +} + +export function getUserCumulate(query) { + return request({ + url: '/weixin/wxsummary/usercumulate', + method: 'get', + params: query + }) +} + +export function getInterfaceSummary(query) { + return request({ + url: '/weixin/wxsummary/interfacesummary', + method: 'get', + params: query + }) +} diff --git a/src/api/wxmp/wxuser.js b/src/api/wxmp/wxuser.js new file mode 100644 index 0000000..df140f9 --- /dev/null +++ b/src/api/wxmp/wxuser.js @@ -0,0 +1,86 @@ +/* +MIT License + +Copyright (c) 2020 www.joolun.com + +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. +*/ +import request from '@/utils/request' + +export function getPage(query) { + return request({ + url: '/weixin/wxuser/page', + method: 'get', + params: query + }) +} + +export function addObj(obj) { + return request({ + url: '/weixin/wxuser', + method: 'post', + data: obj + }) +} + +export function getObj(id) { + return request({ + url: '/weixin/wxuser/' + id, + method: 'get' + }) +} + +export function delObj(id) { + return request({ + url: '/weixin/wxuser/' + id, + method: 'delete' + }) +} + +export function putObj(obj) { + return request({ + url: '/weixin/wxuser', + method: 'put', + data: obj + }) +} + +export function synchroWxUser(obj) { + return request({ + url: '/weixin/wxuser/synchron', + method: 'post', + data: obj + }) +} + +export function updateRemark(obj) { + return request({ + url: '/weixin/wxuser/remark', + method: 'put', + data: obj + }) +} + +export function tagging(obj) { + return request({ + url: '/weixin/wxuser/tagid-list', + method: 'put', + data: obj + }) +} diff --git a/src/api/wxmp/wxusertags.js b/src/api/wxmp/wxusertags.js new file mode 100644 index 0000000..7acc487 --- /dev/null +++ b/src/api/wxmp/wxusertags.js @@ -0,0 +1,56 @@ +/* +MIT License + +Copyright (c) 2020 www.joolun.com + +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. +*/ +import request from '@/utils/request' + +export function getList(query) { + return request({ + url: '/weixin/wxusertags/list', + method: 'get', + params: query + }) +} + +export function addObj(obj) { + return request({ + url: '/weixin/wxusertags', + method: 'post', + data: obj + }) +} + +export function putObj(obj) { + return request({ + url: '/weixin/wxusertags', + method: 'put', + data: obj + }) +} + +export function delObj(query) { + return request({ + url: '/weixin/wxusertags', + method: 'delete', + params: query + }) +} diff --git a/src/components/WxEditor/WxEditor.vue b/src/components/WxEditor/WxEditor.vue new file mode 100644 index 0000000..4756b98 --- /dev/null +++ b/src/components/WxEditor/WxEditor.vue @@ -0,0 +1,257 @@ + + + + + diff --git a/src/components/WxEditor/index.vue b/src/components/WxEditor/index.vue new file mode 100644 index 0000000..935cd8b --- /dev/null +++ b/src/components/WxEditor/index.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/src/components/wx-material-select/main.vue b/src/components/wx-material-select/main.vue new file mode 100644 index 0000000..fa4139c --- /dev/null +++ b/src/components/wx-material-select/main.vue @@ -0,0 +1,267 @@ + + + + + diff --git a/src/components/wx-msg/main.vue b/src/components/wx-msg/main.vue new file mode 100644 index 0000000..6180a51 --- /dev/null +++ b/src/components/wx-msg/main.vue @@ -0,0 +1,357 @@ + + + + + diff --git a/src/components/wx-news/main.vue b/src/components/wx-news/main.vue new file mode 100644 index 0000000..070fb67 --- /dev/null +++ b/src/components/wx-news/main.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/src/components/wx-reply/main.vue b/src/components/wx-reply/main.vue new file mode 100644 index 0000000..344fc7e --- /dev/null +++ b/src/components/wx-reply/main.vue @@ -0,0 +1,611 @@ + + + + diff --git a/src/components/wx-video-play/main.vue b/src/components/wx-video-play/main.vue new file mode 100644 index 0000000..c9b723d --- /dev/null +++ b/src/components/wx-video-play/main.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/src/components/wx-voice-play/main.vue b/src/components/wx-voice-play/main.vue new file mode 100644 index 0000000..bb3d316 --- /dev/null +++ b/src/components/wx-voice-play/main.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/const/crud/mall/goodscategory.js b/src/const/crud/mall/goodscategory.js new file mode 100644 index 0000000..4dec111 --- /dev/null +++ b/src/const/crud/mall/goodscategory.js @@ -0,0 +1,134 @@ +/** + * Copyright (C) 2024 + * All rights reserved, Designed By www.joolun.com + */ +export const tableOption = { + dialogDrag: true, + border: true, + stripe: true, + menuAlign: 'center', + align: 'center', + menuType: 'text', + searchShow: false, + viewBtn: true, + searchMenuSpan: 6, + column: [ + { + label: '父分类', + prop: 'parentId', + type: 'tree', + hide: true, + props: { + label: 'name', + value: 'id' + }, + rules: [ + { + required: true, + message: '请选择父分类', + trigger: 'change' + } + ] + }, + { + label: '名称', + prop: 'name', + align: 'left', + rules: [ + { + required: true, + message: '请输入名称', + trigger: 'blur' + }, + { + max: 16, + message: '长度在不能超过16个字符' + } + ] + }, + { + label: '是否显示', + prop: 'enable', + type: 'radio', + search: true, + sortable: true, + span: 24, + slot: true, + rules: [ + { + required: true, + message: '请选择显示状态', + trigger: 'blur' + } + ], + dicData: [ + { + label: '关闭', + value: '0' + }, + { + label: '启用', + value: '1' + } + ] + }, + { + label: '排序', + type: 'number', + prop: 'sort', + sortable: true, + rules: [ + { + required: true, + message: '排序不能为空', + trigger: 'blur' + } + ] + }, + { + label: '图片', + prop: 'picUrl', + type: 'upload', + listType: 'picture-img', + width: 250, + rules: [ + { + required: true, + message: '图片不能为空', + trigger: 'change' + } + ], + canvasOption: { + text: 'joolun', + ratio: 0.1 + }, + oss: 'ali', + loadText: '附件上传中,请稍等', + span: 24, + tip: '只能上传jpg/png文件,且不超过50kb' + }, + { + label: '描述', + prop: 'description', + hide: true, + rules: [ + { + max: 255, + message: '长度在不能超过255个字符' + } + ] + }, + { + label: '创建时间', + prop: 'createTime', + editDisplay: false, + addDisplay: false + }, + { + label: '更新时间', + prop: 'updateTime', + editDisplay: false, + addDisplay: false + } + ] +} diff --git a/src/const/crud/mall/goodsspu.js b/src/const/crud/mall/goodsspu.js new file mode 100644 index 0000000..cff5ca8 --- /dev/null +++ b/src/const/crud/mall/goodsspu.js @@ -0,0 +1,387 @@ +/** + * Copyright (C) 2024 + * All rights reserved, Designed By www.joolun.com + * 注意: + * 本软件为www.joolun.com开发研制,项目使用请保留此说明 + */ +export const tableOption = { + dialogType: 'drawer', + border: true, + stripe: true, + menuAlign: 'center', + align: 'center', + menuType: 'text', + searchShow: false, + excelBtn: true, + printBtn: true, + selection: true, + dialogWidth: '88%', + searchMenuSpan: 6, + column: [ + { + label: '商品名称', + prop: 'name', + search: true, + display: false + }, + { + label: '商品图片', + prop: 'picUrls', + width: 125, + slot: true, + display: false + }, + { + label: '类目', + prop: 'categoryId', + type: 'cascader', + search: true, + props: { + label: 'name', + value: 'id' + }, + dicUrl: '/goodscategory/tree', + checkStrictly: true, + display: false + }, + { + label: '卖点', + prop: 'sellPoint', + display: false, + overHidden: true, + width: 120 + }, + { + label: '销售价', + prop: 'salesPrice', + slot: true, + display: false + }, + { + label: '市场价', + prop: 'marketPrice', + display: false + }, + { + label: '成本价', + prop: 'costPrice', + display: false + }, + { + label: '库存', + prop: 'stock', + display: false + }, + { + label: '商品编码', + prop: 'spuCode', + width: 110, + search: true, + sortable: true, + display: false + }, + + { + label: '虚拟销量', + prop: 'saleNum', + display: false + }, + { + label: '创建时间', + prop: 'createTime', + sortable: 'custom', + width: 110, + display: false + }, + { + label: '是否上架', + prop: 'shelf', + type: 'radio', + search: true, + width: 110, + sortable: 'custom', + slot: true, + display: false, + dicData: [ + { + label: '下架', + value: '0' + }, + { + label: '上架', + value: '1' + } + ] + }, + { + label: '更新时间', + prop: 'updateTime', + width: 110, + display: false + } + ], + group: [ + { + icon: 'el-icon-goods', + label: '基本信息', + prop: 'group1', + column: [ + { + label: '商品名称', + prop: 'name', + span: 24, + rules: [ + { + required: true, + message: '商品名称不能为空', + trigger: 'blur' + }, + { + max: 100, + message: '长度在不能超过100个字符' + } + ] + }, + + { + label: '商品图片', + prop: 'picUrls', + listType: 'picture-card', + dataType: 'array', + type: 'upload', + width: 250, + rules: [ + { + required: true, + message: '图片不能为空', + trigger: 'change' + } + ], + canvasOption: { + text: 'joolun', + ratio: 0.1 + }, + oss: 'ali', + loadText: '附件上传中,请稍等', + span: 24, + tip: '只能上传jpg/png文件,且不超过50kb' + }, + + { + label: '类目', + prop: 'categoryId', + type: 'cascader', + props: { + label: 'name', + value: 'id' + }, + dicUrl: '/goodscategory/tree', + checkStrictly: true, + rules: [ + { + required: true, + message: '请选择类目', + trigger: 'blur' + } + ] + }, + { + label: '是否上架', + prop: 'shelf', + type: 'radio', + rules: [ + { + required: true, + message: '请选择是否上架', + trigger: 'blur' + } + ], + dicData: [ + { + label: '下架', + value: '0' + }, + { + label: '上架', + value: '1' + } + ] + }, + { + label: '商品编码', + prop: 'spuCode', + rules: [ + { + max: 32, + message: '长度在不能超过32个字符' + } + ] + }, + { + label: '库存', + prop: 'stock', + type: 'number', + precision: 0, + min: 0, + rules: [ + { + required: true, + message: '库存必须填写', + trigger: 'blur' + } + ] + }, + { + label: '销售价', + prop: 'salesPrice', + type: 'number', + precision: 2, + min: 0, + rules: [ + { + required: true, + message: '销售价必须填写', + trigger: 'blur' + } + ] + }, + { + label: '市场价', + prop: 'marketPrice' + }, + { + label: '成本价', + prop: 'costPrice' + }, + { + label: '虚拟销量', + prop: 'saleNum', + type: 'number', + precision: 0, + min: 0, + tip: '可以按自己需求设置,系统会按销售情况自动累加' + }, + { + label: '卖点', + prop: 'sellPoint', + span: 24, + rules: [ + { + max: 500, + message: '长度在不能超过500个字符' + } + ] + } + ] + }, + + { + icon: 'el-icon-grape', + label: '辅助信息', + prop: 'group5', + column: [ + { + label: '描述', + prop: 'description', + formslot: true, + span: 24 + } + ] + } + ] +} + +export const tableOption2 = { + dialogType: 'drawer', + border: true, + stripe: true, + menuAlign: 'center', + align: 'center', + searchShow: false, + dialogWidth: '88%', + editBtn: false, + delBtn: false, + addBtn: false, + selection: true, + menu: false, + maxHeight: 450, + column: [ + { + label: '商品名称', + prop: 'name', + search: true + }, + { + label: '商品图片', + prop: 'picUrls', + width: 120, + slot: true + }, + { + label: '类目', + prop: 'categoryId', + type: 'cascader', + search: true, + props: { + label: 'name', + value: 'id' + }, + dicUrl: '/goodscategory/tree' + }, + { + label: '卖点', + prop: 'sellPoint', + sortable: true + }, + { + label: '销售价', + prop: 'salesPrice', + display: false + }, + { + label: '市场价', + prop: 'marketPrice', + display: false + }, + { + label: '成本价', + prop: 'costPrice', + display: false + }, + { + label: '库存', + prop: 'stock', + display: false + }, + { + label: '商品编码', + prop: 'spuCode', + search: true, + sortable: true + }, + + { + label: '虚拟销量', + prop: 'saleNum', + sortable: true + }, + { + label: '创建时间', + prop: 'createTime', + sortable: true + }, + { + label: '更新时间', + prop: 'updateTime', + sortable: true + }, + { + label: '是否上架', + prop: 'shelf', + type: 'radio', + search: true, + sortable: true, + slot: true + } + ] +} diff --git a/src/const/crud/mall/orderinfo.js b/src/const/crud/mall/orderinfo.js new file mode 100644 index 0000000..272ae6b --- /dev/null +++ b/src/const/crud/mall/orderinfo.js @@ -0,0 +1,186 @@ +/** + * Copyright (C) 2024 + * All rights reserved, Designed By www.joolun.com + * 注意: + * 本软件为www.joolun.com开发研制,项目使用请保留此说明 + */ +export const tableOption = { + // dateBtn:true, + dialogType: 'drawer', + dialogWidth: '80%', + border: true, + index: false, + indexLabel: '序号', + stripe: true, + menuAlign: 'center', + align: 'center', + menuWidth: 150, + menuType: 'text', + searchShow: false, + excelBtn: true, + printBtn: true, + editBtn: false, + delBtn: false, + addBtn: false, + viewBtn: false, + defaultExpandAll: true, + searchMenuSpan: 6, + dateBtn: true, + column: [ + { + label: '用户id', + prop: 'userId', + sortable: true, + hide: true, + display: false + }, + { + label: '是否支付', + prop: 'isPay', + type: 'radio', + hide: true, + search: true, + display: false, + dicData: [ + { + label: '是', + value: '1' + }, + { + label: '否', + value: '0' + } + ] + }, + { + label: '订单编号', + prop: 'orderNo', + search: true, + hide: true, + display: false + }, + { + label: '商品信息', + prop: 'name', + width: 500, + slot: true, + display: false + }, + { + label: '时间/订单编号', + prop: 'createTime', + sortable: true, + width: 250, + slot: true, + display: false + }, + { + label: '状态', + prop: 'status', + type: 'radio', + sortable: true, + slot: true, + width: 170, + display: false + }, + { + label: '订单金额(¥)', + prop: 'salesPrice', + sortable: true, + slot: true, + width: 180, + display: false + }, + { + label: '付款时间', + prop: 'paymentTime', + sortable: 'custom', + display: false, + width: 130 + }, + { + label: '发货时间', + prop: 'deliveryTime', + sortable: true, + hide: true, + display: false + }, + { + label: '收货时间', + prop: 'receiverTime', + sortable: true, + hide: true, + display: false + }, + { + label: '成交时间', + prop: 'closingTime', + sortable: true, + hide: true, + display: false + }, + { + label: '最后更新时间', + prop: 'updateTime', + sortable: true, + hide: true, + display: false + }, + { + label: '备注', + prop: 'remark', + hide: true, + display: false + } + ], + group: [ + { + icon: 'el-icon-s-order', + label: '基本信息', + prop: 'group1', + column: [ + { + prop: 'orderNo', + formslot: true, + span: 24 + } + ] + }, + { + icon: 'el-icon-user', + label: '用户详情', + prop: 'group2', + column: [ + { + prop: 'userId', + formslot: true, + span: 24 + } + ] + }, + { + icon: 'el-icon-goods', + label: '商品信息', + prop: 'group3', + column: [ + { + prop: 'listOrderItem', + formslot: true, + span: 24 + } + ] + }, + { + icon: 'el-icon-location-outline', + label: '收货信息', + prop: 'group4', + column: [ + { + prop: 'orderLogistics', + formslot: true, + span: 24 + } + ] + } + ] +} diff --git a/src/const/crud/wxma/wxuser.js b/src/const/crud/wxma/wxuser.js new file mode 100644 index 0000000..a3739bb --- /dev/null +++ b/src/const/crud/wxma/wxuser.js @@ -0,0 +1,132 @@ +/** + * Copyright (C) 2024 + * All rights reserved, Designed By www.joolun.com + * 注意: + * 本软件为www.joolun.com开发研制,项目使用请保留此说明 + */ +const dicDataSex = [ + { + label: '未知', + value: '0' + }, + { + label: '男', + value: '1' + }, + { + label: '女', + value: '2' + } +] + +export const tableOption = { + dialogDrag: true, + border: true, + index: false, + indexLabel: '序号', + stripe: true, + menuAlign: 'center', + align: 'center', + editBtn: false, + delBtn: false, + addBtn: false, + excelBtn: true, + printBtn: true, + viewBtn: true, + searchShow: false, + menuWidth: 150, + menuType: 'text', + searchMenuSpan: 6, + defaultSort: { + prop: 'createTime', + order: 'descending' + }, + column: [ + { + label: '用户标识', + prop: 'openId', + editDisplay: false + }, + { + label: '头像', + prop: 'headimgUrl', + dataType: 'string', + fileType: 'img', + type: 'upload', + minWidth: 83, + listType: 'picture-img', + editDisplay: false + }, + { + label: '昵称', + prop: 'nickName', + width: 100, + sortable: true, + search: true, + editDisplay: false + }, + { + label: '性别', + prop: 'sex', + width: 80, + type: 'select', + sortable: true, + search: true, + editDisplay: false, + slot: true, + dicData: dicDataSex + }, + { + label: '所在国家', + prop: 'country', + sortable: true, + search: true, + editDisplay: false + }, + { + label: '所在省份', + prop: 'province', + sortable: true, + editDisplay: false + }, + { + label: '所在城市', + prop: 'city', + sortable: true, + search: true, + editDisplay: false + }, + { + label: '用户语言', + prop: 'language', + sortable: true, + editDisplay: false + }, + { + label: '用户备注', + prop: 'remark', + hide: true + }, + { + label: 'union_id', + prop: 'unionId', + hide: true, + editDisplay: false + }, + { + label: '创建时间', + prop: 'createTime', + type: 'datetime', + sortable: true, + editDisplay: false + }, + { + label: '更新时间', + prop: 'updateTime', + type: 'datetime', + sortable: true, + hide: true, + editDisplay: false + } + ] +} diff --git a/src/const/crud/wxmp/wxautoreply.js b/src/const/crud/wxmp/wxautoreply.js new file mode 100644 index 0000000..f00a35d --- /dev/null +++ b/src/const/crud/wxmp/wxautoreply.js @@ -0,0 +1,197 @@ +/* +MIT License + +Copyright (c) 2020 www.joolun.com + +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. +*/ +const dicDataRepType = [ + { + label: '文本', + value: 'text' + }, + { + label: '图片', + value: 'image' + }, + { + label: '语音', + value: 'voice' + }, + { + label: '视频', + value: 'video' + }, + { + label: '音乐', + value: 'music' + }, + { + label: '图文', + value: 'news' + } +] +export const tableOption1 = { + dialogDrag: true, + border: true, + index: true, + indexLabel: '序号', + indexWidth: 70, + stripe: true, + menuAlign: 'center', + align: 'center', + menuType: 'text', + addBtn: false, + delBtn: false, + editBtn: false, + searchShow: false, + searchMenuSpan: 6, + // defaultSort:{ + // prop: 'id', + // order: 'descending' + // }, + column: [ + { + label: '回复消息类型', + prop: 'repType', + type: 'select', + dicData: dicDataRepType + } + ] +} +export const tableOption2 = { + dialogDrag: true, + border: true, + index: true, + indexLabel: '序号', + indexWidth: 70, + stripe: true, + menuAlign: 'center', + align: 'center', + menuType: 'text', + searchShow: false, + addBtn: false, + delBtn: false, + editBtn: false, + searchMenuSpan: 6, + // defaultSort:{ + // prop: 'id', + // order: 'descending' + // }, + column: [ + { + label: '请求消息类型', + prop: 'reqType', + type: 'select', + dicData: [ + { + value: 'text', + label: '文本' + }, + { + value: 'image', + label: '图片' + }, + { + value: 'voice', + label: '语音' + }, + { + value: 'video', + label: '视频' + }, + { + value: 'shortvideo', + label: '小视频' + }, + { + value: 'location', + label: '地理位置' + }, + { + value: 'link', + label: '链接消息' + }, + { + value: 'event', + label: '事件推送' + } + ], + sortable: true + }, + { + label: '回复消息类型', + prop: 'repType', + type: 'select', + dicData: dicDataRepType, + sortable: true + } + ] +} +export const tableOption3 = { + dialogDrag: true, + border: true, + index: true, + indexLabel: '序号', + indexWidth: 70, + stripe: true, + menuAlign: 'center', + align: 'center', + menuType: 'text', + searchShow: false, + addBtn: false, + delBtn: false, + editBtn: false, + searchMenuSpan: 6, + // defaultSort:{ + // prop: 'id', + // order: 'descending' + // }, + column: [ + { + label: '关键词', + prop: 'reqKey', + search: true, + sortable: true + }, + { + label: '匹配类型', + prop: 'repMate', + type: 'select', + dicData: [ + { + value: '1', + label: '全匹配' + }, + { + value: '2', + label: '半匹配' + } + ], + sortable: true + }, + { + label: '回复消息类型', + prop: 'repType', + type: 'select', + dicData: dicDataRepType, + sortable: true + } + ] +} diff --git a/src/const/crud/wxmp/wxmaterial_video.js b/src/const/crud/wxmp/wxmaterial_video.js new file mode 100644 index 0000000..5468161 --- /dev/null +++ b/src/const/crud/wxmp/wxmaterial_video.js @@ -0,0 +1,52 @@ +/* +MIT License + +Copyright (c) 2024 www.joolun.com + +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. +*/ +export const tableOptionVideo = { + dialogDrag: true, + border: true, + index: true, + indexLabel: '序号', + indexWidth: 70, + stripe: true, + menuAlign: 'center', + align: 'center', + editBtn: false, + delBtn: false, + addBtn: false, + viewBtn: true, + searchMenuSpan: 6, + column: [ + { + label: 'media_id', + prop: 'mediaId' + }, + { + label: '名称', + prop: 'name' + }, + { + label: '更新时间', + prop: 'updateTime' + } + ] +} diff --git a/src/const/crud/wxmp/wxmaterial_voice.js b/src/const/crud/wxmp/wxmaterial_voice.js new file mode 100644 index 0000000..56bec09 --- /dev/null +++ b/src/const/crud/wxmp/wxmaterial_voice.js @@ -0,0 +1,52 @@ +/* +MIT License + +Copyright (c) 2024 www.joolun.com + +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. +*/ +export const tableOptionVoice = { + dialogDrag: true, + border: true, + index: true, + indexLabel: '序号', + indexWidth: 70, + stripe: true, + menuAlign: 'center', + align: 'center', + editBtn: false, + delBtn: false, + addBtn: false, + viewBtn: true, + searchMenuSpan: 6, + column: [ + { + label: 'media_id', + prop: 'mediaId' + }, + { + label: '名称', + prop: 'name' + }, + { + label: '更新时间', + prop: 'updateTime' + } + ] +} diff --git a/src/const/crud/wxmp/wxmsg.js b/src/const/crud/wxmp/wxmsg.js new file mode 100644 index 0000000..2e8e06d --- /dev/null +++ b/src/const/crud/wxmp/wxmsg.js @@ -0,0 +1,106 @@ +/* +Copyright (c) 2024 www.joolun.com +*/ +export const tableOption = { + dialogDrag: true, + border: true, + stripe: true, + menuAlign: 'center', + align: 'center', + menuType: 'text', + editBtn: false, + delBtn: false, + addBtn: false, + viewBtn: false, + searchBtn: true, + searchMenuSpan: 6, + defaultSort: { + prop: 'createTime', + order: 'descending' + }, + column: [ + { + label: '消息类型', + prop: 'repType', + type: 'select', + dicData: [ + { + value: 'text', + label: '文本' + }, + { + value: 'image', + label: '图片' + }, + { + value: 'voice', + label: '语音' + }, + { + value: 'video', + label: '视频' + }, + { + value: 'shortvideo', + label: '小视频' + }, + { + value: 'location', + label: '地理位置' + }, + { + value: 'link', + label: '链接消息' + }, + { + value: 'event', + label: '事件推送' + } + ], + search: true, + sortable: true, + width: 120 + }, + { + label: '用户', + prop: 'nickName', + overHidden: false, + search: true, + slot: true, + width: 100 + }, + { + label: '内容', + prop: 'repContent', + overHidden: true, + align: 'left', + slot: true + }, + { + label: '时间', + type: 'date', + prop: 'createTime', + sortable: true, + width: 200 + }, + { + label: '是否已读', + prop: 'readFlag', + type: 'select', + dicData: [ + { + value: '1', + label: '是' + }, + { + value: '0', + label: '否' + } + ], + search: true, + sortable: true, + slot: true, + width: 150 + } + ] +} diff --git a/src/const/crud/wxmp/wxuser.js b/src/const/crud/wxmp/wxuser.js new file mode 100644 index 0000000..847d088 --- /dev/null +++ b/src/const/crud/wxmp/wxuser.js @@ -0,0 +1,379 @@ +/* +MIT License + +Copyright (c) 2024 www.joolun.com + +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. +*/ +const dicDataSubscribeScene = [ + { + label: '公众号搜索', + value: 'ADD_SCENE_SEARCH' + }, + { + label: '公众号迁移', + value: 'ADD_SCENE_ACCOUNT_MIGRATION' + }, + { + label: '名片分享', + value: 'ADD_SCENE_PROFILE_CARD' + }, + { + label: '扫描二维码', + value: 'ADD_SCENE_QR_CODE' + }, + { + label: '图文页内名称点击', + value: 'ADD_SCENE_PROFILE_LINK' + }, + { + label: '图文页右上角菜单', + value: 'ADD_SCENE_PROFILE_ITEM' + }, + { + label: '支付后关注', + value: 'ADD_SCENE_PAID' + }, + { + label: '其他', + value: 'ADD_SCENE_OTHERS' + } +] + +const dicDataSubscribe = [ + { + label: '取消关注', + value: '0' + }, + { + label: '已关注', + value: '1' + } +] + +const dicDataSex = [ + { + label: '未知', + value: '0' + }, + { + label: '男', + value: '1' + }, + { + label: '女', + value: '2' + } +] +export const tableOption = { + dialogDrag: true, + border: true, + index: false, + indexLabel: '序号', + stripe: true, + selection: true, + menuAlign: 'center', + align: 'center', + editBtn: false, + delBtn: false, + addBtn: false, + viewBtn: true, + searchShow: false, + menuWidth: 150, + menuType: 'text', + searchMenuSpan: 6, + defaultSort: { + prop: 'subscribeTime', + order: 'descending' + }, + column: [ + { + label: '头像', + prop: 'headimgUrl', + dataType: 'string', + fileType: 'img', + type: 'upload', + minWidth: 83, + listType: 'picture-img', + editDisplay: false + }, + { + label: '昵称', + prop: 'nickName', + width: 100, + sortable: true, + search: true, + editDisplay: false + }, + { + label: '是否订阅', + prop: 'subscribe', + width: 110, + type: 'select', + sortable: true, + search: true, + editDisplay: false, + slot: true, + dicData: dicDataSubscribe + }, + { + label: 'openId', + prop: 'openId', + search: true + }, + { + label: '关注渠道', + prop: 'subscribeScene', + width: 110, + type: 'select', + sortable: true, + search: true, + editDisplay: false, + dicData: dicDataSubscribeScene + }, + { + label: '关注时间', + prop: 'subscribeTime', + type: 'datetime', + width: 110, + sortable: true, + editDisplay: false + }, + { + label: '性别', + prop: 'sex', + type: 'select', + search: true, + editDisplay: false, + slot: true, + dicData: dicDataSex + }, + { + label: '国家', + prop: 'country', + search: true, + editDisplay: false + }, + { + label: '省份', + prop: 'province', + editDisplay: false + }, + { + label: '城市', + prop: 'city', + search: true, + editDisplay: false + }, + { + label: '语言', + prop: 'language', + editDisplay: false + }, + { + label: '标签', + prop: 'tagidList', + type: 'select', + editDisplay: false, + searchslot: true, + search: true, + props: { + label: 'name', + value: 'id' + } + }, + { + label: '备注', + prop: 'remark' + }, + { + label: '二维码扫码场景', + prop: 'qrSceneStr', + sortable: true, + minWidth: 90, + search: true, + editDisplay: false + }, + { + label: 'union_id', + prop: 'unionId', + hide: true, + editDisplay: false + }, + // { + // label: '手机号码', + // prop: 'phone' + // }, + { + label: '关注次数', + prop: 'subscribeNum', + width: 110, + sortable: true, + editDisplay: false + }, + { + label: '创建时间', + prop: 'createTime', + type: 'datetime', + sortable: true, + hide: true, + editDisplay: false + }, + { + label: '更新时间', + prop: 'updateTime', + type: 'datetime', + sortable: true, + hide: true, + editDisplay: false + }, + { + label: '取关时间', + prop: 'cancelSubscribeTime', + type: 'datetime', + sortable: true, + hide: true, + editDisplay: false + } + ] +} + +export const tableOption2 = { + border: true, + index: false, + indexLabel: '序号', + stripe: true, + selection: true, + menuAlign: 'center', + align: 'center', + editBtn: false, + delBtn: false, + addBtn: false, + excelBtn: false, + printBtn: false, + viewBtn: false, + searchShow: true, + menu: false, + menuWidth: 150, + menuType: 'text', + searchMenuSpan: 6, + defaultSort: { + prop: 'subscribeTime', + order: 'descending' + }, + column: [ + { + label: '头像', + prop: 'headimgUrl', + type: 'upload', + imgWidth: 50, + listType: 'picture-img', + editDisplay: false + }, + { + label: '昵称', + prop: 'nickName', + width: 100, + sortable: true, + search: true, + editDisplay: false + }, + { + label: '关注渠道', + prop: 'subscribeScene', + type: 'select', + sortable: true, + search: true, + editDisplay: false, + dicData: dicDataSubscribeScene + }, + { + label: '关注时间', + prop: 'subscribeTime', + type: 'datetime', + width: 95, + sortable: true, + editDisplay: false + }, + { + label: '性别', + prop: 'sex', + width: 60, + type: 'select', + sortable: true, + search: true, + editDisplay: false, + slot: true, + dicUrl: dicDataSex + }, + { + label: '国家', + prop: 'country', + sortable: true, + search: true, + editDisplay: false + }, + { + label: '省份', + prop: 'province', + sortable: true, + editDisplay: false + }, + { + label: '城市', + prop: 'city', + sortable: true, + search: true, + editDisplay: false + }, + { + label: '语言', + prop: 'language', + sortable: true, + search: true, + editDisplay: false + }, + { + label: '二维码扫码场景', + prop: 'qrSceneStr', + sortable: true, + search: true, + editDisplay: false + }, + { + label: '用户标识', + prop: 'openId', + hide: true, + editDisplay: false + }, + { + label: 'union_id', + prop: 'unionId', + hide: true, + editDisplay: false + }, + { + label: '关注次数', + prop: 'subscribeNum', + width: 50, + sortable: true, + editDisplay: false + } + ] +} diff --git a/src/const/crud/wxmp/wxusertags.js b/src/const/crud/wxmp/wxusertags.js new file mode 100644 index 0000000..f6847f6 --- /dev/null +++ b/src/const/crud/wxmp/wxusertags.js @@ -0,0 +1,30 @@ +/* +MIT License +Copyright (c) 2024 www.joolun.com +*/ +export const tableOption = { + dialogDrag: true, + border: true, + index: false, + stripe: true, + menuAlign: 'center', + align: 'center', + viewBtn: true, + searchShow: false, + menuWidth: 350, + menuType: 'text', + searchMenuSpan: 6, + column: [ + { + label: '名称', + prop: 'name', + rules: [ + { + required: true, + message: '请输入名称', + trigger: 'blur' + } + ] + } + ] +} diff --git a/src/main.js b/src/main.js index 01abb94..2a6bdf8 100644 --- a/src/main.js +++ b/src/main.js @@ -17,6 +17,7 @@ import directive from './directive' // directive // 注册指令 import plugins from './plugins' // plugins +// eslint-disable-next-line import/no-duplicates import { download } from '@/utils/request' // svg图标 @@ -29,11 +30,13 @@ import '@/assets/images/video/icons/iconfont.css' import './permission' // permission control import { useDict } from '@/utils/dict' -import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, selectDictLabels } from '@/utils/ruoyi' +import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, selectDictLabels, filterForm } from '@/utils/ruoyi' // 分页组件 import Pagination from '@/components/Pagination' // 自定义表格工具组件 import RightToolbar from '@/components/RightToolbar' +// 富文本组件 +import Editor from '@/components/Editor' // 文件上传组件 import FileUpload from '@/components/FileUpload' // 图片上传组件 @@ -45,9 +48,16 @@ import TreeSelect from '@/components/TreeSelect' // 字典标签组件 import DictTag from '@/components/DictTag' import TableDynamic from '@/components/Table/TableDynamic' -import TestPage from '@/components/TestPage' import moment from 'moment' + +// 增加avue的引入 https://avuejs.com/docs/installation.html +import Avue from '@smallwei/avue' +import '@smallwei/avue/lib/index.css' +// avue的网络字典请求 +// eslint-disable-next-line import/no-duplicates +import request from '@/utils/request' + moment.locale('zh-cn') const app = createApp(App) @@ -71,7 +81,7 @@ app.component('ImageUpload', ImageUpload) app.component('ImagePreview', ImagePreview) app.component('RightToolbar', RightToolbar) app.component('TableDynamic', TableDynamic) -app.component('TestPage', TestPage) +app.component('Editor', Editor) app.use(router) app.use(store) @@ -87,5 +97,20 @@ app.use(ElementPlus, { // 支持 large、default、small size: Cookies.get('size') || 'default' }) - +//空值过滤器 +app.config.globalProperties.filterForm = filterForm +window.axios = request +// avue全局配置 https://avuejs.com/docs/global.html +app.use(Avue, { + axios: request, + // avue文件上传配置(也可以用ruoyi自带的文件图片上传组件)具体使用可查看goodscategory.vue文件 + ali: { + // 阿里云配置, 配置文档: https://avuejs.com/docs/global.html + region: '', + endpoint: '', + accessKeyId: '', + accessKeySecret: '', + bucket: '' + } +}) app.mount('#app') diff --git a/src/utils/ruoyi.js b/src/utils/ruoyi.js index bf5008d..7f62938 100644 --- a/src/utils/ruoyi.js +++ b/src/utils/ruoyi.js @@ -1,5 +1,3 @@ - - /** * 通用js方法封装处理 * Copyright (c) 2019 ruoyi @@ -15,12 +13,15 @@ export function parseTime(time, pattern) { if (typeof time === 'object') { date = time } else { - if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { + if (typeof time === 'string' && /^[0-9]+$/.test(time)) { time = parseInt(time) } else if (typeof time === 'string') { - time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), ''); + time = time + .replace(/-/gm, '/') + .replace('T', ' ') + .replace(/\.[\d]{3}/gm, '') } - if ((typeof time === 'number') && (time.toString().length === 10)) { + if (typeof time === 'number' && time.toString().length === 10) { time = time * 1000 } date = new Date(time) @@ -37,7 +38,9 @@ export function parseTime(time, pattern) { const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { let value = formatObj[key] // Note: getDay() returns 0 on Sunday - if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } + if (key === 'a') { + return ['日', '一', '二', '三', '四', '五', '六'][value] + } if (result.length > 0 && value < 10) { value = '0' + value } @@ -49,106 +52,108 @@ export function parseTime(time, pattern) { // 表单重置 export function resetForm(refName) { if (this.$refs[refName]) { - this.$refs[refName].resetFields(); + this.$refs[refName].resetFields() } } // 添加日期范围 export function addDateRange(params, dateRange, propName) { - let search = params; - search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; - dateRange = Array.isArray(dateRange) ? dateRange : []; - if (typeof (propName) === 'undefined') { - search.params['beginTime'] = dateRange[0]; - search.params['endTime'] = dateRange[1]; + const search = params + search.params = typeof search.params === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {} + dateRange = Array.isArray(dateRange) ? dateRange : [] + if (typeof propName === 'undefined') { + search.params.beginTime = dateRange[0] + search.params.endTime = dateRange[1] } else { - search.params['begin' + propName] = dateRange[0]; - search.params['end' + propName] = dateRange[1]; + search.params['begin' + propName] = dateRange[0] + search.params['end' + propName] = dateRange[1] } - return search; + return search } // 回显数据字典 export function selectDictLabel(datas, value) { if (value === undefined) { - return ""; + return '' } - var actions = []; + const actions = [] Object.keys(datas).some((key) => { - if (datas[key].value == ('' + value)) { - actions.push(datas[key].label); - return true; + if (datas[key].value == '' + value) { + actions.push(datas[key].label) + return true } }) if (actions.length === 0) { - actions.push(value); + actions.push(value) } - return actions.join(''); + return actions.join('') } // 回显数据字典(字符串数组) export function selectDictLabels(datas, value, separator) { - if (value === undefined || value.length ===0) { - return ""; + if (value === undefined || value.length === 0) { + return '' } if (Array.isArray(value)) { - value = value.join(","); + value = value.join(',') } - var actions = []; - var currentSeparator = undefined === separator ? "," : separator; - var temp = value.split(currentSeparator); + const actions = [] + const currentSeparator = undefined === separator ? ',' : separator + const temp = value.split(currentSeparator) Object.keys(value.split(currentSeparator)).some((val) => { - var match = false; + let match = false Object.keys(datas).some((key) => { - if (datas[key].value == ('' + temp[val])) { - actions.push(datas[key].label + currentSeparator); - match = true; + if (datas[key].value == '' + temp[val]) { + actions.push(datas[key].label + currentSeparator) + match = true } }) if (!match) { - actions.push(temp[val] + currentSeparator); + actions.push(temp[val] + currentSeparator) } }) - return actions.join('').substring(0, actions.join('').length - 1); + return actions.join('').substring(0, actions.join('').length - 1) } // 字符串格式化(%s ) export function sprintf(str) { - var args = arguments, flag = true, i = 1; + const args = arguments + let flag = true + let i = 1 str = str.replace(/%s/g, function () { - var arg = args[i++]; + const arg = args[i++] if (typeof arg === 'undefined') { - flag = false; - return ''; + flag = false + return '' } - return arg; - }); - return flag ? str : ''; + return arg + }) + return flag ? str : '' } // 转换字符串,undefined,null等转化为"" export function parseStrEmpty(str) { - if (!str || str == "undefined" || str == "null") { - return ""; + if (!str || str == 'undefined' || str == 'null') { + return '' } - return str; + return str } // 数据合并 export function mergeRecursive(source, target) { - for (var p in target) { + for (const p in target) { try { if (target[p].constructor == Object) { - source[p] = mergeRecursive(source[p], target[p]); + source[p] = mergeRecursive(source[p], target[p]) } else { - source[p] = target[p]; + source[p] = target[p] } } catch (e) { - source[p] = target[p]; + source[p] = target[p] } } - return source; -}; + return source +} /** * 构造树型结构数据 @@ -158,95 +163,130 @@ export function mergeRecursive(source, target) { * @param {*} children 孩子节点字段 默认 'children' */ export function handleTree(data, id, parentId, children) { - let config = { + const config = { id: id || 'id', parentId: parentId || 'parentId', childrenList: children || 'children' - }; + } - var childrenListMap = {}; - var nodeIds = {}; - var tree = []; + const childrenListMap = {} + const nodeIds = {} + const tree = [] - for (let d of data) { - let parentId = d[config.parentId]; + for (const d of data) { + const parentId = d[config.parentId] if (childrenListMap[parentId] == null) { - childrenListMap[parentId] = []; + childrenListMap[parentId] = [] } - nodeIds[d[config.id]] = d; - childrenListMap[parentId].push(d); + nodeIds[d[config.id]] = d + childrenListMap[parentId].push(d) } - for (let d of data) { - let parentId = d[config.parentId]; + for (const d of data) { + const parentId = d[config.parentId] if (nodeIds[parentId] == null) { - tree.push(d); + tree.push(d) } } - for (let t of tree) { - adaptToChildrenList(t); + for (const t of tree) { + adaptToChildrenList(t) } function adaptToChildrenList(o) { if (childrenListMap[o[config.id]] !== null) { - o[config.childrenList] = childrenListMap[o[config.id]]; + o[config.childrenList] = childrenListMap[o[config.id]] } if (o[config.childrenList]) { - for (let c of o[config.childrenList]) { - adaptToChildrenList(c); + for (const c of o[config.childrenList]) { + adaptToChildrenList(c) } } } - return tree; + return tree } /** -* 参数处理 -* @param {*} params 参数 -*/ + * 参数处理 + * @param {*} params 参数 + */ export function tansParams(params) { let result = '' for (const propName of Object.keys(params)) { - const value = params[propName]; - var part = encodeURIComponent(propName) + "="; - if (value !== null && value !== "" && typeof (value) !== "undefined") { + const value = params[propName] + const part = encodeURIComponent(propName) + '=' + if (value !== null && value !== '' && typeof value !== 'undefined') { if (typeof value === 'object') { for (const key of Object.keys(value)) { - if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { - let params = propName + '[' + key + ']'; - var subPart = encodeURIComponent(params) + "="; - result += subPart + encodeURIComponent(value[key]) + "&"; + if (value[key] !== null && value[key] !== '' && typeof value[key] !== 'undefined') { + const params = propName + '[' + key + ']' + const subPart = encodeURIComponent(params) + '=' + result += subPart + encodeURIComponent(value[key]) + '&' } } } else { - result += part + encodeURIComponent(value) + "&"; + result += part + encodeURIComponent(value) + '&' } } } return result } - // 返回项目路径 export function getNormalPath(p) { if (p.length === 0 || !p || p == 'undefined') { return p - }; - let res = p.replace('//', '/') + } + const res = p.replace('//', '/') if (res[res.length - 1] === '/') { return res.slice(0, res.length - 1) } - return res; + return res } // 验证是否为blob格式 export async function blobValidate(data) { try { - const text = await data.text(); - JSON.parse(text); - return false; + const text = await data.text() + JSON.parse(text) + return false } catch (error) { - return true; + return true } -} \ No newline at end of file +} + +/** + * 判断是否为空 + */ +export function validatenull(val) { + if (typeof val === 'boolean') { + return false + } + if (typeof val === 'number') { + return false + } + if (val instanceof Array) { + if (val.length == 0) return true + } else if (val instanceof Object) { + if (JSON.stringify(val) === '{}') return true + } else { + if (val == 'null' || val == null || val == 'undefined' || val == undefined || val == '') return true + return false + } + return false +} + +/** + * 对象空值过滤器 + * @param {*} form + * @returns + */ +export const filterForm = (form) => { + const obj = {} + Object.keys(form).forEach((ele) => { + if (!validatenull(form[ele])) { + obj[ele] = form[ele] + } + }) + return obj +} diff --git a/src/views/wxma/wxuser/index.vue b/src/views/wxma/wxuser/index.vue new file mode 100644 index 0000000..15a2b6d --- /dev/null +++ b/src/views/wxma/wxuser/index.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/src/views/wxmp/wxautoreply/index.vue b/src/views/wxmp/wxautoreply/index.vue new file mode 100644 index 0000000..6e77533 --- /dev/null +++ b/src/views/wxmp/wxautoreply/index.vue @@ -0,0 +1,404 @@ + + + + + diff --git a/src/views/wxmp/wxdraft/index.vue b/src/views/wxmp/wxdraft/index.vue new file mode 100644 index 0000000..896ee3c --- /dev/null +++ b/src/views/wxmp/wxdraft/index.vue @@ -0,0 +1,793 @@ + + + + + diff --git a/src/views/wxmp/wxfreepublish/index.vue b/src/views/wxmp/wxfreepublish/index.vue new file mode 100644 index 0000000..f6365d0 --- /dev/null +++ b/src/views/wxmp/wxfreepublish/index.vue @@ -0,0 +1,331 @@ + + + + + diff --git a/src/views/wxmp/wxmaterial/index.vue b/src/views/wxmp/wxmaterial/index.vue new file mode 100644 index 0000000..a2275e6 --- /dev/null +++ b/src/views/wxmp/wxmaterial/index.vue @@ -0,0 +1,886 @@ + + + + + diff --git a/src/views/wxmp/wxmenu/assets/demo.png b/src/views/wxmp/wxmenu/assets/demo.png new file mode 100644 index 0000000..49c9a02 Binary files /dev/null and b/src/views/wxmp/wxmenu/assets/demo.png differ diff --git a/src/views/wxmp/wxmenu/assets/iphone_backImg.png b/src/views/wxmp/wxmenu/assets/iphone_backImg.png new file mode 100644 index 0000000..bb09591 Binary files /dev/null and b/src/views/wxmp/wxmenu/assets/iphone_backImg.png differ diff --git a/src/views/wxmp/wxmenu/assets/logo.png b/src/views/wxmp/wxmenu/assets/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/src/views/wxmp/wxmenu/assets/logo.png differ diff --git a/src/views/wxmp/wxmenu/assets/menu_foot.png b/src/views/wxmp/wxmenu/assets/menu_foot.png new file mode 100644 index 0000000..4a89d4b Binary files /dev/null and b/src/views/wxmp/wxmenu/assets/menu_foot.png differ diff --git a/src/views/wxmp/wxmenu/assets/menu_head.png b/src/views/wxmp/wxmenu/assets/menu_head.png new file mode 100644 index 0000000..248cfb7 Binary files /dev/null and b/src/views/wxmp/wxmenu/assets/menu_head.png differ diff --git a/src/views/wxmp/wxmenu/detail.vue b/src/views/wxmp/wxmenu/detail.vue new file mode 100644 index 0000000..9906f6e --- /dev/null +++ b/src/views/wxmp/wxmenu/detail.vue @@ -0,0 +1,564 @@ + + + + + + + + + diff --git a/src/views/wxmp/wxmsg/index.vue b/src/views/wxmp/wxmsg/index.vue new file mode 100644 index 0000000..f2d49d5 --- /dev/null +++ b/src/views/wxmp/wxmsg/index.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/src/views/wxmp/wxsummary/index.vue b/src/views/wxmp/wxsummary/index.vue new file mode 100644 index 0000000..d92d391 --- /dev/null +++ b/src/views/wxmp/wxsummary/index.vue @@ -0,0 +1,303 @@ + + + + + diff --git a/src/views/wxmp/wxuser/index.vue b/src/views/wxmp/wxuser/index.vue new file mode 100644 index 0000000..36cc1b2 --- /dev/null +++ b/src/views/wxmp/wxuser/index.vue @@ -0,0 +1,382 @@ + + + + + diff --git a/src/views/wxmp/wxusertags/index.vue b/src/views/wxmp/wxusertags/index.vue new file mode 100644 index 0000000..aff76bb --- /dev/null +++ b/src/views/wxmp/wxusertags/index.vue @@ -0,0 +1,151 @@ + + + + +