131 Commits
1.3.1 ... 1.3.4

Author SHA1 Message Date
TinyAnts
4d43d7cdcc Merge branch 'release/1.3.4' 2022-11-17 18:55:42 +08:00
TinyAnts
8105c877af 安装sql 2022-11-17 18:28:16 +08:00
TinyAnts
ff5b649969 修复管理员编辑bug 2022-11-17 18:07:11 +08:00
Jason
c64d0151b3 打包,调整文件接口路径 2022-11-17 17:45:49 +08:00
Jason
98328e1bb1 打包 2022-11-17 17:33:22 +08:00
TinyAnts
402321fe3c 系统管理员编辑限制 2022-11-17 17:32:29 +08:00
TinyAnts
830c10ea73 增加系统管理员校验 2022-11-17 17:31:13 +08:00
TinyAnts
728a0f6ec5 调整注释 2022-11-17 17:03:25 +08:00
TinyAnts
40df111da7 修复通知设置bug 2022-11-17 16:40:28 +08:00
Jason
1d7c2383c1 调整素材中心按钮权限相关 2022-11-17 16:38:59 +08:00
Jason
3137a59566 Merge branch 'develop' of https://gitee.com/likeshop_gitee/likeadmin-java into develop 2022-11-17 16:25:37 +08:00
Jason
339f63c0c0 调整素材相关接口 2022-11-17 16:25:28 +08:00
TinyAnts
edc5357b8c 调整素材接口 2022-11-17 16:14:51 +08:00
TinyAnts
e22508240d Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-11-17 16:09:06 +08:00
TinyAnts
8480f98f28 调整登录异常监控 2022-11-17 16:09:01 +08:00
Jason
45b11402ce 调整管理员 2022-11-17 16:06:23 +08:00
TinyAnts
ef53643368 修复用户忘记密码bug 2022-11-17 15:42:26 +08:00
TinyAnts
41d372da5f 修复用户修改密码依然是密码错误bug 2022-11-17 15:40:47 +08:00
TinyAnts
aa4ba06be0 修复用户修改密码bug 2022-11-17 15:30:06 +08:00
TinyAnts
aa92623d7c 调整登录时效读配置 2022-11-17 15:27:11 +08:00
TinyAnts
b13523ca5e 优化登录时效配置 2022-11-17 15:18:45 +08:00
TinyAnts
522c698f6c 修复uniapp端更新手机号后createTime被更新 2022-11-17 15:07:32 +08:00
TinyAnts
b1fe1d9d47 Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-11-17 14:59:48 +08:00
TinyAnts
25a85adf9e 处理编辑管理员 2022-11-17 14:59:32 +08:00
Jason
54c58d6ee1 调整后台底部导航,上传文件接口 2022-11-17 14:57:35 +08:00
TinyAnts
52615d1646 sa-token异常拦截 2022-11-17 14:53:29 +08:00
TinyAnts
2cd73748bb 修复底部导航编辑bug 2022-11-17 12:18:53 +08:00
TinyAnts
e23cb64f32 调整上传目录配置 2022-11-17 12:02:04 +08:00
TinyAnts
c639499fbc 修复静态图片404问题 2022-11-17 11:50:27 +08:00
TinyAnts
bd97df6f7b 优化代码 2022-11-17 11:39:14 +08:00
TinyAnts
e211426c1a 优化404拦截写法 2022-11-16 23:21:59 +08:00
TinyAnts
dafaf09011 修复json响应工具 2022-11-16 23:09:33 +08:00
TinyAnts
97b8f7016d 调整代码生成器 2022-11-16 22:59:16 +08:00
TinyAnts
3247a5f7d0 调整代码生成器 2022-11-16 22:06:21 +08:00
TinyAnts
57c88cf773 调整代码生成器 2022-11-16 19:01:45 +08:00
TinyAnts
329734b332 代码生成器 2022-11-16 18:17:59 +08:00
TinyAnts
c622781003 代码生成器调整 2022-11-16 17:54:01 +08:00
xinjie
e89f22cd8c 调整接口的一些字段及接口名称 2022-11-16 16:18:59 +08:00
TinyAnts
6db7255ed3 优化通知驱动类 2022-11-16 16:11:38 +08:00
TinyAnts
7a37ac18ac 修复通知设置bug 2022-11-16 15:01:40 +08:00
TinyAnts
ca9a251176 修复管理员编辑bug 2022-11-16 12:08:09 +08:00
TinyAnts
798d12c16f 修复登录问题 2022-11-16 12:00:43 +08:00
TinyAnts
124b1ff5dd 调整json转换工具 2022-11-16 11:49:39 +08:00
TinyAnts
a5d63d6c96 接入sa-token 2022-11-16 11:35:52 +08:00
TinyAnts
956bf841b3 整体优化代码结构 2022-11-15 22:25:17 +08:00
xinjie
e685304616 移动端-资讯中心下拉导航栏消失问题 2022-11-15 14:59:23 +08:00
xinjie
abbd23e332 可视化装修能拖拽排序 2022-11-15 14:46:12 +08:00
xinjie
37d39503bd 修改工作台二维码图片 2022-11-15 14:30:34 +08:00
xinjie
8055572f19 设置添加面包屑,logo配置 2022-11-15 14:23:03 +08:00
xinjie
7383a145b4 设置添加面包屑,logo配置 2022-11-15 14:18:24 +08:00
TinyAnts
1ab009544f Merge tag '13.3' into develop 2022-10-14 17:09:06 +08:00
TinyAnts
fb9e5c3d49 Merge branch 'release/13.3' 2022-10-14 17:09:06 +08:00
TinyAnts
32232cb604 修改安装SQL 2022-10-14 16:16:20 +08:00
TinyAnts
bd5f7bcad0 修改版本号 2022-10-14 16:14:02 +08:00
Jason
8e5d515e4c 调整版本号 2022-10-14 15:49:14 +08:00
Jason
abf98ee5e7 修复代码生成的页面无法缓存的问题 2022-10-14 15:39:02 +08:00
Jason
61a9a453f4 调整dictvalue组件 2022-10-14 15:28:44 +08:00
Jason
3dd371161b 打包 2022-10-14 14:54:18 +08:00
TinyAnts
88af20071b 修复代码生成器导入小数报错问题 2022-10-14 11:40:10 +08:00
TinyAnts
514b0108a5 修复代码生成器新增bug 2022-10-14 11:33:14 +08:00
TinyAnts
8c2729493d 修复代码生成存在小数的问题 2022-10-14 11:26:40 +08:00
Jason
47e968ddf9 部分输入框添加长度限制 2022-10-14 11:15:47 +08:00
TinyAnts
4d5615f90d 去除调试的注释 2022-10-14 11:09:29 +08:00
TinyAnts
8283695735 调整参数校验 2022-10-14 10:49:37 +08:00
Jason
8432eef4cf 调整所有排序的最大值 2022-10-14 10:47:21 +08:00
TinyAnts
e0407759d4 优化部门排序限制 2022-10-14 10:14:38 +08:00
TinyAnts
2eae8d9e94 优化统一时间写法 2022-10-14 10:00:25 +08:00
Ants
6efc39f902 !24 更新登录信息
Merge pull request !24 from 也曾为你、像超人/N/A
2022-10-14 01:58:27 +00:00
TinyAnts
0a708b79f0 修复登录重复更新信息bug 2022-10-14 09:55:52 +08:00
也曾为你、像超人
36e4725565 更新登录信息
Signed-off-by: 也曾为你、像超人 <1553592282@qq.com>
2022-10-13 13:07:38 +00:00
Jason
5029618235 !21 修复I5TUL1问题
Merge pull request !21 from 2014520/develop
2022-10-13 09:24:45 +00:00
Jason
1595d987ed 路由验权调整 2022-10-13 17:00:50 +08:00
Jason
35cec2a64c 登录页面跳转 2022-10-13 16:59:59 +08:00
Jason
6ee54646a8 调整微信公众号回复管理弹窗点击空白关闭问题 2022-10-13 16:59:34 +08:00
Jason
3deaa814a4 调整后台文案 2022-10-13 16:08:31 +08:00
Jason
4c458aeeac 管理员弹窗因类型问题警告 2022-10-13 15:48:05 +08:00
Jason
a99227d2ef 修复富文本编辑器全屏层级问题 2022-10-13 15:47:31 +08:00
Jason
10c95a0dee 修复h5协议跳转问题 2022-10-13 15:03:11 +08:00
Jason
3094503b17 调整图片选择器 2022-10-13 15:01:12 +08:00
TinyAnts
0e7944bd37 Merge tag '13.2' into develop 2022-09-30 16:32:41 +08:00
TinyAnts
83f57ad01d Merge branch 'release/13.2' 2022-09-30 16:32:37 +08:00
TinyAnts
e05348206e 修复底部导航错误 2022-09-30 16:26:39 +08:00
TinyAnts
f4e4130cab 调整安装SQL 2022-09-30 15:36:20 +08:00
TinyAnts
0817b16615 调整素材 2022-09-30 14:53:46 +08:00
zhangliang
e16fc88e81 修复I5TUL1问题-编辑用户信息字段超长 2022-09-30 14:52:11 +08:00
Jason
f3b10f07b1 打包 2022-09-30 14:13:20 +08:00
Jason
e191fc8d26 公众号回复调整 2022-09-30 14:05:38 +08:00
TinyAnts
8052475e40 修复公众号回复管理 2022-09-30 11:49:03 +08:00
Jason
0cc7c8e7b9 修改环境变量配置,app目录-->uniapp 2022-09-30 10:23:58 +08:00
TinyAnts
9b5b625680 调整SQL文件 2022-09-29 17:11:40 +08:00
Jason
5d06003895 修改代码生气器模板 2022-09-29 15:23:46 +08:00
Jason
061543a191 热门搜索排除空值 2022-09-29 15:18:41 +08:00
Jason
c073cc65a7 只展开一个一级菜单开关 2022-09-29 14:55:04 +08:00
Jason
5b9af90590 修复保存图片错误 2022-09-29 14:41:46 +08:00
Jason
61ef48d446 修复登录账号没有任何权限时跳转到403页面错误 2022-09-29 14:39:56 +08:00
Jason
331997e1e9 上传文件优化 2022-09-29 10:41:33 +08:00
Jason
a4b6b2d6c8 修改搜索栏input框宽度 2022-09-29 10:26:49 +08:00
Jason
140249aca8 修复通知提示bug 2022-09-29 10:26:11 +08:00
Jason
6719e1b4f1 素材中心优化 2022-09-29 10:19:03 +08:00
likeshop技术社区
6bf572a01a add LICENSE.
Signed-off-by: likeshop技术社区 <419339937@qq.com>
2022-09-29 02:17:21 +00:00
Jason
b74724084e 富文本优化 2022-09-29 10:16:59 +08:00
likeshop技术社区
580c06686a 删除文件 LICENSE 2022-09-29 02:16:58 +00:00
TinyAnts
235ab92413 优化代码 2022-09-28 09:38:52 +08:00
TinyAnts
4b58de936c init 2022-09-28 09:25:54 +08:00
TinyAnts
611f59941f 优化代码规范 2022-09-27 19:01:50 +08:00
TinyAnts
8db1cff376 优化代码 2022-09-27 18:54:07 +08:00
TinyAnts
6cb4ad95a7 优化代码 2022-09-27 18:25:24 +08:00
TinyAnts
5e9db85f86 优化调整代码规范 2022-09-27 17:47:32 +08:00
TinyAnts
11c06ec81e 代码生成器 2022-09-26 11:14:36 +08:00
TinyAnts
551a042582 修复代码生成器bug 2022-09-26 11:11:58 +08:00
TinyAnts
eb0ab251d5 优化代码生成器注释生成 2022-09-26 10:43:48 +08:00
TinyAnts
19e2d1c03b 优化代码生成器注释生成 2022-09-26 10:42:34 +08:00
TinyAnts
71066b6d83 修复代码生成器主键有下划线错误 2022-09-26 10:22:02 +08:00
TinyAnts
6f11895f70 修复AOP上传文件记录日志错误 2022-09-26 09:29:31 +08:00
Ants
909b4f03a0 !18 处理文件类型上传导致日志收集失败: I5SYLB
Merge pull request !18 from mlzhang/cherry-pick-1664048747
2022-09-26 01:27:07 +00:00
TinyAnts
48e39fa4f9 阿里云存储文案调整 2022-09-26 09:21:23 +08:00
mlzhang
b20738061e fixed 1d998d1 from https://gitee.com/zmldaniu/likeadmin_java/pulls/17
🐛 增加日志类型、判断文件类型记录文件名称 #I5SYLB
2022-09-24 19:45:49 +00:00
Ants
808cda3277 回退 'Pull Request !8 : 处理iss 优化建议' 2022-09-23 07:00:25 +00:00
Ants
42c7936f40 !8 处理iss 优化建议
Merge pull request !8 from mlzhang/master
2022-09-23 06:10:22 +00:00
Ants
dacded0e7a !15 修复代码生成器导入数据表,编辑字段问题,兼容mysql8
Merge pull request !15 from hawk/master
2022-09-23 06:08:37 +00:00
hawk
b2cf624380 取消更新javaType 2022-09-23 09:40:01 +08:00
hawk
5faf6aa301 Revert "不更新配置"
This reverts commit a70c5f6fc3.
2022-09-23 09:36:26 +08:00
hawk
b66eb35abb Merge branch 'javaType修复'
* javaType修复:
  修复代码生成器编辑数据表,不能保存java类型
2022-09-23 08:49:08 +08:00
hawk
ee8636ec54 修复代码生成器编辑数据表,不能保存java类型 2022-09-23 08:31:46 +08:00
hawk
a6d3ffb016 Revert "修复代码生成器编辑数据表,不能保存java类型"
This reverts commit 04a5d121a8.
2022-09-23 08:11:23 +08:00
hawk
04a5d121a8 修复代码生成器编辑数据表,不能保存java类型 2022-09-23 07:56:15 +08:00
hawk
a70c5f6fc3 不更新配置 2022-09-23 07:55:01 +08:00
TinyAnts
6dc8cc78a2 调整SQL文件 2022-09-22 09:39:24 +08:00
hawk
78db1ace6d 修复代码生成器导入数据表,编辑字段问题,兼容mysql8 2022-09-21 23:20:13 +08:00
TinyAnts
158125c3d0 Merge tag '1.3.1' into develop 2022-09-21 17:42:28 +08:00
zhangml
2db501d36d 优化部门级联和默认 #I5R3QL 2022-09-16 13:42:11 +08:00
935 changed files with 9372 additions and 6613 deletions

214
LICENSE
View File

@@ -1,201 +1,21 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
MIT License
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
Copyright (c) 2022 likeshop技术社区
1. Definitions.
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:
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
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.

View File

@@ -1,4 +0,0 @@
NODE_ENV = 'development'
# 请求域名
VITE_APP_BASE_URL='https://likeadmin-java.yixiangonline.com'

View File

@@ -0,0 +1,4 @@
NODE_ENV = 'development'
# 请求域名
VITE_APP_BASE_URL=''

3
admin/.gitignore vendored
View File

@@ -30,3 +30,6 @@ components.d.ts
*.sln
*.sw?
# .env
.env.development
.env.production

View File

@@ -2,10 +2,10 @@ import request from '@/utils/request'
// 配置
export function getConfig() {
return request.get({ url: '/common/index/config' })
return request.get({ url: '/index/config' })
}
// 工作台主页
export function getWorkbench() {
return request.get({ url: '/common/index/console' })
return request.get({ url: '/index/console' })
}

View File

@@ -1,4 +1,5 @@
import request from '@/utils/request'
import { firstToUpperCase } from '@/utils/util'
// 微信公众号配置保存
export function setOaConfig(params: any) {
@@ -47,12 +48,11 @@ export function setOaMenuPublish(params: Menu | any) {
}
/**
* @return { Promise }
* @param { string } type
* @description 获取回复列表
* @description 默认回复列表
*/
export function getOaReplyList(params: { type: string }) {
return request.get({ url: '/channel/oaReply/list', params })
export function getOaReplyList(params: any) {
const type = firstToUpperCase(params.type)
return request.get({ url: `/channel/oaReply${type}/list`, params })
}
/**
@@ -60,8 +60,9 @@ export function getOaReplyList(params: { type: string }) {
* @param { number } id
* @description 回复列表删除
*/
export function oaReplyDel(params: { id: number }) {
return request.post({ url: '/channel/oaReply/del', params })
export function oaReplyDel(params: any) {
const type = firstToUpperCase(params.type)
return request.post({ url: `/channel/oaReply${type}/del`, params })
}
/**
@@ -69,8 +70,9 @@ export function oaReplyDel(params: { id: number }) {
* @param { number } id
* @description 回复状态修改
*/
export function changeOaReplyStatus(params: { id: number }) {
return request.post({ url: '/channel/oaReply/status', params })
export function changeOaReplyStatus(params: any) {
const type = firstToUpperCase(params.type)
return request.post({ url: `/channel/oaReply${type}/status`, params })
}
export interface Reply {
@@ -85,25 +87,26 @@ export interface Reply {
}
/**
* @return { Promise }
* @description 回复添加
* @description 默认回复编辑
*/
export function oaReplyAdd(params: Reply) {
return request.post({ url: '/channel/oaReply/add', params })
const type = firstToUpperCase(params.type)
return request.post({ url: `/channel/oaReply${type}/add`, params })
}
/**
* @return { Promise }
* @description 回复编辑
* @description 默认回复编辑
*/
export function oaReplyEdit(params: Reply) {
return request.post({ url: '/channel/oaReply/edit', params })
const type = firstToUpperCase(params.type)
return request.post({ url: `/channel/oaReply${type}/edit`, params })
}
/**
* @return { Promise }
* @param { string } type
* @description 获取回复详情
* @description 默认回复详情
*/
export function getOaReplyDetail(params: { id: number }) {
return request.get({ url: '/channel/oaReply/detail', params })
export function getOaReplyDetail(params: any) {
const type = firstToUpperCase(params.type)
return request.get({ url: `/channel/oaReply${type}/detail`, params })
}

View File

@@ -1,39 +1,39 @@
import request from '@/utils/request'
export function fileCateAdd(params: Record<string, any>) {
return request.post({ url: '/common/album/cateAdd', params })
return request.post({ url: '/albums/cateAdd', params })
}
export function fileCateEdit(params: Record<string, any>) {
return request.post({ url: '/common/album/cateRename', params })
return request.post({ url: '/albums/cateRename', params })
}
// 文件分类删除
export function fileCateDelete(params: Record<string, any>) {
return request.post({ url: '/common/album/cateDel', params })
return request.post({ url: '/albums/cateDel', params })
}
// 文件分类列表
export function fileCateLists(params: Record<string, any>) {
return request.get({ url: '/common/album/cateList', params })
return request.get({ url: '/albums/cateList', params })
}
// 文件列表
export function fileList(params: Record<string, any>) {
return request.get({ url: '/common/album/albumList', params })
return request.get({ url: '/albums/albumList', params })
}
// 文件删除
export function fileDelete(params: Record<string, any>) {
return request.post({ url: '/common/album/albumDel', params })
return request.post({ url: '/albums/albumDel', params })
}
// 文件移动
export function fileMove(params: Record<string, any>) {
return request.post({ url: '/common/album/albumMove', params })
return request.post({ url: '/albums/albumMove', params })
}
// 文件重命名
export function fileRename(params: { id: number; name: string }) {
return request.post({ url: '/common/album/albumRename', params })
return request.post({ url: '/albums/albumRename', params })
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -6,10 +6,15 @@
</div>
</template>
<script lang="ts" setup>
const props = defineProps<{
options: any[]
value: any
}>()
const props = withDefaults(
defineProps<{
options: any[]
value: any
}>(),
{
options: () => []
}
)
const values = computed(() => {
if (props.value !== null && typeof props.value !== 'undefined') {

View File

@@ -15,9 +15,10 @@
/>
<material-picker
ref="materialPickerRef"
:type="fileType"
:limit="-1"
hidden-upload
@change="imageSelectChange"
@change="selectChange"
/>
</div>
</template>
@@ -42,9 +43,7 @@ const props = withDefaults(
mode: 'default',
height: '100%',
width: 'auto',
toolbarConfig: () => ({
excludeKeys: ['fullScreen']
})
toolbarConfig: () => ({})
}
)
@@ -55,16 +54,24 @@ const emit = defineEmits<{
// 编辑器实例,必须用 shallowRef
const editorRef = shallowRef()
const materialPickerRef = shallowRef<InstanceType<typeof MaterialPicker>>()
const fileType = ref('')
let insertImageFn: any
let insertFn: any
const editorConfig: Partial<IEditorConfig> = {
MENU_CONF: {
uploadImage: {
customBrowseAndUpload(insertFn: any) {
console.log(insertFn)
customBrowseAndUpload(insert: any) {
fileType.value = 'image'
materialPickerRef.value?.showPopup(-1)
insertImageFn = insertFn
insertFn = insert
}
},
uploadVideo: {
customBrowseAndUpload(insert: any) {
fileType.value = 'video'
materialPickerRef.value?.showPopup(-1)
insertFn = insert
}
}
}
@@ -83,9 +90,9 @@ const valueHtml = computed({
}
})
const imageSelectChange = (image: string[]) => {
image.forEach((url) => {
insertImageFn(url)
const selectChange = (fileUrl: string[]) => {
fileUrl.forEach((url) => {
insertFn(url)
})
}
@@ -102,6 +109,9 @@ const handleCreated = (editor: any) => {
</script>
<style lang="scss">
.w-e-full-screen-container {
z-index: 999;
}
.w-e-text-container [data-slate-editor] ul {
list-style: disc;
}

View File

@@ -45,8 +45,7 @@ export function useCate(type: number) {
}
// 添加分组
const handleAddCate = async () => {
const { value } = await feedback.prompt('', '添加分组')
const handleAddCate = async (value: string) => {
await fileCateAdd({
type,
name: value,
@@ -56,8 +55,7 @@ export function useCate(type: number) {
}
// 编辑分组
const handleEditCate = async (name: string, id: number) => {
const { value } = await feedback.prompt('', '重命分组', { inputValue: name })
const handleEditCate = async (value: string, id: number) => {
await fileCateEdit({
id,
name: value
@@ -180,8 +178,7 @@ export function useFile(
clearSelect()
}
const handleFileRename = async (name: string, id: number) => {
const { value } = await feedback.prompt('', '重命名', { inputValue: name })
const handleFileRename = async (value: string, id: number) => {
await fileRename({
id,
name: value

View File

@@ -24,24 +24,31 @@
<overflow-tooltip :content="data.name" />
</span>
<el-dropdown
v-perms="[
'common:album:cateRename',
'common:album:cateDel'
]"
v-perms="['albums:cateRename', 'albums:cateDel']"
v-if="data.id > 0"
:hide-on-click="false"
>
<span class="muted m-r-10">···</span>
<template #dropdown>
<el-dropdown-menu>
<div
v-perms="['common:album:cateRename']"
@click="handleEditCate(data.name, data.id)"
<popover-input
v-perms="['albums:cateRename']"
@confirm="handleEditCate($event, data.id)"
size="default"
:value="data.name"
width="400px"
:limit="20"
show-limit
teleported
>
<el-dropdown-item>命名分组</el-dropdown-item>
</div>
<div>
<el-dropdown-item>
命名分组
</el-dropdown-item>
</div>
</popover-input>
<div
v-perms="['common:album:cateDel']"
v-perms="['albums:cateDel']"
@click="handleDeleteCate(data.id)"
>
<el-dropdown-item>删除分组</el-dropdown-item>
@@ -57,9 +64,17 @@
</div>
<div class="flex justify-center p-2 border-t border-br">
<el-button @click="handleAddCate" v-perms="['common:album:cateAdd']">
添加分组
</el-button>
<popover-input
v-perms="['albums:cateAdd']"
@confirm="handleAddCate"
size="default"
width="400px"
:limit="20"
show-limit
teleported
>
<el-button> 添加分组 </el-button>
</popover-input>
</div>
</div>
<div class="material__center flex flex-col">
@@ -67,7 +82,7 @@
<div class="flex-1 flex">
<upload
v-if="type == 'image'"
v-perms="['common:upload:image']"
v-perms="['upload:image']"
class="mr-3"
:data="{ cid: cateId }"
:type="type"
@@ -78,7 +93,7 @@
</upload>
<upload
v-if="type == 'video'"
v-perms="['common:upload:video']"
v-perms="['upload:video']"
class="mr-3"
:data="{ cid: cateId }"
:type="type"
@@ -88,7 +103,7 @@
<el-button type="primary">本地上传</el-button>
</upload>
<el-button
v-perms="['common:album:albumDel']"
v-perms="['albums:albumDel']"
v-if="mode == 'page'"
:disabled="!select.length"
@click.stop="batchFileDelete()"
@@ -97,7 +112,7 @@
</el-button>
<popup
v-perms="['common:album:albumMove']"
v-perms="['albums:albumMove']"
v-if="mode == 'page'"
class="ml-3"
@confirm="batchFileMove"
@@ -195,14 +210,18 @@
<overflow-tooltip class="mt-1" :content="item.name" />
<div class="operation-btns flex items-center">
<el-button
v-perms="['common:album:albumRename']"
type="primary"
link
@click="handleFileRename(item.name, item.id)"
<popover-input
v-perms="['albums:albumRename']"
@confirm="handleFileRename($event, item.id)"
size="default"
:value="item.name"
width="400px"
:limit="50"
show-limit
teleported
>
重命名
</el-button>
<el-button type="primary" link> 重命名 </el-button>
</popover-input>
<el-button type="primary" link @click="handlePreview(item.uri)">
查看
</el-button>
@@ -241,21 +260,25 @@
<el-table-column prop="createTime" label="上传时间" min-width="100" />
<el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }">
<div class="inline-block" v-perms="['common:album:albumRename']">
<el-button
type="primary"
link
@click.stop="handleFileRename(row.name, row.id)"
<div class="inline-block" v-perms="['albums:albumRename']">
<popover-input
@confirm="handleFileRename($event, row.id)"
size="default"
:value="row.name"
width="400px"
:limit="50"
show-limit
teleported
>
重命名
</el-button>
<el-button type="primary" link> 重命名 </el-button>
</popover-input>
</div>
<div class="inline-block">
<el-button type="primary" link @click.stop="handlePreview(row.uri)">
查看
</el-button>
</div>
<div class="inline-block" v-perms="['common:album:albumDel']">
<div class="inline-block" v-perms="['albums:albumDel']">
<el-button
type="primary"
link
@@ -289,14 +312,14 @@
</el-checkbox>
</span>
<el-button
v-perms="['common:album:albumDel']"
v-perms="['albums:albumDel']"
:disabled="!select.length"
@click="batchFileDelete()"
>
删除
</el-button>
<popup
v-perms="['common:album:albumMove']"
v-perms="['albums:albumMove']"
class="ml-3 inline"
@confirm="batchFileMove"
:disabled="!select.length"

View File

@@ -83,6 +83,7 @@ import FileItem from './file.vue'
import Material from './index.vue'
import Preview from './preview.vue'
import useAppStore from '@/stores/modules/app'
import { useThrottleFn } from '@vueuse/shared'
export default defineComponent({
components: {
Popup,
@@ -170,17 +171,21 @@ export default defineComponent({
if (limit.value == -1) return null
return limit.value - fileList.value.length
})
const handleConfirm = () => {
const selectUri = select.value.map((item) =>
props.excludeDomain ? item.path : item.uri
)
if (!isAdd.value) {
fileList.value.splice(currentIndex.value, 1, selectUri.shift())
} else {
fileList.value = [...fileList.value, ...selectUri]
}
handleChange()
}
const handleConfirm = useThrottleFn(
() => {
const selectUri = select.value.map((item) =>
props.excludeDomain ? item.path : item.uri
)
if (!isAdd.value) {
fileList.value.splice(currentIndex.value, 1, selectUri.shift())
} else {
fileList.value = [...fileList.value, ...selectUri]
}
handleChange()
},
1000,
false
)
const showPopup = (index: number) => {
if (disabled.value) return
if (index >= 0) {
@@ -214,6 +219,7 @@ export default defineComponent({
const handleClose = () => {
nextTick(() => {
if (props.hiddenUpload) fileList.value = []
materialRef.value?.clearSelect()
})
}

View File

@@ -6,16 +6,18 @@
:width="width"
trigger="contextmenu"
class="popover-input"
:teleported="false"
:teleported="teleported"
:persistent="false"
popper-class="!p-0"
>
<div class="flex">
<div class="flex p-3" @click.stop="">
<div class="popover-input__input mr-[10px] flex-1">
<el-select
class="flex-1"
size="small"
:size="size"
v-if="type == 'select'"
v-model="inputValue"
:teleported="false"
:teleported="teleported"
>
<el-option
v-for="item in options"
@@ -27,14 +29,17 @@
<el-input
v-else
v-model.trim="inputValue"
:maxlength="limit"
:show-word-limit="showLimit"
:type="type"
size="small"
:size="size"
clearable
:placeholder="placeholder"
/>
</div>
<div class="popover-input__btns flex-none">
<el-button link @click="visible = false">取消</el-button>
<el-button type="primary" size="small" @click="handleConfirm">确定</el-button>
<el-button link @click="close">取消</el-button>
<el-button type="primary" :size="size" @click="handleConfirm">确定</el-button>
</div>
</div>
<template #reference>
@@ -60,7 +65,7 @@ const props = defineProps({
},
width: {
type: [Number, String],
default: 250
default: '300px'
},
placeholder: String,
disabled: {
@@ -70,6 +75,22 @@ const props = defineProps({
options: {
type: Array as PropType<any[]>,
default: () => []
},
size: {
type: String as PropType<'default' | 'small' | 'large'>,
default: 'default'
},
limit: {
type: Number,
default: 200
},
showLimit: {
type: Boolean,
default: false
},
teleported: {
type: Boolean,
default: true
}
})
const emit = defineEmits(['confirm'])
@@ -99,7 +120,8 @@ watch(
immediate: true
}
)
useEventListener(document.body, 'click', () => {
useEventListener(document.documentElement, 'click', () => {
if (inPopover.value) return
close()
})

View File

@@ -12,6 +12,7 @@
:on-success="handleSuccess"
:on-exceed="handleExceed"
:on-error="handleError"
:accept="getAccept"
>
<slot></slot>
</el-upload>
@@ -78,7 +79,7 @@ export default defineComponent({
setup(props, { emit }) {
const userStore = useUserStore()
const uploadRefs = shallowRef<InstanceType<typeof ElUpload>>()
const action = ref(`${config.baseUrl}${config.urlPrefix}/common/upload/${props.type}`)
const action = ref(`${config.baseUrl}${config.urlPrefix}/upload/${props.type}`)
const headers = computed(() => ({
token: userStore.token,
version: config.version
@@ -110,18 +111,30 @@ export default defineComponent({
emit('error')
}
const handleExceed = () => {
feedback.msgError('超出上传上限,请重新上传')
feedback.msgError(`超出上传上限${props.limit},请重新上传`)
}
const handleClose = () => {
uploadRefs.value?.clearFiles()
visible.value = false
}
const getAccept = computed(() => {
switch (props.type) {
case 'image':
return '.jpj,.png,.gif,.jpeg,.ico,.bmp'
case 'video':
return '.wmv,.avi,.mov,.mp4,.flv,.rmvb'
default:
return '*'
}
})
return {
uploadRefs,
action,
headers,
visible,
fileList,
getAccept,
handleProgress,
handleSuccess,
handleError,

View File

@@ -1,8 +1,8 @@
const config = {
terminal: 1, //终端
title: '后台管理系统', //网站默认标题
version: '1.2.0', //版本号
baseUrl: `${import.meta.env.VITE_APP_BASE_URL}/`, //请求接口域名
version: '1.3.3', //版本号
baseUrl: `${import.meta.env.VITE_APP_BASE_URL || ''}/`, //请求接口域名
urlPrefix: 'api', //请求默认前缀
timeout: 10 * 1000 //请求超时时长
}

View File

@@ -1,4 +1,7 @@
const defaultSetting = {
showCrumb: true, // 是否显示面包屑
showLogo: true, // 是否显示logo
isUniqueOpened: false, //只展开一个一级菜单
sideWidth: 200, //侧边栏宽度
sideTheme: 'light', //侧边栏主题
sideDarkColor: '#1d2124', //侧边栏深色主题颜色

View File

@@ -8,7 +8,7 @@
<div class="navbar-item">
<refresh />
</div>
<div class="flex items-center px-2" v-if="!isMobile">
<div class="flex items-center px-2" v-if="!isMobile && settingStore.showCrumb">
<breadcrumb />
</div>
</div>

View File

@@ -47,9 +47,33 @@
/>
</div>
</div>
<div class="setting-item mb-5">
<div class="text-tx-secondary mb-4">菜单栏宽度</div>
<div><el-input-number v-model="sideWidth" :min="180" :max="250" /></div>
<div class="setting-item mb-5 flex justify-between items-center">
<span class="text-tx-secondary">只展开一个一级菜单</span>
<div>
<el-switch
v-model="isUniqueOpened"
:active-value="true"
:inactive-value="false"
/>
</div>
</div>
<div class="setting-item mb-5 flex justify-between items-center">
<div class="text-tx-secondary flex-none mr-3">菜单栏宽度</div>
<div>
<el-input-number v-model="sideWidth" :min="180" :max="250" />
</div>
</div>
<div class="setting-item mb-5 flex justify-between items-center">
<div class="text-tx-secondary flex-none mr-3">显示LOGO</div>
<div>
<el-switch v-model="showLogo" :active-value="true" :inactive-value="false" />
</div>
</div>
<div class="setting-item mb-5 flex justify-between items-center">
<div class="text-tx-secondary flex-none mr-3">显示面包屑</div>
<div>
<el-switch v-model="showCrumb" :active-value="true" :inactive-value="false" />
</div>
</div>
<div class="setting-item mb-5 flex justify-between items-center">
<el-button @click="resetTheme">重置主题</el-button>
@@ -101,6 +125,18 @@ const openMultipleTabs = computed({
}
})
const isUniqueOpened = computed({
get() {
return settingStore.isUniqueOpened
},
set(value) {
settingStore.setSetting({
key: 'isUniqueOpened',
value
})
}
})
const sideWidth = computed({
get() {
return settingStore.sideWidth
@@ -136,6 +172,30 @@ const theme = computed({
}
})
const showLogo = computed({
get() {
return settingStore.showLogo
},
set(value) {
settingStore.setSetting({
key: 'showLogo',
value
})
}
})
const showCrumb = computed({
get() {
return settingStore.showCrumb
},
set(value) {
settingStore.setSetting({
key: 'showCrumb',
value
})
}
})
const isDark = useDark()
const themeChange = () => {
settingStore.setTheme(isDark.value)

View File

@@ -10,7 +10,7 @@
:default-active="activeMenu"
:collapse="isCollapsed"
mode="vertical"
:unique-opened="true"
:unique-opened="uniqueOpened"
@select="$emit('select')"
>
<menu-item
@@ -41,6 +41,10 @@ const props = defineProps({
type: Boolean,
default: false
},
uniqueOpened: {
type: Boolean,
default: false
},
theme: {
type: String
},

View File

@@ -1,10 +1,11 @@
<template>
<div class="side" :style="sideStyle">
<side-logo :show-title="!isCollapsed" :theme="sideTheme" />
<side-logo v-if="settingStore.showLogo" :show-title="!isCollapsed" :theme="sideTheme" />
<side-menu
:routes="routes"
:isCollapsed="isCollapsed"
:width="settingStore.sideWidth"
:unique-opened="settingStore.isUniqueOpened"
:config="menuProp"
:theme="sideTheme"
@select="handleSelect"

View File

@@ -26,7 +26,10 @@ router.beforeEach(async (to, from, next) => {
document.title = to.meta.title ?? config.title
const userStore = useUserStore()
const tabsStore = useTabsStore()
if (userStore.token) {
if (whiteList.includes(to.path)) {
// 在免登录白名单,直接进入
next()
} else if (userStore.token) {
// 获取用户信息
const hasGetUserInfo = Object.keys(userStore.userInfo).length !== 0
if (hasGetUserInfo) {
@@ -44,7 +47,7 @@ router.beforeEach(async (to, from, next) => {
const routeName = findFirstValidRoute(routes)
// 没有有效路由跳转到403页面
if (!routeName) {
await userStore.logout()
clearAuthInfo()
next(PageEnum.ERROR_403)
return
}
@@ -71,9 +74,6 @@ router.beforeEach(async (to, from, next) => {
next({ path: loginPath, query: { redirect: to.fullPath } })
}
}
} else if (whiteList.includes(to.path)) {
// 在免登录白名单,直接进入
next()
} else {
next({ path: loginPath, query: { redirect: to.fullPath } })
}

View File

@@ -28,6 +28,11 @@ const useUserStore = defineStore({
}),
getters: {},
actions: {
resetState() {
this.token = ''
this.userInfo = {}
this.perms = []
},
login(playload: any) {
const { account, password } = playload
return new Promise((resolve, reject) => {

View File

@@ -91,7 +91,7 @@
--el-messagebox-width: 350px;
}
.el-date-editor {
--el-date-editor-width: 235px;
--el-date-editor-width: 280px;
.el-range-input {
font-size: var(--el-font-size-small);
}

View File

@@ -11,7 +11,7 @@ export function getToken() {
export function clearAuthInfo() {
const userStore = useUserStore()
const tabsStore = useTabsStore()
userStore.$reset()
userStore.resetState()
tabsStore.$reset()
cache.remove(TOKEN_KEY)
resetRouter()

View File

@@ -72,10 +72,9 @@ export class Axios {
}
if (err.code == AxiosError.ECONNABORTED || err.code == AxiosError.ERR_NETWORK) {
setTimeout(() => {
console.log(err)
return new Promise((resolve) => setTimeout(resolve, 500)).then(() =>
this.retryRequest(err)
}, 500)
)
}
return Promise.reject(err)
}
@@ -103,17 +102,17 @@ export class Axios {
retryRequest(error: AxiosError) {
const config = error.config
const { retryCount, isOpenRetry } = config.requestOptions
if (!isOpenRetry && config.method?.toUpperCase() == RequestMethodsEnum.POST) {
return
if (!isOpenRetry || config.method?.toUpperCase() == RequestMethodsEnum.POST) {
return Promise.reject(error)
}
config.retryCount = config.retryCount ?? 0
if (config.retryCount >= retryCount) {
return
return Promise.reject(error)
}
config.retryCount++
this.axiosInstance.request(config)
return this.axiosInstance.request(config)
}
/**
* @description get请求

View File

@@ -21,7 +21,7 @@ const axiosHooks: AxiosHooks = {
// 添加token
if (withToken) {
const token = getToken()
headers.token = token
headers['like-admin'] = token
}
// POST请求下如果无data则将params视为data
if (

View File

@@ -160,3 +160,12 @@ export const getNonDuplicateID = (length = 8) => {
idStr += Math.random().toString(36).substring(3, length)
return idStr
}
/**
* @description 单词首字母大写
* @param { String } str
* @return { String } id
*/
export const firstToUpperCase = (str = '') => {
return str.toLowerCase().replace(/( |^)[a-z]/g, ($1) => $1.toUpperCase())
}

View File

@@ -17,7 +17,7 @@
@keyup.enter="handleEnter"
>
<template #prepend>
<icon name="el-icon-Avatar" />
<icon name="el-icon-User" />
</template>
</el-input>
</el-form-item>
@@ -99,7 +99,7 @@ const handleLogin = async () => {
// 记住账号,缓存
cache.set(ACCOUNT_KEY, {
remember: remAccount.value,
account: formData.account
account: remAccount.value ? formData.account : ''
})
await userStore.login(formData)
const {

View File

@@ -14,7 +14,7 @@
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" :min="0" />
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
<div class="form-tips">默认为0 数值越大越排前</div>
</div>
</el-form-item>

View File

@@ -81,7 +81,7 @@
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" :min="0" />
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
<div class="form-tips">默认为0 数值越大越排前</div>
</div>
</el-form-item>

View File

@@ -4,14 +4,14 @@
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
<el-form-item label="文章标题">
<el-input
class="w-56"
class="w-[280px]"
v-model="queryParams.title"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item label="栏目名称">
<el-select class="w-56" v-model="queryParams.cid">
<el-select class="w-[280px]" v-model="queryParams.cid">
<el-option label="全部" value />
<el-option
v-for="item in optionsData.articleCate"
@@ -22,7 +22,7 @@
</el-select>
</el-form-item>
<el-form-item label="文章状态">
<el-select class="w-56" v-model="queryParams.isShow">
<el-select class="w-[280px]" v-model="queryParams.isShow">
<el-option label="全部" value />
<el-option label="显示" :value="1" />
<el-option label="隐藏" :value="0" />
@@ -37,9 +37,9 @@
<el-card class="!border-none mt-4" shadow="never">
<div>
<router-link
v-perms="['article:add']"
v-perms="['article:add', 'article:add/edit']"
:to="{
path: getRoutePath('article:edit')
path: getRoutePath('article:add/edit')
}"
>
<el-button type="primary" class="mb-4">
@@ -89,10 +89,10 @@
<el-table-column label="发布时间" prop="createTime" min-width="120" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['article:edit']" type="primary" link>
<el-button v-perms="['article:edit','article:add/edit']" type="primary" link>
<router-link
:to="{
path: getRoutePath('article:edit'),
path: getRoutePath('article:add/edit'),
query: {
id: row.id
}

View File

@@ -44,6 +44,12 @@ export const rules = reactive<FormRules>({
required: true,
message: '必填项不能为空',
trigger: ['blur', 'change']
},
{
pattern:
/^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([A-Za-z0-9-~]+)\.)+([A-Za-z0-9-~\/])+$/,
message: '请输入合法的网址链接',
trigger: ['blur', 'change']
}
],
appId: [
@@ -121,7 +127,6 @@ export const useMenuOa = (ref: any) => {
await refs[i].menuFormRef.validate()
} catch (error) {
menuIndex.value = i
feedback.msgError(`菜单${i + 1}必填项不能为空~`)
return
}
}
@@ -137,7 +142,6 @@ export const useMenuOa = (ref: any) => {
await refs[i].menuFormRef.validate()
} catch (error) {
menuIndex.value = i
feedback.msgError(`菜单${i + 1}必填项不能为空~`)
return
}
}

View File

@@ -10,24 +10,30 @@
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button class="mb-4" type="primary" @click="handleAdd()">
<el-button
v-perms="['channel:oaReplyDefault:add']"
class="mb-4"
type="primary"
@click="handleAdd()"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
</div>
<el-table size="large" :data="lists">
<el-table size="large" :data="pager.lists" v-loading="pager.loading">
<el-table-column label="规则名称" prop="name" min-width="120" />
<el-table-column label="回复类型" min-width="120">
<template #default="{ row }">
{{ getContentType(1) }}
{{ getContentType(row.contentType) }}
</template>
</el-table-column>
<el-table-column label="回复内容" prop="content" min-width="120" />
<el-table-column label="状态" min-width="120">
<template #default="{ row }">
<el-switch
v-perms="['channel:oaReplyDefault:status']"
v-model="row.status"
:active-value="1"
:inactive-value="0"
@@ -38,25 +44,40 @@
<el-table-column label="排序" prop="sort" min-width="120" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button type="primary" link @click="handleEdit(row)"> 编辑 </el-button>
<el-button type="danger" link @click="handleDelete(row.id)">
<el-button
v-perms="['channel:oaReplyDefault:edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['channel:oaReplyDefault:del']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup>
import { oaReplyDel, getOaReplyList, changeOaReplyStatus } from '@/api/channel/wx_oa'
import { usePaging } from '@/hooks/usePaging'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const showEdit = ref(false)
const lists = ref()
const type = 'default'
const getContentType = computed(() => {
return (val: number) => {
switch (val) {
@@ -66,33 +87,36 @@ const getContentType = computed(() => {
}
})
const getLists = async () => {
lists.value = await getOaReplyList({ type: 'default' })
}
const { pager, getLists } = usePaging({
fetchFun: getOaReplyList,
params: {
type
}
})
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add', 'default')
editRef.value?.open('add', type)
}
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit', 'default')
editRef.value?.open('edit', type)
editRef.value?.getDetail(data)
}
const handleDelete = async (id: number) => {
await feedback.confirm('确定要删除?')
await oaReplyDel({ id })
await oaReplyDel({ id, type })
feedback.msgSuccess('删除成功')
getLists()
}
const changeStatus = async (id: number) => {
try {
await changeOaReplyStatus({ id })
await changeOaReplyStatus({ id, type })
feedback.msgSuccess('修改成功')
getLists()
} catch (error) {

View File

@@ -5,7 +5,6 @@
:title="popupTitle"
:async="true"
width="500px"
:clickModalClose="true"
@confirm="handleSubmit"
@close="handleClose"
>
@@ -72,7 +71,7 @@
</el-form-item> -->
<el-form-item label="排序">
<div class="flex-1">
<el-input v-model="formData.sort" placeholder="请输入" />
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
</div>
</el-form-item>
<el-form-item label="启用状态">
@@ -172,7 +171,8 @@ const setFormData = (data: Record<any, any>) => {
const getDetail = async (row: Record<string, any>) => {
const data = await getOaReplyDetail({
id: row.id
id: row.id,
type: formData.type
})
setFormData(data)
}

View File

@@ -10,14 +10,19 @@
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button class="mb-4" type="primary" @click="handleAdd()">
<el-button
v-perms="['channel:oaReplyFollow:add']"
class="mb-4"
type="primary"
@click="handleAdd()"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
</div>
<el-table size="large" :data="lists">
<el-table size="large" :data="pager.lists" v-loading="pager.loading">
<el-table-column label="规则名称" prop="name" min-width="120" />
<el-table-column label="回复类型" min-width="120">
<template #default="{ row }">
@@ -28,6 +33,7 @@
<el-table-column label="状态" min-width="120">
<template #default="{ row }">
<el-switch
v-perms="['channel:oaReplyFollow:status']"
v-model="row.status"
:active-value="1"
:inactive-value="0"
@@ -38,25 +44,41 @@
<el-table-column label="排序" prop="sort" min-width="120" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button type="primary" link @click="handleEdit(row)"> 编辑 </el-button>
<el-button type="danger" link @click="handleDelete(row.id)">
<el-button
v-perms="['channel:oaReplyFollow:edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['channel:oaReplyFollow:del']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup>
import { oaReplyDel, getOaReplyList, changeOaReplyStatus } from '@/api/channel/wx_oa'
import { usePaging } from '@/hooks/usePaging'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const showEdit = ref(false)
const lists = ref()
const type = 'follow'
const getContentType = computed(() => {
return (val: number) => {
switch (val) {
@@ -66,33 +88,36 @@ const getContentType = computed(() => {
}
})
const getLists = async () => {
lists.value = await getOaReplyList({ type: 'follow' })
}
const { pager, getLists } = usePaging({
fetchFun: getOaReplyList,
params: {
type
}
})
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add', 'follow')
editRef.value?.open('add', type)
}
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit', 'follow')
editRef.value?.open('edit', type)
editRef.value?.getDetail(data)
}
const handleDelete = async (id: number) => {
await feedback.confirm('确定要删除?')
await oaReplyDel({ id })
await oaReplyDel({ id, type })
feedback.msgSuccess('删除成功')
getLists()
}
const changeStatus = async (id: number) => {
try {
await changeOaReplyStatus({ id })
await changeOaReplyStatus({ id, type })
feedback.msgSuccess('修改成功')
getLists()
} catch (error) {

View File

@@ -10,14 +10,19 @@
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button class="mb-4" type="primary" @click="handleAdd()">
<el-button
v-perms="['channel:oaReplyKeyword:add']"
class="mb-4"
type="primary"
@click="handleAdd()"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
</div>
<el-table size="large" :data="lists">
<el-table size="large" :data="pager.lists" v-loading="pager.loading">
<el-table-column label="规则名称" prop="name" min-width="120" />
<el-table-column label="关键词" prop="keyword" min-width="120" />
@@ -34,6 +39,7 @@
<el-table-column label="状态" min-width="120">
<template #default="{ row }">
<el-switch
v-perms="['channel:oaReplyKeyword:status']"
v-model="row.status"
:active-value="1"
:inactive-value="0"
@@ -44,24 +50,39 @@
<el-table-column label="排序" prop="sort" min-width="120" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button type="primary" link @click="handleEdit(row)"> 编辑 </el-button>
<el-button type="danger" link @click="handleDelete(row.id)">
<el-button
v-perms="['channel:oaReplyKeyword:edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['channel:oaReplyKeyword:del']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup>
import { oaReplyDel, getOaReplyList, changeOaReplyStatus } from '@/api/channel/wx_oa'
import { usePaging } from '@/hooks/usePaging'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const showEdit = ref(false)
const lists = ref()
const getMatchingType = computed(() => {
return (val: number) => {
@@ -82,34 +103,37 @@ const getContentType = computed(() => {
}
}
})
const getLists = async () => {
lists.value = await getOaReplyList({ type: 'keyword' })
}
const type = 'keyword'
const { pager, getLists } = usePaging({
fetchFun: getOaReplyList,
params: {
type
}
})
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add', 'keyword')
editRef.value?.open('add', type)
}
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit', 'keyword')
editRef.value?.open('edit', type)
editRef.value?.getDetail(data)
}
const handleDelete = async (id: number) => {
await feedback.confirm('确定要删除?')
await oaReplyDel({ id })
await oaReplyDel({ id, type })
feedback.msgSuccess('删除成功')
getLists()
}
const changeStatus = async (id: number) => {
try {
await changeOaReplyStatus({ id })
await changeOaReplyStatus({ id, type })
feedback.msgSuccess('修改成功')
getLists()
} catch (error) {

View File

@@ -15,7 +15,11 @@
</el-form-item>
<el-form-item label="账号:">
{{ formData.username }}
<popover-input class="ml-[10px]" @confirm="handleEdit($event, 'username')">
<popover-input
class="ml-[10px]"
:limit="32"
@confirm="handleEdit($event, 'username')"
>
<el-button type="primary" link v-perms="['user:edit']">
<icon name="el-icon-EditPen" />
</el-button>
@@ -23,7 +27,11 @@
</el-form-item>
<el-form-item label="真实姓名:">
{{ formData.realName || '-' }}
<popover-input class="ml-[10px]" @confirm="handleEdit($event, 'realName')">
<popover-input
class="ml-[10px]"
:limit="32"
@confirm="handleEdit($event, 'realName')"
>
<el-button type="primary" link v-perms="['user:edit']">
<icon name="el-icon-EditPen" />
</el-button>

View File

@@ -4,7 +4,7 @@
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
<el-form-item label="用户信息">
<el-input
class="w-56"
class="w-[280px]"
v-model="queryParams.keyword"
placeholder="用户编号/昵称/手机号码"
clearable
@@ -18,7 +18,7 @@
/>
</el-form-item>
<el-form-item label="注册来源">
<el-select class="w-56" v-model="queryParams.channel">
<el-select class="w-[280px]" v-model="queryParams.channel">
<el-option
v-for="(item, key) in ClientMap"
:key="key"

View File

@@ -1,37 +1,36 @@
<template>
<div>
<div>
<del-wrap
class="max-w-[400px]"
v-for="(item, index) in modelValue"
:key="index"
@close="handleDelete(index)"
>
<div class="bg-fill-light flex items-center w-full p-4 mb-4">
<material-picker
v-model="item.image"
upload-class="bg-body"
size="60px"
exclude-domain
>
<template #upload>
<div class="upload-btn w-[60px] h-[60px]">
<icon name="el-icon-Plus" :size="20" />
<draggable class="draggable" v-model="navLists" animation="300">
<template v-slot:item="{ element: item, index }">
<del-wrap class="max-w-[400px]" :key="index" @close="handleDelete(index)">
<div class="bg-fill-light flex items-center w-full p-4 mb-4 cursor-move">
<material-picker
v-model="item.image"
upload-class="bg-body"
size="60px"
exclude-domain
>
<template #upload>
<div class="upload-btn w-[60px] h-[60px]">
<icon name="el-icon-Plus" :size="20" />
</div>
</template>
</material-picker>
<div class="ml-3 flex-1">
<div class="flex">
<span class="text-tx-regular flex-none mr-3">名称</span>
<el-input v-model="item.name" placeholder="请输入名称" />
</div>
<div class="flex mt-[18px]">
<span class="text-tx-regular flex-none mr-3">链接</span>
<link-picker v-model="item.link" />
</div>
</div>
</template>
</material-picker>
<div class="ml-3 flex-1">
<div class="flex">
<span class="text-tx-regular flex-none mr-3">名称</span>
<el-input v-model="item.name" placeholder="请输入名称" />
</div>
<div class="flex mt-[18px]">
<span class="text-tx-regular flex-none mr-3">链接</span>
<link-picker v-model="item.link" />
</div>
</div>
</div>
</del-wrap>
</del-wrap>
</template>
</draggable>
</div>
<div>
<el-button type="primary" @click="handleAdd">添加</el-button>
@@ -41,7 +40,7 @@
<script lang="ts" setup>
import feedback from '@/utils/feedback'
import type { PropType } from 'vue'
import Draggable from 'vuedraggable'
const props = defineProps({
modelValue: {
type: Array as PropType<any[]>,
@@ -57,9 +56,19 @@ const props = defineProps({
}
})
const emit = defineEmits(['update:modelValue'])
const navLists = computed({
get() {
return props.modelValue
},
set(value) {
emit('update:modelValue', value)
}
})
const handleAdd = () => {
if (props.modelValue?.length < props.max) {
props.modelValue.push({
navLists.value.push({
image: '',
name: '导航名称',
link: {}
@@ -72,7 +81,7 @@ const handleDelete = (index: number) => {
if (props.modelValue?.length <= props.min) {
return feedback.msgError(`最少保留${props.min}`)
}
props.modelValue.splice(index, 1)
navLists.value.splice(index, 1)
}
</script>

View File

@@ -1,7 +1,7 @@
<template>
<div>
<el-form label-width="70px">
<el-form-item label="是否启用">
<el-form-item label="是否启用" v-if="type == 'mobile'">
<el-radio-group v-model="content.enabled">
<el-radio :label="1">开启</el-radio>
<el-radio :label="0">停用</el-radio>
@@ -10,28 +10,36 @@
<el-form-item label="图片设置">
<div class="flex-1">
<div class="form-tips">最多添加5张建议图片尺寸750px*340px</div>
<del-wrap
v-for="(item, index) in content.data"
:key="index"
@close="handleDelete(index)"
class="max-w-[400px]"
>
<div class="bg-fill-light flex items-center w-full p-4 mt-4">
<material-picker
v-model="item.image"
upload-class="bg-body"
exclude-domain
/>
<div class="ml-3 flex-1">
<el-form-item label="图片名称">
<el-input v-model="item.name" placeholder="请输入名称" />
</el-form-item>
<el-form-item class="mt-[18px]" label="图片链接">
<link-picker v-model="item.link" />
</el-form-item>
</div>
</div>
</del-wrap>
<draggable class="draggable" v-model="content.data" animation="300">
<template v-slot:item="{ element: item, index }">
<del-wrap
:key="index"
@close="handleDelete(index)"
class="max-w-[400px]"
>
<div
class="bg-fill-light flex items-center w-full p-4 mt-4 cursor-move"
>
<material-picker
v-model="item.image"
upload-class="bg-body"
exclude-domain
/>
<div class="ml-3 flex-1">
<el-form-item label="图片名称">
<el-input
v-model="item.name"
placeholder="请输入名称"
/>
</el-form-item>
<el-form-item class="mt-[18px]" label="图片链接">
<link-picker v-model="item.link" />
</el-form-item>
</div>
</div>
</del-wrap>
</template>
</draggable>
</div>
</el-form-item>
<el-form-item v-if="content.data?.length < limit">
@@ -44,6 +52,7 @@
import feedback from '@/utils/feedback'
import type { PropType } from 'vue'
import type options from './options'
import Draggable from 'vuedraggable'
const limit = 5
type OptionsType = ReturnType<typeof options>
const props = defineProps({

View File

@@ -10,28 +10,36 @@
<el-form-item label="图片设置">
<div class="flex-1">
<div class="form-tips">最多添加5张建议图片尺寸750px*200px</div>
<del-wrap
v-for="(item, index) in content.data"
:key="index"
@close="handleDelete(index)"
class="max-w-[400px]"
>
<div class="bg-fill-light flex items-center w-full p-4 mt-4">
<material-picker
v-model="item.image"
upload-class="bg-body"
exclude-domain
/>
<div class="ml-3 flex-1">
<el-form-item label="图片名称">
<el-input v-model="item.name" placeholder="请输入名称" />
</el-form-item>
<el-form-item class="mt-[18px]" label="图片链接">
<link-picker v-model="item.link" />
</el-form-item>
</div>
</div>
</del-wrap>
<draggable class="draggable" v-model="content.data" animation="300">
<template v-slot:item="{ element: item, index }">
<del-wrap
:key="index"
@close="handleDelete(index)"
class="max-w-[400px]"
>
<div
class="bg-fill-light flex items-center w-full p-4 mt-4 cursor-move"
>
<material-picker
v-model="item.image"
upload-class="bg-body"
exclude-domain
/>
<div class="ml-3 flex-1">
<el-form-item label="图片名称">
<el-input
v-model="item.name"
placeholder="请输入名称"
/>
</el-form-item>
<el-form-item class="mt-[18px]" label="图片链接">
<link-picker v-model="item.link" />
</el-form-item>
</div>
</div>
</del-wrap>
</template>
</draggable>
</div>
</el-form-item>
<el-form-item v-if="content.data?.length < limit">
@@ -44,6 +52,7 @@
import feedback from '@/utils/feedback'
import type { PropType } from 'vue'
import type options from './options'
import Draggable from 'vuedraggable'
const limit = 5
type OptionsType = ReturnType<typeof options>
const props = defineProps({

View File

@@ -47,7 +47,7 @@ const menus: Record<
[pagesTypeEnum.HOME]: {
id: 1,
pageType: 1,
name: '商城首页',
name: '首页装修',
pageData: generatePageData(['search', 'banner', 'nav', 'news'])
},
[pagesTypeEnum.USER]: {

View File

@@ -188,7 +188,7 @@ const onMove = (e: any) => {
const getData = async () => {
const data = await getDecorateTabbar()
tabbar.list = data.list.map((item: any) => ({ ...item, link: JSON.parse(item.link) }))
tabbar.list = data.list
tabbar.style = data.style
}
const setData = async () => {

View File

@@ -4,7 +4,7 @@
<el-form class="mb-[-16px]" :model="formData" inline>
<el-form-item label="表名称">
<el-input
class="w-56"
class="w-[280px]"
v-model="formData.tableName"
clearable
@keyup.enter="resetPage"
@@ -12,7 +12,7 @@
</el-form-item>
<el-form-item label="表描述">
<el-input
class="w-56"
class="w-[280px]"
v-model="formData.tableComment"
clearable
@keyup.enter="resetPage"

View File

@@ -14,7 +14,7 @@
<el-form class="ls-form" :model="formData" inline>
<el-form-item label="表名称">
<el-input
class="w-56"
class="w-[280px]"
v-model="formData.tableName"
clearable
@keyup.enter="resetPage"
@@ -22,7 +22,7 @@
</el-form-item>
<el-form-item label="表描述">
<el-input
class="w-56"
class="w-[280px]"
v-model="formData.tableComment"
clearable
@keyup.enter="resetPage"

View File

@@ -1,10 +1,12 @@
<template>
<div class="error404">
<error
code="403"
title="您的账号权限不足,请联系管理员添加权限!"
:show-btn="false"
></error>
<error code="403" title="您的账号权限不足,请联系管理员添加权限!" :show-btn="false">
<template #content>
<div class="flex justify-center">
<img class="w-[150px] h-[150px]" src="@/assets/images/no_perms.png" alt="" />
</div>
</template>
</error>
</div>
</template>

View File

@@ -1,8 +1,10 @@
<template>
<div class="error">
<div>
<div class="error-code">{{ code }}</div>
<div class="lg lighter mt-7 mb-7">{{ title }}</div>
<slot name="content">
<div class="error-code">{{ code }}</div>
</slot>
<div class="text-lg text-tx-secondary mt-7 mb-7">{{ title }}</div>
<el-button v-if="showBtn" type="primary" @click="router.go(-1)">
{{ second }} 秒后返回上一页
</el-button>

View File

@@ -1,7 +1,7 @@
<template>
<div>
<el-card class="!border-none" shadow="never">
<el-page-header content="编辑通知设置" @back="$router.back()" />
<el-page-header :content="$route.meta.title" @back="$router.back()" />
</el-card>
<el-form
ref="formRef"
@@ -42,11 +42,9 @@
/>
</div>
<div class="form-tips">
可选变量 用户昵称:nickname 订单编号:order_sn 支付时间:pay_time
<br />
示例亲爱的${nickname}您的订单${order_sn}已支付成功商家正在快马加鞭为您安排发货
<br />
生效条件1管理后台完成短信设置2第三方短信平台申请模板
<div v-for="(item, index) in formData.smsNotice.tips" :key="index">
{{ item }}
</div>
</div>
</div>
</el-form-item>
@@ -76,7 +74,8 @@ const formData = reactive({
smsNotice: {
status: 0,
templateId: '',
content: ''
content: '',
tips: []
}
})

View File

@@ -26,17 +26,27 @@
/>
</el-form-item>
<el-form-item label="部门名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入部门名称" clearable />
<el-input
v-model="formData.name"
placeholder="请输入部门名称"
clearable
:maxlength="100"
/>
</el-form-item>
<el-form-item label="负责人" prop="duty">
<el-input v-model="formData.duty" placeholder="请输入负责人姓名" clearable />
<el-input
v-model="formData.duty"
placeholder="请输入负责人姓名"
clearable
:maxlength="30"
/>
</el-form-item>
<el-form-item label="联系电话" prop="mobile">
<el-input v-model="formData.mobile" placeholder="请输入联系电话" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" :min="0" />
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
<div class="form-tips">默认为0 数值越大越排前</div>
</div>
</el-form-item>

View File

@@ -4,14 +4,14 @@
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
<el-form-item label="部门名称" prop="name">
<el-input
class="w-56"
class="w-[280px]"
v-model="queryParams.name"
clearable
@keyup.enter="getLists"
/>
</el-form-item>
<el-form-item label="部门状态" prop="isStop">
<el-select class="w-56" v-model="queryParams.isStop">
<el-select class="w-[280px]" v-model="queryParams.isStop">
<el-option label="全部" value />
<el-option label="正常" value="0" />
<el-option label="停用" value="1" />

View File

@@ -10,14 +10,19 @@
>
<el-form ref="formRef" :model="formData" label-width="84px" :rules="formRules">
<el-form-item label="岗位名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入岗位名称" clearable />
<el-input
v-model="formData.name"
placeholder="请输入岗位名称"
clearable
:maxlength="100"
/>
</el-form-item>
<el-form-item label="岗位编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入岗位编码" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" :min="0" />
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
<div class="form-tips">默认为0 数值越大越排前</div>
</div>
</el-form-item>

View File

@@ -4,7 +4,7 @@
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
<el-form-item label="岗位编码">
<el-input
class="w-56"
class="w-[280px]"
v-model="queryParams.code"
clearable
@keyup.enter="resetPage"
@@ -12,14 +12,14 @@
</el-form-item>
<el-form-item label="岗位名称">
<el-input
class="w-56"
class="w-[280px]"
v-model="queryParams.name"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item label="岗位状态">
<el-select class="w-56" v-model="queryParams.isStop">
<el-select class="w-[280px]" v-model="queryParams.isStop">
<el-option label="全部" value />
<el-option label="正常" :value="0" />
<el-option label="停用" :value="1" />

View File

@@ -39,7 +39,7 @@
value: 'id',
label: 'name',
disabled(data: any) {
return data.isStop
return !!data.isStop
}
}"
check-strictly
@@ -76,7 +76,7 @@
v-for="(item, index) in optionsData.role"
:key="index"
:label="item.name"
:value="String(item.id)"
:value="item.id"
/>
</el-select>
</el-form-item>

View File

@@ -5,7 +5,7 @@
<el-form-item label="管理员账号">
<el-input
v-model="formData.username"
class="w-56"
class="w-[280px]"
clearable
@keyup.enter="resetPage"
/>
@@ -13,13 +13,13 @@
<el-form-item label="管理员名称">
<el-input
v-model="formData.nickname"
class="w-56"
class="w-[280px]"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item label="管理员角色">
<el-select class="w-56" v-model="formData.role">
<el-select class="w-[280px]" v-model="formData.role">
<el-option label="全部" value="" />
<el-option
v-for="(item, index) in optionsData.role"

View File

@@ -166,7 +166,7 @@
</el-form-item>
<el-form-item label="菜单排序" prop="menuSort">
<div>
<el-input-number v-model="formData.menuSort" />
<el-input-number v-model="formData.menuSort" :max="9999" />
<div class="form-tips">数值越大越排前</div>
</div>
</el-form-item>

View File

@@ -31,7 +31,7 @@
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" :min="0" />
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
<div class="form-tips">数值越大越排前</div>
</div>
</el-form-item>

View File

@@ -4,7 +4,7 @@
<el-page-header class="mb-4" content="数据管理" @back="$router.back()" />
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="字典名称">
<el-select class="w-56" v-model="queryParams.dictType" @change="getLists">
<el-select class="w-[280px]" v-model="queryParams.dictType" @change="getLists">
<el-option
v-for="item in optionsData.dictType"
:label="item.dictName"
@@ -15,14 +15,14 @@
</el-form-item>
<el-form-item label="数据名称">
<el-input
class="w-56"
class="w-[280px]"
v-model="queryParams.name"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item label="数据状态">
<el-select class="w-56" v-model="queryParams.status">
<el-select class="w-[280px]" v-model="queryParams.status">
<el-option label="全部" value />
<el-option label="正常" :value="1" />
<el-option label="停用" :value="0" />

View File

@@ -4,7 +4,7 @@
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="字典名称">
<el-input
class="w-56"
class="w-[280px]"
v-model="queryParams.dictName"
clearable
@keyup.enter="resetPage"
@@ -12,14 +12,14 @@
</el-form-item>
<el-form-item label="字典类型">
<el-input
class="w-56"
class="w-[280px]"
v-model="queryParams.dictType"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item label="状态">
<el-select class="w-56" v-model="queryParams.dictStatus">
<el-select class="w-[280px]" v-model="queryParams.dictStatus">
<el-option label="全部" value />
<el-option label="正常" :value="1" />
<el-option label="停用" :value="0" />

View File

@@ -9,7 +9,7 @@
<el-radio :label="0">关闭</el-radio>
</el-radio-group>
<div class="form-tips">默认开关闭则前端不显示该功能</div>
<div class="form-tips">默认开关闭则前端不显示该功能</div>
</div>
</el-form-item>
</el-form>
@@ -27,7 +27,13 @@
<el-table size="large" :data="formData.list">
<el-table-column label="关键词" prop="describe" min-width="200">
<template #default="{ row }">
<el-input v-model="row.name" clearable maxlength="30" />
<el-input
v-model.trim="row.name"
clearable
placeholder="请输入关键字"
show-word-limit
maxlength="30"
/>
</template>
</el-table-column>
<el-table-column label="排序" prop="describe" min-width="80">
@@ -92,7 +98,7 @@ const formData = reactive<Search>({
})
const list = computed(() => {
return [...formData.list].sort((v1, v2) => v2.sort - v1.sort)
return formData.list.filter((item) => item.name).sort((v1, v2) => v2.sort - v1.sort)
})
// 获取登录注册数据
@@ -110,7 +116,7 @@ const getData = async () => {
const handleAdd = () => {
formData.list.push({
name: '关键字',
name: '',
sort: 0
})
}

View File

@@ -5,7 +5,7 @@
<el-form class="ls-form" :model="formData" inline>
<el-form-item label="管理员">
<el-input
class="w-56"
class="w-[280px]"
placeholder="请输入"
v-model="formData.username"
clearable
@@ -14,7 +14,7 @@
</el-form-item>
<el-form-item label="访问方式">
<el-select class="w-56" v-model="formData.type" placeholder="请选择">
<el-select class="w-[280px]" v-model="formData.type" placeholder="请选择">
<el-option
v-for="(item, index) in visitType"
:key="index"
@@ -26,7 +26,7 @@
<el-form-item label="来源IP">
<el-input
class="w-56"
class="w-[280px]"
placeholder="请输入"
v-model="formData.ip"
clearable
@@ -43,7 +43,7 @@
<el-form-item label="访问链接">
<el-input
class="w-56"
class="w-[280px]"
placeholder="请输入"
v-model="formData.url"
clearable

View File

@@ -84,7 +84,9 @@ const handleDelete = (index: number) => {
// 设置备案信息
const handleSubmit = async () => {
await setCopyright(formData.value)
await setCopyright({
list: formData.value
})
feedback.msgSuccess('操作成功')
getData()
}

View File

@@ -34,7 +34,7 @@
</el-form-item>
</el-card>
<el-card shadow="never" class="!border-none mt-4">
<div class="text-xl font-medium mb-[20px]">商城设置</div>
<div class="text-xl font-medium mb-[20px]">前台设置</div>
<el-form-item label="商城名称" prop="shopName">
<div class="w-80">
<el-input

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 KiB

View File

@@ -141,8 +141,8 @@ import menu_generator from './image/menu_generator.png'
import menu_file from './image/menu_file.png'
import menu_auth from './image/menu_auth.png'
import menu_web from './image/menu_web.png'
import qq_group from './image/qq_group.png'
import customer_service from './image/customer_service.png'
import oa_code from './image/oa_code.png'
import service_code from './image/service_code.png'
// 表单数据
const workbenchData: any = reactive({
version: {
@@ -156,12 +156,12 @@ const workbenchData: any = reactive({
},
support: [
{
image: qq_group,
title: '扫码进入QQ交流群',
desc: '疑难疑点 进入QQ群'
image: oa_code,
title: '官方公众号',
desc: '关注官方公众号'
},
{
image: customer_service,
image: service_code,
title: '添加企业客服微信',
desc: '想了解更多请添加客服'
}
@@ -186,7 +186,7 @@ const workbenchData: any = reactive({
{
name: '字典管理',
image: menu_dict,
url: '/setting/dict'
url: '/dev_tools/dict'
},
{
name: '代码生成器',

View File

@@ -1,3 +0,0 @@
# 请求域名
VITE_APP_BASE_URL='https://likeadmin-java-api.yixiangonline.com'

View File

@@ -1 +0,0 @@
import o from"./error.a2aa9f80.js";import{d as r,o as t,c as m,V as p}from"./@vue.cab01781.js";import"./element-plus.151049e5.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.5046cc50.js";import"./index.7d89aa28.js";import"./lodash.b68d77aa.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";const i={class:"error404"},L=r({__name:"403",setup(u){return(e,s)=>(t(),m("div",i,[p(o,{code:"403",title:"\u60A8\u7684\u8D26\u53F7\u6743\u9650\u4E0D\u8DB3\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650\uFF01","show-btn":!1})]))}});export{L as default};

View File

@@ -0,0 +1 @@
import o from"./error.73982a4e.js";import{d as r,o as i,c as p,V as m,M as e,a as t}from"./@vue.cab01781.js";import"./element-plus.dc25723c.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.37ec2129.js";import"./axios.fd02a783.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.5046cc50.js";import"./index.4333e73f.js";import"./lodash.75518cf9.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.748450be.js";import"./vue-clipboard3.049f28db.js";import"./clipboard.6e731210.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";const s="/assets/no_perms.a56e95a5.png",u={class:"error404"},a=t("div",{class:"flex justify-center"},[t("img",{class:"w-[150px] h-[150px]",src:s,alt:""})],-1),Q=r({__name:"403",setup(c){return(n,_)=>(i(),p("div",u,[m(o,{code:"403",title:"\u60A8\u7684\u8D26\u53F7\u6743\u9650\u4E0D\u8DB3\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650\uFF01","show-btn":!1},{content:e(()=>[a]),_:1})]))}});export{Q as default};

View File

@@ -1 +1 @@
import o from"./error.a2aa9f80.js";import{d as r,o as t,c as m,V as p}from"./@vue.cab01781.js";import"./element-plus.151049e5.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.5046cc50.js";import"./index.7d89aa28.js";import"./lodash.b68d77aa.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";const i={class:"error404"},L=r({__name:"404",setup(e){return(u,c)=>(t(),m("div",i,[p(o,{code:"404",title:"\u54CE\u5440\uFF0C\u51FA\u9519\u4E86\uFF01\u60A8\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728\u2026"})]))}});export{L as default};
import o from"./error.73982a4e.js";import{d as r,o as t,c as m,V as p}from"./@vue.cab01781.js";import"./element-plus.dc25723c.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.37ec2129.js";import"./axios.fd02a783.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.5046cc50.js";import"./index.4333e73f.js";import"./lodash.75518cf9.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.748450be.js";import"./vue-clipboard3.049f28db.js";import"./clipboard.6e731210.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";const i={class:"error404"},L=r({__name:"404",setup(e){return(u,c)=>(t(),m("div",i,[p(o,{code:"404",title:"\u54CE\u5440\uFF0C\u51FA\u9519\u4E86\uFF01\u60A8\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728\u2026"})]))}});export{L as default};

View File

@@ -1 +0,0 @@
import"./add-nav.vue_vue_type_script_setup_true_lang.1804d4d1.js";import{_ as R}from"./add-nav.vue_vue_type_script_setup_true_lang.1804d4d1.js";import"./element-plus.151049e5.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.b51e30da.js";import"./index.7d89aa28.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.39386e69.js";import"./index.c62639de.js";import"./picker.b90a9731.js";import"./index.878ae11f.js";import"./usePaging.1512f046.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{R as default};

View File

@@ -0,0 +1 @@
import"./add-nav.vue_vue_type_script_setup_true_lang.f1bb8c42.js";import{_ as S}from"./add-nav.vue_vue_type_script_setup_true_lang.f1bb8c42.js";import"./element-plus.dc25723c.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.37ec2129.js";import"./axios.fd02a783.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.47d23681.js";import"./index.4333e73f.js";import"./lodash.75518cf9.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.748450be.js";import"./vue-clipboard3.049f28db.js";import"./clipboard.6e731210.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.1db07d0b.js";import"./index.857546d9.js";import"./picker.f6f09cb5.js";import"./index.7692c15c.js";import"./usePaging.a52dcef9.js";import"./index.vue_vue_type_script_setup_true_lang.eeecba7b.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.1099696c.js";import"./vue.b3c0ecb7.js";import"./sortablejs.74eb51b2.js";export{S as default};

View File

@@ -1 +0,0 @@
import{C as F,w as b}from"./element-plus.151049e5.js";import{_ as v}from"./index.b51e30da.js";import{_ as A}from"./picker.39386e69.js";import{_ as B}from"./picker.b90a9731.js";import{f as _,b as y}from"./index.7d89aa28.js";import{d as C,o as u,c as r,a as e,W as D,a8 as E,L as w,M as m,V as t,T as U}from"./@vue.cab01781.js";const N={class:"bg-fill-light flex items-center w-full p-4 mb-4"},$={class:"upload-btn w-[60px] h-[60px]"},z={class:"ml-3 flex-1"},L={class:"flex"},T=e("span",{class:"text-tx-regular flex-none mr-3"},"\u540D\u79F0",-1),I={class:"flex mt-[18px]"},M=e("span",{class:"text-tx-regular flex-none mr-3"},"\u94FE\u63A5",-1),P=U("\u6DFB\u52A0"),K=C({__name:"add-nav",props:{modelValue:{type:Array,default:()=>[]},max:{type:Number,default:10},min:{type:Number,default:1}},setup(d){const l=d,p=()=>{var a;((a=l.modelValue)==null?void 0:a.length)<l.max?l.modelValue.push({image:"",name:"\u5BFC\u822A\u540D\u79F0",link:{}}):_.msgError(`\u6700\u591A\u6DFB\u52A0${l.max}\u4E2A`)},i=a=>{var s;if(((s=l.modelValue)==null?void 0:s.length)<=l.min)return _.msgError(`\u6700\u5C11\u4FDD\u7559${l.min}\u4E2A`);l.modelValue.splice(a,1)};return(a,s)=>{const f=y,x=B,V=F,h=A,g=v,k=b;return u(),r("div",null,[e("div",null,[(u(!0),r(D,null,E(d.modelValue,(o,c)=>(u(),w(g,{class:"max-w-[400px]",key:c,onClose:n=>i(c)},{default:m(()=>[e("div",N,[t(x,{modelValue:o.image,"onUpdate:modelValue":n=>o.image=n,"upload-class":"bg-body",size:"60px","exclude-domain":""},{upload:m(()=>[e("div",$,[t(f,{name:"el-icon-Plus",size:20})])]),_:2},1032,["modelValue","onUpdate:modelValue"]),e("div",z,[e("div",L,[T,t(V,{modelValue:o.name,"onUpdate:modelValue":n=>o.name=n,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),e("div",I,[M,t(h,{modelValue:o.link,"onUpdate:modelValue":n=>o.link=n},null,8,["modelValue","onUpdate:modelValue"])])])])]),_:2},1032,["onClose"]))),128))]),e("div",null,[t(k,{type:"primary",onClick:p},{default:m(()=>[P]),_:1})])])}}});export{K as _};

View File

@@ -0,0 +1 @@
import{C as D,w as F}from"./element-plus.dc25723c.js";import{_ as A}from"./index.47d23681.js";import{_ as B}from"./picker.1db07d0b.js";import{_ as y}from"./picker.f6f09cb5.js";import{f as p,b as C}from"./index.4333e73f.js";import{D as E}from"./vuedraggable.1099696c.js";import{d as U,e as w,o as c,c as N,a as e,V as t,M as m,L as $,u as r,k as z,T as L}from"./@vue.cab01781.js";const T={class:"bg-fill-light flex items-center w-full p-4 mb-4 cursor-move"},I={class:"upload-btn w-[60px] h-[60px]"},M={class:"ml-3 flex-1"},P={class:"flex"},R=e("span",{class:"text-tx-regular flex-none mr-3"},"\u540D\u79F0",-1),j={class:"flex mt-[18px]"},q=e("span",{class:"text-tx-regular flex-none mr-3"},"\u94FE\u63A5",-1),G=L("\u6DFB\u52A0"),X=U({__name:"add-nav",props:{modelValue:{type:Array,default:()=>[]},max:{type:Number,default:10},min:{type:Number,default:1}},emits:["update:modelValue"],setup(_,{emit:i}){const o=_,s=w({get(){return o.modelValue},set(a){i("update:modelValue",a)}}),f=()=>{var a;((a=o.modelValue)==null?void 0:a.length)<o.max?s.value.push({image:"",name:"\u5BFC\u822A\u540D\u79F0",link:{}}):p.msgError(`\u6700\u591A\u6DFB\u52A0${o.max}\u4E2A`)},V=a=>{var u;if(((u=o.modelValue)==null?void 0:u.length)<=o.min)return p.msgError(`\u6700\u5C11\u4FDD\u7559${o.min}\u4E2A`);s.value.splice(a,1)};return(a,u)=>{const x=C,g=y,h=D,v=B,k=A,b=F;return c(),N("div",null,[e("div",null,[t(r(E),{class:"draggable",modelValue:r(s),"onUpdate:modelValue":u[0]||(u[0]=l=>z(s)?s.value=l:null),animation:"300"},{item:m(({element:l,index:d})=>[(c(),$(k,{class:"max-w-[400px]",key:d,onClose:n=>V(d)},{default:m(()=>[e("div",T,[t(g,{modelValue:l.image,"onUpdate:modelValue":n=>l.image=n,"upload-class":"bg-body",size:"60px","exclude-domain":""},{upload:m(()=>[e("div",I,[t(x,{name:"el-icon-Plus",size:20})])]),_:2},1032,["modelValue","onUpdate:modelValue"]),e("div",M,[e("div",P,[R,t(h,{modelValue:l.name,"onUpdate:modelValue":n=>l.name=n,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),e("div",j,[q,t(v,{modelValue:l.link,"onUpdate:modelValue":n=>l.link=n},null,8,["modelValue","onUpdate:modelValue"])])])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])]),e("div",null,[t(b,{type:"primary",onClick:f},{default:m(()=>[G]),_:1})])])}}});export{X as _};

View File

@@ -1 +1 @@
import{r as e}from"./index.7d89aa28.js";function a(t){return e.get({url:"/article/cate/list",params:t})}function l(t){return e.get({url:"/article/cate/all",params:t})}function i(t){return e.post({url:"/article/cate/add",params:t})}function c(t){return e.post({url:"/article/cate/edit",params:t})}function u(t){return e.post({url:"/article/cate/del",params:t})}function n(t){return e.get({url:"/article/cate/detail",params:t})}function s(t){return e.post({url:"/article/cate/change",params:t})}function o(t){return e.get({url:"/article/list",params:t})}function d(t){return e.post({url:"/article/add",params:t})}function f(t){return e.post({url:"/article/edit",params:t})}function p(t){return e.post({url:"/article/del",params:t})}function g(t){return e.get({url:"/article/detail",params:t})}function C(t){return e.post({url:"/article/change",params:t})}export{c as a,i as b,n as c,u as d,s as e,a as f,g,l as h,f as i,d as j,C as k,p as l,o as m};
import{r as e}from"./index.4333e73f.js";function a(t){return e.get({url:"/article/cate/list",params:t})}function l(t){return e.get({url:"/article/cate/all",params:t})}function i(t){return e.post({url:"/article/cate/add",params:t})}function c(t){return e.post({url:"/article/cate/edit",params:t})}function u(t){return e.post({url:"/article/cate/del",params:t})}function n(t){return e.get({url:"/article/cate/detail",params:t})}function s(t){return e.post({url:"/article/cate/change",params:t})}function o(t){return e.get({url:"/article/list",params:t})}function d(t){return e.post({url:"/article/add",params:t})}function f(t){return e.post({url:"/article/edit",params:t})}function p(t){return e.post({url:"/article/del",params:t})}function g(t){return e.get({url:"/article/detail",params:t})}function C(t){return e.post({url:"/article/change",params:t})}export{c as a,i as b,n as c,u as d,s as e,a as f,g,l as h,f as i,d as j,C as k,p as l,o as m};

View File

@@ -0,0 +1 @@
import"./attr-setting.vue_vue_type_script_setup_true_lang.a2349682.js";import{_ as cm}from"./attr-setting.vue_vue_type_script_setup_true_lang.a2349682.js";import"./index.c57b75ff.js";import"./attr.vue_vue_type_script_setup_true_lang.1d4a0ddf.js";import"./element-plus.dc25723c.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.37ec2129.js";import"./axios.fd02a783.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.47d23681.js";import"./index.4333e73f.js";import"./lodash.75518cf9.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.748450be.js";import"./vue-clipboard3.049f28db.js";import"./clipboard.6e731210.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.1db07d0b.js";import"./index.857546d9.js";import"./picker.f6f09cb5.js";import"./index.7692c15c.js";import"./usePaging.a52dcef9.js";import"./index.vue_vue_type_script_setup_true_lang.eeecba7b.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.1099696c.js";import"./vue.b3c0ecb7.js";import"./sortablejs.74eb51b2.js";import"./content.vue_vue_type_script_setup_true_lang.0751226b.js";import"./decoration-img.e721b824.js";import"./attr.vue_vue_type_script_setup_true_lang.bef6b0b5.js";import"./content.ba16021f.js";import"./attr.vue_vue_type_script_setup_true_lang.333658d9.js";import"./add-nav.vue_vue_type_script_setup_true_lang.f1bb8c42.js";import"./content.755aa6fa.js";import"./attr.vue_vue_type_script_setup_true_lang.10c7c124.js";import"./content.vue_vue_type_script_setup_true_lang.8f985d5c.js";import"./attr.vue_vue_type_script_setup_true_lang.06a2fa18.js";import"./content.078a7895.js";import"./decoration.931da4ad.js";import"./attr.vue_vue_type_script_setup_true_lang.0b87e513.js";import"./content.dee32382.js";import"./attr.vue_vue_type_script_setup_true_lang.f75e53ca.js";import"./content.vue_vue_type_script_setup_true_lang.898b8e5a.js";import"./attr.vue_vue_type_script_setup_true_lang.0583d8bc.js";import"./content.a6205e2d.js";export{cm as default};

View File

@@ -1 +0,0 @@
import"./attr-setting.vue_vue_type_script_setup_true_lang.3af67c2b.js";import{_ as em}from"./attr-setting.vue_vue_type_script_setup_true_lang.3af67c2b.js";import"./index.7cc15db9.js";import"./attr.vue_vue_type_script_setup_true_lang.5b4262fd.js";import"./element-plus.151049e5.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.b51e30da.js";import"./index.7d89aa28.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.39386e69.js";import"./index.c62639de.js";import"./picker.b90a9731.js";import"./index.878ae11f.js";import"./usePaging.1512f046.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";import"./content.vue_vue_type_script_setup_true_lang.2830c18e.js";import"./decoration-img.527288ec.js";import"./attr.vue_vue_type_script_setup_true_lang.498c5b98.js";import"./content.ec0ba8dd.js";import"./attr.vue_vue_type_script_setup_true_lang.99e0fc33.js";import"./add-nav.vue_vue_type_script_setup_true_lang.1804d4d1.js";import"./content.16f556e9.js";import"./attr.vue_vue_type_script_setup_true_lang.3055eec3.js";import"./content.vue_vue_type_script_setup_true_lang.42326ab2.js";import"./attr.vue_vue_type_script_setup_true_lang.06a2fa18.js";import"./content.9754d616.js";import"./decoration.ce4f52a1.js";import"./attr.vue_vue_type_script_setup_true_lang.0b87e513.js";import"./content.31dcc26b.js";import"./attr.vue_vue_type_script_setup_true_lang.7e350cdd.js";import"./content.vue_vue_type_script_setup_true_lang.52b49f99.js";import"./attr.vue_vue_type_script_setup_true_lang.0583d8bc.js";import"./content.9e8cc13e.js";export{em as default};

View File

@@ -1 +1 @@
import{w as i}from"./index.7cc15db9.js";import{d as l,o as t,c as d,a as m,U as f,L as c,R as p,u as g,aK as b}from"./@vue.cab01781.js";const u={class:"pages-setting"},w={class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2"},k=l({__name:"attr-setting",props:{widget:{type:Object,default:()=>({})}},setup(e){return(y,x)=>{var s,a,n,o,r;return t(),d("div",u,[m("div",w,f((s=e.widget)==null?void 0:s.title),1),(t(),c(b,null,[(t(),c(p((n=g(i)[(a=e.widget)==null?void 0:a.name])==null?void 0:n.attr),{class:"pt-5 pr-4",content:(o=e.widget)==null?void 0:o.content,styles:(r=e.widget)==null?void 0:r.styles},null,8,["content","styles"]))],1024))])}}});export{k as _};
import{w as i}from"./index.c57b75ff.js";import{d as l,o as t,c as d,a as m,U as f,L as c,R as p,u as g,aK as b}from"./@vue.cab01781.js";const u={class:"pages-setting"},w={class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2"},k=l({__name:"attr-setting",props:{widget:{type:Object,default:()=>({})}},setup(e){return(y,x)=>{var s,a,n,o,r;return t(),d("div",u,[m("div",w,f((s=e.widget)==null?void 0:s.title),1),(t(),c(b,null,[(t(),c(p((n=g(i)[(a=e.widget)==null?void 0:a.name])==null?void 0:n.attr),{class:"pt-5 pr-4",content:(o=e.widget)==null?void 0:o.content,styles:(r=e.widget)==null?void 0:r.styles},null,8,["content","styles"]))],1024))])}}});export{k as _};

View File

@@ -0,0 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.f75e53ca.js";import{_ as S}from"./attr.vue_vue_type_script_setup_true_lang.f75e53ca.js";import"./element-plus.dc25723c.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.37ec2129.js";import"./axios.fd02a783.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.47d23681.js";import"./index.4333e73f.js";import"./lodash.75518cf9.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.748450be.js";import"./vue-clipboard3.049f28db.js";import"./clipboard.6e731210.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.1db07d0b.js";import"./index.857546d9.js";import"./picker.f6f09cb5.js";import"./index.7692c15c.js";import"./usePaging.a52dcef9.js";import"./index.vue_vue_type_script_setup_true_lang.eeecba7b.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.1099696c.js";import"./vue.b3c0ecb7.js";import"./sortablejs.74eb51b2.js";export{S as default};

View File

@@ -0,0 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.10c7c124.js";import{_ as T}from"./attr.vue_vue_type_script_setup_true_lang.10c7c124.js";import"./element-plus.dc25723c.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.37ec2129.js";import"./axios.fd02a783.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./add-nav.vue_vue_type_script_setup_true_lang.f1bb8c42.js";import"./index.47d23681.js";import"./index.4333e73f.js";import"./lodash.75518cf9.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.748450be.js";import"./vue-clipboard3.049f28db.js";import"./clipboard.6e731210.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.1db07d0b.js";import"./index.857546d9.js";import"./picker.f6f09cb5.js";import"./index.7692c15c.js";import"./usePaging.a52dcef9.js";import"./index.vue_vue_type_script_setup_true_lang.eeecba7b.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.1099696c.js";import"./vue.b3c0ecb7.js";import"./sortablejs.74eb51b2.js";export{T as default};

View File

@@ -0,0 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.1d4a0ddf.js";import{_ as S}from"./attr.vue_vue_type_script_setup_true_lang.1d4a0ddf.js";import"./element-plus.dc25723c.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.37ec2129.js";import"./axios.fd02a783.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.47d23681.js";import"./index.4333e73f.js";import"./lodash.75518cf9.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.748450be.js";import"./vue-clipboard3.049f28db.js";import"./clipboard.6e731210.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.1db07d0b.js";import"./index.857546d9.js";import"./picker.f6f09cb5.js";import"./index.7692c15c.js";import"./usePaging.a52dcef9.js";import"./index.vue_vue_type_script_setup_true_lang.eeecba7b.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.1099696c.js";import"./vue.b3c0ecb7.js";import"./sortablejs.74eb51b2.js";export{S as default};

View File

@@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.3055eec3.js";import{_ as S}from"./attr.vue_vue_type_script_setup_true_lang.3055eec3.js";import"./element-plus.151049e5.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./add-nav.vue_vue_type_script_setup_true_lang.1804d4d1.js";import"./index.b51e30da.js";import"./index.7d89aa28.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.39386e69.js";import"./index.c62639de.js";import"./picker.b90a9731.js";import"./index.878ae11f.js";import"./usePaging.1512f046.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{S as default};

View File

@@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.5b4262fd.js";import{_ as R}from"./attr.vue_vue_type_script_setup_true_lang.5b4262fd.js";import"./element-plus.151049e5.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.b51e30da.js";import"./index.7d89aa28.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.39386e69.js";import"./index.c62639de.js";import"./picker.b90a9731.js";import"./index.878ae11f.js";import"./usePaging.1512f046.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{R as default};

View File

@@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.99e0fc33.js";import{_ as S}from"./attr.vue_vue_type_script_setup_true_lang.99e0fc33.js";import"./element-plus.151049e5.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./add-nav.vue_vue_type_script_setup_true_lang.1804d4d1.js";import"./index.b51e30da.js";import"./index.7d89aa28.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.39386e69.js";import"./index.c62639de.js";import"./picker.b90a9731.js";import"./index.878ae11f.js";import"./usePaging.1512f046.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{S as default};

View File

@@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.7e350cdd.js";import{_ as R}from"./attr.vue_vue_type_script_setup_true_lang.7e350cdd.js";import"./element-plus.151049e5.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.b51e30da.js";import"./index.7d89aa28.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.39386e69.js";import"./index.c62639de.js";import"./picker.b90a9731.js";import"./index.878ae11f.js";import"./usePaging.1512f046.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{R as default};

View File

@@ -0,0 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.333658d9.js";import{_ as T}from"./attr.vue_vue_type_script_setup_true_lang.333658d9.js";import"./element-plus.dc25723c.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.37ec2129.js";import"./axios.fd02a783.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./add-nav.vue_vue_type_script_setup_true_lang.f1bb8c42.js";import"./index.47d23681.js";import"./index.4333e73f.js";import"./lodash.75518cf9.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.748450be.js";import"./vue-clipboard3.049f28db.js";import"./clipboard.6e731210.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.1db07d0b.js";import"./index.857546d9.js";import"./picker.f6f09cb5.js";import"./index.7692c15c.js";import"./usePaging.a52dcef9.js";import"./index.vue_vue_type_script_setup_true_lang.eeecba7b.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.1099696c.js";import"./vue.b3c0ecb7.js";import"./sortablejs.74eb51b2.js";export{T as default};

View File

@@ -0,0 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.bef6b0b5.js";import{_ as R}from"./attr.vue_vue_type_script_setup_true_lang.bef6b0b5.js";import"./element-plus.dc25723c.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.37ec2129.js";import"./axios.fd02a783.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./picker.f6f09cb5.js";import"./index.857546d9.js";import"./index.4333e73f.js";import"./lodash.75518cf9.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.748450be.js";import"./vue-clipboard3.049f28db.js";import"./clipboard.6e731210.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./index.7692c15c.js";import"./usePaging.a52dcef9.js";import"./index.47d23681.js";import"./index.vue_vue_type_script_setup_true_lang.eeecba7b.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.1099696c.js";import"./vue.b3c0ecb7.js";import"./sortablejs.74eb51b2.js";export{R as default};

View File

@@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.498c5b98.js";import{_ as Q}from"./attr.vue_vue_type_script_setup_true_lang.498c5b98.js";import"./element-plus.151049e5.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./picker.b90a9731.js";import"./index.c62639de.js";import"./index.7d89aa28.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./index.878ae11f.js";import"./usePaging.1512f046.js";import"./index.b51e30da.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{Q as default};

View File

@@ -1 +1 @@
import{O as c,P as r,D as i,F as f}from"./element-plus.151049e5.js";import{_ as p}from"./add-nav.vue_vue_type_script_setup_true_lang.1804d4d1.js";import{d as F,o as E,c as b,V as e,M as t,a as d,T as s}from"./@vue.cab01781.js";const V=s("\u5F00\u542F"),x=s("\u505C\u7528"),B={class:"flex-1"},A=d("div",{class:"form-tips mb-4"},"\u6700\u591A\u53EF\u6DFB\u52A010\u4E2A\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A100px*100px",-1),D=F({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(o){return(C,a)=>{const u=c,m=r,n=i,_=f;return E(),b("div",null,[e(_,{"label-width":"70px"},{default:t(()=>[e(n,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(m,{modelValue:o.content.enabled,"onUpdate:modelValue":a[0]||(a[0]=l=>o.content.enabled=l)},{default:t(()=>[e(u,{label:1},{default:t(()=>[V]),_:1}),e(u,{label:0},{default:t(()=>[x]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(n,{label:"\u83DC\u5355\u8BBE\u7F6E"},{default:t(()=>[d("div",B,[A,e(p,{modelValue:o.content.data,"onUpdate:modelValue":a[1]||(a[1]=l=>o.content.data=l)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{D as _};
import{O as c,P as r,D as i,F as f}from"./element-plus.dc25723c.js";import{_ as p}from"./add-nav.vue_vue_type_script_setup_true_lang.f1bb8c42.js";import{d as F,o as E,c as b,V as e,M as t,a as d,T as s}from"./@vue.cab01781.js";const V=s("\u5F00\u542F"),x=s("\u505C\u7528"),B={class:"flex-1"},A=d("div",{class:"form-tips mb-4"},"\u6700\u591A\u53EF\u6DFB\u52A010\u4E2A\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A100px*100px",-1),D=F({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(o){return(C,a)=>{const u=c,m=r,n=i,_=f;return E(),b("div",null,[e(_,{"label-width":"70px"},{default:t(()=>[e(n,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(m,{modelValue:o.content.enabled,"onUpdate:modelValue":a[0]||(a[0]=l=>o.content.enabled=l)},{default:t(()=>[e(u,{label:1},{default:t(()=>[V]),_:1}),e(u,{label:0},{default:t(()=>[x]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(n,{label:"\u83DC\u5355\u8BBE\u7F6E"},{default:t(()=>[d("div",B,[A,e(p,{modelValue:o.content.data,"onUpdate:modelValue":a[1]||(a[1]=l=>o.content.data=l)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{D as _};

View File

@@ -0,0 +1 @@
import{O as y,P as U,D as v,C as w,w as N,F as O}from"./element-plus.dc25723c.js";import{_ as $}from"./index.47d23681.js";import{_ as j}from"./picker.1db07d0b.js";import{_ as I}from"./picker.f6f09cb5.js";import{f as V}from"./index.4333e73f.js";import{D as R}from"./vuedraggable.1099696c.js";import{d as T,o as m,c as G,V as e,M as t,L as r,S as E,a as c,u as L,T as i}from"./@vue.cab01781.js";const M=i("\u5F00\u542F"),P=i("\u505C\u7528"),S={class:"flex-1"},q=c("div",{class:"form-tips"},"\u6700\u591A\u6DFB\u52A05\u5F20\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A750px*340px",-1),z={class:"bg-fill-light flex items-center w-full p-4 mt-4 cursor-move"},H={class:"ml-3 flex-1"},J=i("\u6DFB\u52A0\u56FE\u7247"),te=T({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(a){const s=a,_=5,b=()=>{var n;((n=s.content.data)==null?void 0:n.length)<_?s.content.data.push({image:"",name:"",link:{}}):V.msgError(`\u6700\u591A\u6DFB\u52A0${_}\u5F20\u56FE\u7247`)},g=n=>{var l;if(((l=s.content.data)==null?void 0:l.length)<=1)return V.msgError("\u6700\u5C11\u4FDD\u7559\u4E00\u5F20\u56FE\u7247");s.content.data.splice(n,1)};return(n,l)=>{const p=y,h=U,d=v,k=I,B=w,x=j,A=$,C=N,D=O;return m(),G("div",null,[e(D,{"label-width":"70px"},{default:t(()=>{var f;return[n.type=="mobile"?(m(),r(d,{key:0,label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(h,{modelValue:a.content.enabled,"onUpdate:modelValue":l[0]||(l[0]=o=>a.content.enabled=o)},{default:t(()=>[e(p,{label:1},{default:t(()=>[M]),_:1}),e(p,{label:0},{default:t(()=>[P]),_:1})]),_:1},8,["modelValue"])]),_:1})):E("",!0),e(d,{label:"\u56FE\u7247\u8BBE\u7F6E"},{default:t(()=>[c("div",S,[q,e(L(R),{class:"draggable",modelValue:a.content.data,"onUpdate:modelValue":l[1]||(l[1]=o=>a.content.data=o),animation:"300"},{item:t(({element:o,index:F})=>[(m(),r(A,{key:F,onClose:u=>g(F),class:"max-w-[400px]"},{default:t(()=>[c("div",z,[e(k,{modelValue:o.image,"onUpdate:modelValue":u=>o.image=u,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),c("div",H,[e(d,{label:"\u56FE\u7247\u540D\u79F0"},{default:t(()=>[e(B,{modelValue:o.name,"onUpdate:modelValue":u=>o.name=u,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(d,{class:"mt-[18px]",label:"\u56FE\u7247\u94FE\u63A5"},{default:t(()=>[e(x,{modelValue:o.link,"onUpdate:modelValue":u=>o.link=u},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])])]),_:1}),((f=a.content.data)==null?void 0:f.length)<_?(m(),r(d,{key:1},{default:t(()=>[e(C,{type:"primary",onClick:b},{default:t(()=>[J]),_:1})]),_:1})):E("",!0)]}),_:1})])}}});export{te as _};

View File

@@ -1 +1 @@
import{O as _,P as i,D as r,C as f,F as p}from"./element-plus.151049e5.js";import{_ as V}from"./add-nav.vue_vue_type_script_setup_true_lang.1804d4d1.js";import{d as b,o as E,c as x,V as e,M as t,a as F,T as d}from"./@vue.cab01781.js";const y=d("\u6A2A\u6392"),B=d("\u7AD6\u6392"),C={class:"flex-1"},O=b({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(l){return(D,o)=>{const u=_,s=i,n=r,m=f,c=p;return E(),x("div",null,[e(c,{"label-width":"70px"},{default:t(()=>[e(n,{label:"\u6392\u7248\u6837\u5F0F"},{default:t(()=>[e(s,{modelValue:l.content.style,"onUpdate:modelValue":o[0]||(o[0]=a=>l.content.style=a)},{default:t(()=>[e(u,{label:1},{default:t(()=>[y]),_:1}),e(u,{label:2},{default:t(()=>[B]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(n,{label:"\u6807\u9898\u540D\u79F0"},{default:t(()=>[e(m,{class:"w-[400px]",modelValue:l.content.title,"onUpdate:modelValue":o[1]||(o[1]=a=>l.content.title=a)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u83DC\u5355\u8BBE\u7F6E"},{default:t(()=>[F("div",C,[e(V,{modelValue:l.content.data,"onUpdate:modelValue":o[2]||(o[2]=a=>l.content.data=a)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{O as _};
import{O as _,P as i,D as r,C as f,F as p}from"./element-plus.dc25723c.js";import{_ as V}from"./add-nav.vue_vue_type_script_setup_true_lang.f1bb8c42.js";import{d as b,o as E,c as x,V as e,M as t,a as F,T as d}from"./@vue.cab01781.js";const y=d("\u6A2A\u6392"),B=d("\u7AD6\u6392"),C={class:"flex-1"},O=b({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(l){return(D,o)=>{const u=_,s=i,n=r,m=f,c=p;return E(),x("div",null,[e(c,{"label-width":"70px"},{default:t(()=>[e(n,{label:"\u6392\u7248\u6837\u5F0F"},{default:t(()=>[e(s,{modelValue:l.content.style,"onUpdate:modelValue":o[0]||(o[0]=a=>l.content.style=a)},{default:t(()=>[e(u,{label:1},{default:t(()=>[y]),_:1}),e(u,{label:2},{default:t(()=>[B]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(n,{label:"\u6807\u9898\u540D\u79F0"},{default:t(()=>[e(m,{class:"w-[400px]",modelValue:l.content.title,"onUpdate:modelValue":o[1]||(o[1]=a=>l.content.title=a)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u83DC\u5355\u8BBE\u7F6E"},{default:t(()=>[F("div",C,[e(V,{modelValue:l.content.data,"onUpdate:modelValue":o[2]||(o[2]=a=>l.content.data=a)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{O as _};

View File

@@ -1 +0,0 @@
import{O as y,P as U,D as v,C as w,w as N,F as O}from"./element-plus.151049e5.js";import{_ as $}from"./index.b51e30da.js";import{_ as j}from"./picker.39386e69.js";import{_ as I}from"./picker.b90a9731.js";import{f}from"./index.7d89aa28.js";import{d as L,o as c,c as E,V as e,M as t,a as _,W as R,a8 as T,L as V,S as G,T as r}from"./@vue.cab01781.js";const M=r("\u5F00\u542F"),P=r("\u505C\u7528"),S={class:"flex-1"},W=_("div",{class:"form-tips"},"\u6700\u591A\u6DFB\u52A05\u5F20\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A750px*340px",-1),q={class:"bg-fill-light flex items-center w-full p-4 mt-4"},z={class:"ml-3 flex-1"},H=r("\u6DFB\u52A0\u56FE\u7247"),ee=L({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(a){const d=a,m=5,b=()=>{var n;((n=d.content.data)==null?void 0:n.length)<m?d.content.data.push({image:"",name:"",link:{}}):f.msgError(`\u6700\u591A\u6DFB\u52A0${m}\u5F20\u56FE\u7247`)},g=n=>{var u;if(((u=d.content.data)==null?void 0:u.length)<=1)return f.msgError("\u6700\u5C11\u4FDD\u7559\u4E00\u5F20\u56FE\u7247");d.content.data.splice(n,1)};return(n,u)=>{const p=y,h=U,s=v,k=I,x=w,B=j,A=$,C=N,D=O;return c(),E("div",null,[e(D,{"label-width":"70px"},{default:t(()=>{var i;return[e(s,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(h,{modelValue:a.content.enabled,"onUpdate:modelValue":u[0]||(u[0]=o=>a.content.enabled=o)},{default:t(()=>[e(p,{label:1},{default:t(()=>[M]),_:1}),e(p,{label:0},{default:t(()=>[P]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(s,{label:"\u56FE\u7247\u8BBE\u7F6E"},{default:t(()=>[_("div",S,[W,(c(!0),E(R,null,T(a.content.data,(o,F)=>(c(),V(A,{key:F,onClose:l=>g(F),class:"max-w-[400px]"},{default:t(()=>[_("div",q,[e(k,{modelValue:o.image,"onUpdate:modelValue":l=>o.image=l,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),_("div",z,[e(s,{label:"\u56FE\u7247\u540D\u79F0"},{default:t(()=>[e(x,{modelValue:o.name,"onUpdate:modelValue":l=>o.name=l,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(s,{class:"mt-[18px]",label:"\u56FE\u7247\u94FE\u63A5"},{default:t(()=>[e(B,{modelValue:o.link,"onUpdate:modelValue":l=>o.link=l},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)])])]),_:2},1032,["onClose"]))),128))])]),_:1}),((i=a.content.data)==null?void 0:i.length)<m?(c(),V(s,{key:0},{default:t(()=>[e(C,{type:"primary",onClick:b},{default:t(()=>[H]),_:1})]),_:1})):G("",!0)]}),_:1})])}}});export{ee as _};

View File

@@ -1 +0,0 @@
import{O as y,P as U,D as v,C as w,w as N,F as O}from"./element-plus.151049e5.js";import{_ as $}from"./index.b51e30da.js";import{_ as j}from"./picker.39386e69.js";import{_ as I}from"./picker.b90a9731.js";import{f}from"./index.7d89aa28.js";import{d as L,o as c,c as E,V as e,M as t,a as _,W as R,a8 as T,L as V,S as G,T as r}from"./@vue.cab01781.js";const M=r("\u5F00\u542F"),P=r("\u505C\u7528"),S={class:"flex-1"},W=_("div",{class:"form-tips"},"\u6700\u591A\u6DFB\u52A05\u5F20\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A750px*200px",-1),q={class:"bg-fill-light flex items-center w-full p-4 mt-4"},z={class:"ml-3 flex-1"},H=r("\u6DFB\u52A0\u56FE\u7247"),ee=L({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(a){const d=a,m=5,b=()=>{var n;((n=d.content.data)==null?void 0:n.length)<m?d.content.data.push({image:"",name:"",link:{}}):f.msgError(`\u6700\u591A\u6DFB\u52A0${m}\u5F20\u56FE\u7247`)},g=n=>{var u;if(((u=d.content.data)==null?void 0:u.length)<=1)return f.msgError("\u6700\u5C11\u4FDD\u7559\u4E00\u5F20\u56FE\u7247");d.content.data.splice(n,1)};return(n,u)=>{const p=y,h=U,s=v,k=I,x=w,B=j,A=$,C=N,D=O;return c(),E("div",null,[e(D,{"label-width":"70px"},{default:t(()=>{var i;return[e(s,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(h,{modelValue:a.content.enabled,"onUpdate:modelValue":u[0]||(u[0]=o=>a.content.enabled=o)},{default:t(()=>[e(p,{label:1},{default:t(()=>[M]),_:1}),e(p,{label:0},{default:t(()=>[P]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(s,{label:"\u56FE\u7247\u8BBE\u7F6E"},{default:t(()=>[_("div",S,[W,(c(!0),E(R,null,T(a.content.data,(o,F)=>(c(),V(A,{key:F,onClose:l=>g(F),class:"max-w-[400px]"},{default:t(()=>[_("div",q,[e(k,{modelValue:o.image,"onUpdate:modelValue":l=>o.image=l,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),_("div",z,[e(s,{label:"\u56FE\u7247\u540D\u79F0"},{default:t(()=>[e(x,{modelValue:o.name,"onUpdate:modelValue":l=>o.name=l,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(s,{class:"mt-[18px]",label:"\u56FE\u7247\u94FE\u63A5"},{default:t(()=>[e(B,{modelValue:o.link,"onUpdate:modelValue":l=>o.link=l},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)])])]),_:2},1032,["onClose"]))),128))])]),_:1}),((i=a.content.data)==null?void 0:i.length)<m?(c(),V(s,{key:0},{default:t(()=>[e(C,{type:"primary",onClick:b},{default:t(()=>[H]),_:1})]),_:1})):G("",!0)]}),_:1})])}}});export{ee as _};

View File

@@ -1 +1 @@
import{C as c,D as i,F}from"./element-plus.151049e5.js";import{_ as p}from"./picker.b90a9731.js";import{d as r,o as f,c as V,V as e,M as o,a as m}from"./@vue.cab01781.js";const B=m("div",{class:"form-tips"},"\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A200*200\u50CF\u7D20\uFF1B\u56FE\u7247\u683C\u5F0F\uFF1Ajpg\u3001png\u3001jpeg",-1),A=r({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){return(E,l)=>{const a=c,n=i,d=p,s=F;return f(),V("div",null,[e(s,{"label-width":"90px"},{default:o(()=>[e(n,{label:"\u5BA2\u670D\u6807\u9898"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.title,"onUpdate:modelValue":l[0]||(l[0]=u=>t.content.title=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u670D\u52A1\u65F6\u95F4"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.time,"onUpdate:modelValue":l[1]||(l[1]=u=>t.content.time=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u8054\u7CFB\u7535\u8BDD"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.mobile,"onUpdate:modelValue":l[2]||(l[2]=u=>t.content.mobile=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u5BA2\u670D\u4E8C\u7EF4\u7801"},{default:o(()=>[m("div",null,[e(d,{modelValue:t.content.qrcode,"onUpdate:modelValue":l[3]||(l[3]=u=>t.content.qrcode=u),"exclude-domain":""},null,8,["modelValue"]),B])]),_:1})]),_:1})])}}});export{A as _};
import{C as c,D as i,F}from"./element-plus.dc25723c.js";import{_ as p}from"./picker.f6f09cb5.js";import{d as r,o as f,c as V,V as e,M as o,a as m}from"./@vue.cab01781.js";const B=m("div",{class:"form-tips"},"\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A200*200\u50CF\u7D20\uFF1B\u56FE\u7247\u683C\u5F0F\uFF1Ajpg\u3001png\u3001jpeg",-1),A=r({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){return(E,l)=>{const a=c,n=i,d=p,s=F;return f(),V("div",null,[e(s,{"label-width":"90px"},{default:o(()=>[e(n,{label:"\u5BA2\u670D\u6807\u9898"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.title,"onUpdate:modelValue":l[0]||(l[0]=u=>t.content.title=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u670D\u52A1\u65F6\u95F4"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.time,"onUpdate:modelValue":l[1]||(l[1]=u=>t.content.time=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u8054\u7CFB\u7535\u8BDD"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.mobile,"onUpdate:modelValue":l[2]||(l[2]=u=>t.content.mobile=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u5BA2\u670D\u4E8C\u7EF4\u7801"},{default:o(()=>[m("div",null,[e(d,{modelValue:t.content.qrcode,"onUpdate:modelValue":l[3]||(l[3]=u=>t.content.qrcode=u),"exclude-domain":""},null,8,["modelValue"]),B])]),_:1})]),_:1})])}}});export{A as _};

View File

@@ -0,0 +1 @@
import{O as D,P as y,D as U,C as v,w,F as N}from"./element-plus.dc25723c.js";import{_ as O}from"./index.47d23681.js";import{_ as $}from"./picker.1db07d0b.js";import{_ as j}from"./picker.f6f09cb5.js";import{f as F}from"./index.4333e73f.js";import{D as I}from"./vuedraggable.1099696c.js";import{d as R,o as _,c as T,V as e,M as t,a as m,u as G,L as V,S as L,T as r}from"./@vue.cab01781.js";const M=r("\u5F00\u542F"),P=r("\u505C\u7528"),S={class:"flex-1"},q=m("div",{class:"form-tips"},"\u6700\u591A\u6DFB\u52A05\u5F20\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A750px*200px",-1),z={class:"bg-fill-light flex items-center w-full p-4 mt-4 cursor-move"},H={class:"ml-3 flex-1"},J=r("\u6DFB\u52A0\u56FE\u7247"),te=R({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(a){const s=a,c=5,E=()=>{var u;((u=s.content.data)==null?void 0:u.length)<c?s.content.data.push({image:"",name:"",link:{}}):F.msgError(`\u6700\u591A\u6DFB\u52A0${c}\u5F20\u56FE\u7247`)},g=u=>{var l;if(((l=s.content.data)==null?void 0:l.length)<=1)return F.msgError("\u6700\u5C11\u4FDD\u7559\u4E00\u5F20\u56FE\u7247");s.content.data.splice(u,1)};return(u,l)=>{const i=D,b=y,d=U,h=j,k=v,x=$,B=O,A=w,C=N;return _(),T("div",null,[e(C,{"label-width":"70px"},{default:t(()=>{var p;return[e(d,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(b,{modelValue:a.content.enabled,"onUpdate:modelValue":l[0]||(l[0]=o=>a.content.enabled=o)},{default:t(()=>[e(i,{label:1},{default:t(()=>[M]),_:1}),e(i,{label:0},{default:t(()=>[P]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"\u56FE\u7247\u8BBE\u7F6E"},{default:t(()=>[m("div",S,[q,e(G(I),{class:"draggable",modelValue:a.content.data,"onUpdate:modelValue":l[1]||(l[1]=o=>a.content.data=o),animation:"300"},{item:t(({element:o,index:f})=>[(_(),V(B,{key:f,onClose:n=>g(f),class:"max-w-[400px]"},{default:t(()=>[m("div",z,[e(h,{modelValue:o.image,"onUpdate:modelValue":n=>o.image=n,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),m("div",H,[e(d,{label:"\u56FE\u7247\u540D\u79F0"},{default:t(()=>[e(k,{modelValue:o.name,"onUpdate:modelValue":n=>o.name=n,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(d,{class:"mt-[18px]",label:"\u56FE\u7247\u94FE\u63A5"},{default:t(()=>[e(x,{modelValue:o.link,"onUpdate:modelValue":n=>o.link=n},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])])]),_:1}),((p=a.content.data)==null?void 0:p.length)<c?(_(),V(d,{key:0},{default:t(()=>[e(A,{type:"primary",onClick:E},{default:t(()=>[J]),_:1})]),_:1})):L("",!0)]}),_:1})])}}});export{te as _};

View File

@@ -0,0 +1 @@
import"./auth.vue_vue_type_script_setup_true_lang.66389c88.js";import{_ as K}from"./auth.vue_vue_type_script_setup_true_lang.66389c88.js";import"./element-plus.dc25723c.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.37ec2129.js";import"./axios.fd02a783.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./role.e5ae53f1.js";import"./index.4333e73f.js";import"./lodash.75518cf9.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.748450be.js";import"./vue-clipboard3.049f28db.js";import"./clipboard.6e731210.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./menu.6701aa80.js";import"./index.857546d9.js";export{K as default};

View File

@@ -1 +0,0 @@
import"./auth.vue_vue_type_script_setup_true_lang.8fdf8593.js";import{_ as K}from"./auth.vue_vue_type_script_setup_true_lang.8fdf8593.js";import"./element-plus.151049e5.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./role.75905341.js";import"./index.7d89aa28.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./menu.b3f97278.js";import"./index.c62639de.js";export{K as default};

Some files were not shown because too many files have changed in this diff Show More