zhaoyun 11 hours ago
commit
bdd9213013
100 changed files with 7048 additions and 0 deletions
  1. 14 0
      mer_mer_admin/.editorconfig
  2. 16 0
      mer_mer_admin/.env.development
  3. 7 0
      mer_mer_admin/.env.production
  4. 6 0
      mer_mer_admin/.env.staging
  5. 6 0
      mer_mer_admin/.eslintignore
  6. 10 0
      mer_mer_admin/.eslintrc.js
  7. 23 0
      mer_mer_admin/.gitignore
  8. 22 0
      mer_mer_admin/.prettierignore
  9. 35 0
      mer_mer_admin/.prettierrc.js
  10. 5 0
      mer_mer_admin/.travis.yml
  11. 21 0
      mer_mer_admin/LICENSE
  12. 18 0
      mer_mer_admin/README.ZBKJ.md
  13. 261 0
      mer_mer_admin/README.md
  14. 11 0
      mer_mer_admin/babel.config.js
  15. 23 0
      mer_mer_admin/jest.config.js
  16. 9 0
      mer_mer_admin/jsconfig.json
  17. 99 0
      mer_mer_admin/package.json
  18. 18 0
      mer_mer_admin/plop-templates/component/index.hbs
  19. 59 0
      mer_mer_admin/plop-templates/component/prompt.js
  20. 15 0
      mer_mer_admin/plop-templates/store/index.hbs
  21. 66 0
      mer_mer_admin/plop-templates/store/prompt.js
  22. 9 0
      mer_mer_admin/plop-templates/utils.js
  23. 18 0
      mer_mer_admin/plop-templates/view/index.hbs
  24. 59 0
      mer_mer_admin/plop-templates/view/prompt.js
  25. 9 0
      mer_mer_admin/plopfile.js
  26. 5 0
      mer_mer_admin/postcss.config.js
  27. BIN
      mer_mer_admin/public/favicon.ico
  28. 23 0
      mer_mer_admin/public/index.html
  29. 38 0
      mer_mer_admin/public/preview.html
  30. 230 0
      mer_mer_admin/public/static/tinymce4.7.5/langs/zh_CN.js
  31. 138 0
      mer_mer_admin/public/static/tinymce4.7.5/plugins/codesample/css/prism.css
  32. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-cool.gif
  33. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-cry.gif
  34. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-embarassed.gif
  35. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-foot-in-mouth.gif
  36. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-frown.gif
  37. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-innocent.gif
  38. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-kiss.gif
  39. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-laughing.gif
  40. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-money-mouth.gif
  41. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-sealed.gif
  42. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-smile.gif
  43. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-surprised.gif
  44. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-tongue-out.gif
  45. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-undecided.gif
  46. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-wink.gif
  47. BIN
      mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-yell.gif
  48. 154 0
      mer_mer_admin/public/static/tinymce4.7.5/plugins/visualblocks/css/visualblocks.css
  49. 1 0
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/content.inline.min.css
  50. 1 0
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/content.min.css
  51. BIN
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-mobile.woff
  52. BIN
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.eot
  53. 63 0
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.svg
  54. BIN
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.ttf
  55. BIN
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.woff
  56. BIN
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.eot
  57. 131 0
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.svg
  58. BIN
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.ttf
  59. BIN
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.woff
  60. BIN
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/img/anchor.gif
  61. BIN
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/img/loader.gif
  62. BIN
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/img/object.gif
  63. BIN
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/img/trans.gif
  64. 1 0
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/skin.min.css
  65. 1 0
      mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/skin.min.css.map
  66. 2 0
      mer_mer_admin/public/static/tinymce4.7.5/tinymce.min.js
  67. 100 0
      mer_mer_admin/src/App.vue
  68. 178 0
      mer_mer_admin/src/api/article.js
  69. 52 0
      mer_mer_admin/src/api/authInformation.js
  70. 154 0
      mer_mer_admin/src/api/categoryApi.js
  71. 91 0
      mer_mer_admin/src/api/dashboard.js
  72. 54 0
      mer_mer_admin/src/api/deliveryPersonnel.js
  73. 109 0
      mer_mer_admin/src/api/devise.js
  74. 166 0
      mer_mer_admin/src/api/finance.js
  75. 154 0
      mer_mer_admin/src/api/group.js
  76. 161 0
      mer_mer_admin/src/api/logistics.js
  77. 770 0
      mer_mer_admin/src/api/marketing.js
  78. 164 0
      mer_mer_admin/src/api/merchant.js
  79. 367 0
      mer_mer_admin/src/api/order.js
  80. 745 0
      mer_mer_admin/src/api/product.js
  81. 142 0
      mer_mer_admin/src/api/productCdkey.js
  82. 42 0
      mer_mer_admin/src/api/req.js
  83. 112 0
      mer_mer_admin/src/api/role.js
  84. 22 0
      mer_mer_admin/src/api/roleApi.js
  85. 93 0
      mer_mer_admin/src/api/staff.js
  86. 74 0
      mer_mer_admin/src/api/systemForm.js
  87. 56 0
      mer_mer_admin/src/api/systemFormConfig.js
  88. 34 0
      mer_mer_admin/src/api/systemPcConfig.js
  89. 338 0
      mer_mer_admin/src/api/systemSetting.js
  90. 166 0
      mer_mer_admin/src/api/systemadmin.js
  91. 75 0
      mer_mer_admin/src/api/user.js
  92. BIN
      mer_mer_admin/src/assets/401_images/401.gif
  93. BIN
      mer_mer_admin/src/assets/404_images/404.png
  94. BIN
      mer_mer_admin/src/assets/404_images/404_cloud.png
  95. 108 0
      mer_mer_admin/src/assets/iconfont/iconfont-weapp-icon.css
  96. 894 0
      mer_mer_admin/src/assets/iconfont/iconfont.css
  97. BIN
      mer_mer_admin/src/assets/imgs/app.png
  98. BIN
      mer_mer_admin/src/assets/imgs/bg.jpg
  99. BIN
      mer_mer_admin/src/assets/imgs/capsule.png
  100. 0 0
      mer_mer_admin/src/assets/imgs/couponBg.png

+ 14 - 0
mer_mer_admin/.editorconfig

@@ -0,0 +1,14 @@
+# https://editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+insert_final_newline = false
+trim_trailing_whitespace = false

+ 16 - 0
mer_mer_admin/.env.development

@@ -0,0 +1,16 @@
+# just a flag
+ENV = 'development'
+
+# base api
+# VUE_APP_BASE_API = '/dev-api'
+VUE_APP_BASE_API = 'http://39.105.58.247:20800'
+#VUE_APP_BASE_API = 'http://127.0.0.1:20800'
+
+# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
+# to control whether the babel-plugin-dynamic-import-node plugin is enabled.
+# It only does one thing by converting all import() to require().
+# This configuration can significantly increase the speed of hot updates,
+# when you have a large number of pages.
+# Detail:  https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js
+
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 7 - 0
mer_mer_admin/.env.production

@@ -0,0 +1,7 @@
+# just a flag
+ENV = 'production'
+
+# base api
+#VUE_APP_BASE_API = '/prod-api'
+VUE_APP_BASE_API = 'http://47.115.34.96:20700'
+

+ 6 - 0
mer_mer_admin/.env.staging

@@ -0,0 +1,6 @@
+ENV = 'production'
+
+# base api
+# VUE_APP_BASE_API = '/prod-api'
+VUE_APP_BASE_API = 'http://127.0.0.1:8080'
+

+ 6 - 0
mer_mer_admin/.eslintignore

@@ -0,0 +1,6 @@
+build/*.js
+src/assets
+public
+dist
+src/components/FormGenerator
+src/directive

+ 10 - 0
mer_mer_admin/.eslintrc.js

@@ -0,0 +1,10 @@
+module.exports = {
+  // root: true,
+  // parser: 'vue-eslint-parser',
+  // parserOptions: {
+  //   sourceType: 'module',
+  //   ecmaVersion: 6,
+  //   parser: 'babel-eslint',
+  // },
+  // extends: ['plugin:prettier/recommended'],
+};

+ 23 - 0
mer_mer_admin/.gitignore

@@ -0,0 +1,23 @@
+.DS_Store
+node_modules/
+dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+**/*.log
+
+tests/**/coverage/
+tests/e2e/reports
+selenium-debug.log
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+
+package-lock.json
+yarn.lock

+ 22 - 0
mer_mer_admin/.prettierignore

@@ -0,0 +1,22 @@
+.DS_Store
+node_modules/
+dist/
+public/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+**/*.log
+
+tests/**/coverage/
+tests/e2e/reports
+selenium-debug.log
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+*.md

+ 35 - 0
mer_mer_admin/.prettierrc.js

@@ -0,0 +1,35 @@
+module.exports = {
+  // 一行最多 120 字符
+  printWidth: 120,
+  // 使用 2 个空格缩进
+  tabWidth: 2,
+  // 不使用 tab 缩进,而使用空格
+  useTabs: false,
+  // 行尾需要有分号
+  semi: true,
+  // 使用单引号代替双引号
+  singleQuote: true,
+  // 对象的 key 仅在必要时用引号
+  quoteProps: 'as-needed',
+  // jsx 不使用单引号,而使用双引号
+  jsxSingleQuote: false,
+  // 末尾使用逗号
+  trailingComma: 'all',
+  // 大括号内的首尾需要空格 { foo: bar }
+  bracketSpacing: true,
+  // 箭头函数,只有一个参数的时候,也需要括号
+  arrowParens: 'always',
+  // 每个文件格式化的范围是文件的全部内容
+  rangeStart: 0,
+  rangeEnd: Infinity,
+  // 不需要写文件开头的 @prettier
+  requirePragma: false,
+  // 不需要自动在文件开头插入 @prettier
+  insertPragma: false,
+  // 使用默认的折行标准
+  proseWrap: 'preserve',
+  // 根据显示样式决定 html 要不要折行
+  htmlWhitespaceSensitivity: 'css',
+  // 换行符使用 lf
+  endOfLine: 'lf',
+};

+ 5 - 0
mer_mer_admin/.travis.yml

@@ -0,0 +1,5 @@
+language: node_js
+node_js: 10
+script: npm run test
+notifications:
+  email: false

+ 21 - 0
mer_mer_admin/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017-present PanJiaChen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 18 - 0
mer_mer_admin/README.ZBKJ.md

@@ -0,0 +1,18 @@
+公用组件
+无限极分类组件 src/components/Category
+使用范围:菜单,文章等各种分类配置数据
+
+表单生成组件
+https://github.com/JakHuang/form-generator
+
+json渲染表单以及是否需要编辑数据回填的功能以下为例
+示例:src/views/maintain/devconfig/combineEdit.vue
+
+
+<parser v-if="formConf.fields.length > 0" :isEdit="isCreate === 1" :form-conf="formConf" :formEditData="editData" @submit="handlerSubmit" />
+注意:设置单选按钮的值时需要带上单引号,要不渲染待编辑数据时不会自动选中
+
+提示:如果不需要每次刷新页面都弹出二维码,请在src/layout/index.vue中注释或者删除15行代码。
+```
+<div class="open-image" @click="clear" v-if="openImage"><img src="@/assets/imgs/pc1.png" alt=""></div>
+```

+ 261 - 0
mer_mer_admin/README.md

@@ -0,0 +1,261 @@
+# CRMEB Admin
+## 开发规范
+统一使用ES6 语法
+方法注释
+/*
+* th => 表头
+* data => 数据
+* fileName => 文件名
+* fileType => 文件类型
+* sheetName => sheet页名
+*/
+export default function toExcel ({ th, data, fileName, fileType, sheetName }) 
+行注释 //
+
+### 命名
+
+页面目录 文件夹命名格式骆驼式命名法,例如:用户列表 userList 
+例如:商品模块
+store 商品
+    ├─ store 商品管理
+        ├─index.vue 首页
+        ├─ creatStore  新建商品
+            ├─ index.vue
+        ├─ sort 商品分类
+            ├─ index.vue
+        ├─storeAttr 商品规格
+            ├─ index.vue
+        ├─storeComment 商品评论
+            ├─ index.vue    
+
+页面命名、组建、文件夹 命名格式小驼峰命名法,例如:用户列表 userList
+
+类名函数命名 大驼峰式 例如:addUser
+变量命名 小驼峰式 例如:user 或者 userInfo
+常量 采用全大些下划线命名 例如:VUE_APP_API_URl
+
+### 文件管理规范
+views 页面模块必须件文件夹区分
+api 接口一个模块一个文件
+组建 一个组建一个文件夹
+plugins 插件一个插件一个文件夹
+vuex 路由状态管理,一个模块在modules 中建一个文件夹
+router 一个模块一个模块在modules 中建一个文件夹
+style 样式尽量采用iView自带组建,common.less 系统通用样式不要轻易动
+自定义通用样式 style.less,每次添加必须加注释,页面独立样式在在页面内写,后缀less 格式
+组建样式 styles 中添加文件夹 composents 对应components 目录新建样式文件
+utils 自定义工具js 独立命名,一般不用新建文件夹
+
+## 模块命名
+~~~
+├─ login 登录
+├─ dashboard 首页
+├─ store 商品管理
+├─ order 系统订单管理
+├─ distribution 分销
+├─ user 用户管理
+├─ content 内容管理
+├─ appSetting 各个应用模块功能管理公众号、小程序、支付宝、百度小程序、今日头条小程序 
+├─ marketing 营销管理 优惠劵 积分 秒杀
+├─ sms 设置 短信设置
+├─ systemSetting 设置 管理员权限 系统设置 物流设置
+├─ maintain 维护 配置分类 组合数据 表单配置
+├─ error-page 错误页
+
+~~~
+## 目录结构
+主要目录结构及说明:
+~~~
+├── public                         # 静态资源
+│   ├── favicon.ico                # favicon图标
+│   └── index.html                 # html 模板
+├── src                            # 源代码
+│   ├── api                        # 所有请求
+│   │    └──authInformation.js     # 有关版权的接口
+│   │    └──user.js                # 有关登录/用户的接口
+│   │    └──categoryApi.js         # 有关配置的接口
+│   │    └──dashboard.js           # 有关主页的接口
+│   │    └──logistics.js           # 有关城市数据、物流配置、运费模板的接口
+│   │    └──marketing.js           # 有关优惠券、视频号的接口
+│   │    └──merchant.js            # 有关商户的接口
+│   │    └──order.js               # 有关订单的接口
+│   │    └──role.js                # 有关权限的接口
+│   │    └──roleApi.js             # 有关菜单的接口
+│   │    └──product.js             # 有关商品的接口
+│   │    └──systemadmin.js         # 有关管理员的接口
+│   │    └──systemFormConfig.js    # 有关表单配置的接口
+│   │    └──systemSetting.js       # 有关上传文件的接口
+│   │    └──user.js                # 有关用户的接口
+│   ├── assets                 # 图片、svg 等静态资源
+│   ├── components            # 公共组件
+│   │    └──base       # 公共组件
+│   │    └──Breadcrumb        # 头部标题标签
+│   │    └──echartsNew        # 统计
+│   │    └──Category          # 分类
+│   │    └──FormGenerator     # 表单配置
+│   │    └──couponList        # 优惠劵列表
+│   │    └──detailUser        # 用户详情
+│   │    └──goodsList         # 商品列表
+│   │    └──Hamburger         # 导航收缩组件
+│   │    └──HeaderSearch      # 导航搜索组件
+│   │    └──linkaddress       # 页面设计弹窗组件
+│   │    └──orderDetail       # 订单详情组件
+│   │    └──RightPanel        # 右侧设置按钮,设置导航相关
+│   │    └──Screenfull        # 全屏
+│   │    └──SvgIcon           # svg图标
+│   │    └──Tinymce           # 富文本编辑器
+│   │    └──ThemePicker       # 右侧设置按钮,设置组题颜色
+│   │    └──UploadExcel       # 下载Excel
+│   │    └──uploadFrom        # 自定义表单上传组件
+│   │    └──userList          # 用户列表
+│   │    └──TopNav            # 顶部一级导航
+│   │    └──TimeSelect        # 时间段选择
+│   ├── layouts               # 导航布局
+│   │    ├──index             # 主页面
+│   │    ├──components        # 导航组件
+│   │        └──copyright     # 脚部版权信息
+│   │        └──Settings      # 右边小按钮,设置导航等
+│   │        └──Sidebar       # 侧边导航
+│   │        └──TagsView      # tab标签页导航
+│   │        └──Navbar        # 头部导航
+│   │        └──AppMain       # 导航路由
+│   │        └──index.js      # 组件引用
+│   │    └──mixins            # 自适应大小
+│   ├── libs                  # 公共js方法
+│   │    └──settingMer        # 配置请求地址
+│   │    └──modal-icon.js           # 图标库插件
+│   │    └──modal-parserFrom.js     # 自定义表单弹窗插件
+│   │    └──modal-sure.js           # 确定弹窗插件
+│   │    └──timeOptions.js          # 当前时间日期选择器特有的选项
+│   │    └──yearOptions.js          # 当前年份选择器特有的选项
+│   ├── views                 # 所有页面
+│   │    └──coupon                   # 优惠券
+│   │    └──login                    # 登录
+│   │         └──index               # 登录
+│   │    └──dashboard                # 首页
+│   │    └──product                  # 商品
+│   │         └──creatProduct        # 添加商品
+│   │         └──attr                # 商品规格
+│   │         └──category            # 商品分类
+│   │         └──comment             # 商品评论
+│   │         └──components          # 商品评论
+│   │              └──storeEdit      # 免审编辑库存
+│   │         └──guarantee           # 保障服务组合
+│   │    └──order                    # 订单管理
+│   │         └──index               # 订单列表
+│   │         └──orderSend           # 订单发货
+│   │         └──orderVideoSend      # 视频号订单发货
+│   │         └──refund              # 退款单
+│   │    └──systemSetting            # 设置
+│   │         └──administratorAuthority     # 管理权限
+│   │              └──adminList      # 管理员列表
+│   │              └──identityManager# 身份管理
+│   │              └──permissionRules# 权限规则
+│   │         └──deliverGoods        # 运费模板
+│   │              └──freightSet     # 运费模板 
+│   │         └──modifyStoreInfo           # 商户设置
+│   │         └──systemExport             # 数据导出
+│   │    └──user                     # 用户
+│   │         └──list                # 用户管理
+│   │    └──maintain                 # 维护 
+│   │         └──logistics           # 地址管理
+│   │         └──picture             # 素材管理
+│   │         └──user                # 个人中心
+│   │         └──sensitiveList       # 敏感日志操作 
+│   │    └──financial                # 财务
+│   │         └──capitalFlow         # 资金流水
+│   │         └──closingRecord       # 结算记录
+│   │         └──statement           # 账单管理
+│   │    └──videoChannel             # 视频号管理
+│   │         └──draftList           # 待审核列表
+│   │         └──productList         # 过审商品
+│   │    └──error-page               # 错误页
+│   │         └──404                 # 错误页404
+│   │         └──403                 # 错误页403
+│   ├── filters                      # 过滤器
+│   ├── router                       # 路由配置
+│   │    └──modules                  # 页面路由模块
+│   │         └──user.js             # 有关用户
+│   │         └──appSetting.js       # 有关应用
+│   │         └──coupon.js           # 有关优惠券
+│   │         └──order.js            # 有关订单
+│   │         └──finance.js          # 有关财务
+│   │         └──product.js          # 有关商品
+│   │         └──maintain.js         # 有关维护
+│   │         └──operation.js        # 有关设置
+│   │         └──videoChannel.js     # 有关视频号
+│   │    └──index.js                 # 路由的汇总
+│   ├── store                        # Vuex 状态管理
+│   ├── utils                        # 全局公用方法
+│   │    └──auth.js                  # Cookies管理
+│   │    └──request.js               # 请求封装
+│   │    └──settingMer.js            # 请求地址配置
+│   │    └──ZBKJIutil.js             # 公共函数工具
+│   │    └──validate.js              # 公共教校验工具
+│   │    └──parsing.js               # 通用js方法封装工具
+│   │    └──constants.js             # 全局静态变量工具
+│   │    └──clipboard.js             # 粘贴复制工具
+│   │    └──permission.js            # 权限判断
+│   ├── styles                       # 样式管理
+│   ├── permission.js                # 路由拦截
+│   ├── main.js                      # 入口文件 加载组件 初始化等
+│   └── App.vue                      # 入口页面
+├── tests                      # 测试
+├── .env.xxx                   # 环境变量配置
+├── .eslintrc.js               # eslint 配置项
+├── .babelrc                   # babel-loader 配置
+├── .travis.yml                # 自动化CI配置
+├── vue.config.js              # vue-cli 配置
+├── postcss.config.js          # postcss 配置
+└── package.json               # package.json
+
+
+~~~
+## 开发
+
+```bash
+# 克隆项目
+git clone https://gitee.com/ZhongBangKeJi/crmeb_java/
+
+# 进入项目目录
+cd ##
+
+# 安装依赖
+npm install
+
+# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
+npm install --registry=https://registry.npm.taobao.org
+
+# 启动服务
+npm run dev
+```
+
+浏览器访问 http://localhost:9527
+
+## 发布
+
+```bash
+# 构建测试环境
+npm run build:stage
+
+# 构建生产环境
+npm run build:prod
+```
+
+## 其它
+
+```bash
+# 预览发布环境效果
+npm run preview
+
+# 预览发布环境效果 + 静态资源分析
+npm run preview -- --report
+
+# 代码格式检查
+npm run lint
+
+# 代码格式检查并自动修复
+npm run lint -- --fix
+```
+
+

+ 11 - 0
mer_mer_admin/babel.config.js

@@ -0,0 +1,11 @@
+module.exports = {
+  presets: [
+    [
+      '@vue/app',
+      {
+        useBuiltIns: 'entry',
+        polyfills: ['es6.promise', 'es6.symbol'],
+      },
+    ],
+  ],
+};

+ 23 - 0
mer_mer_admin/jest.config.js

@@ -0,0 +1,23 @@
+module.exports = {
+  moduleFileExtensions: ['js', 'jsx', 'json', 'vue'],
+  transform: {
+    '^.+\\.vue$': 'vue-jest',
+    '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
+    '^.+\\.jsx?$': 'babel-jest',
+  },
+  moduleNameMapper: {
+    '^@/(.*)$': '<rootDir>/src/$1',
+  },
+  snapshotSerializers: ['jest-serializer-vue'],
+  testMatch: ['**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'],
+  collectCoverageFrom: [
+    'src/utils/**/*.{js,vue}',
+    '!src/utils/auth.js',
+    '!src/utils/request.js',
+    'src/components/**/*.{js,vue}',
+  ],
+  coverageDirectory: '<rootDir>/tests/unit/coverage',
+  // 'collectCoverage': true,
+  coverageReporters: ['lcov', 'text-summary'],
+  testURL: 'http://localhost/',
+};

+ 9 - 0
mer_mer_admin/jsconfig.json

@@ -0,0 +1,9 @@
+{
+  "compilerOptions": {
+    "baseUrl": "./",
+    "paths": {
+      "@/*": ["src/*"]
+    }
+  },
+  "exclude": ["node_modules", "dist"]
+}

+ 99 - 0
mer_mer_admin/package.json

@@ -0,0 +1,99 @@
+{
+  "name": "crmeb-java-webpc-admin",
+  "version": "4.2.1",
+  "description": "Java mall free open source CRMEB mall JAVA version, SpringBoot + Maven + Swagger + Mybatis Plus + Redis + Uniapp +Vue+elementUI Including mobile terminal, applet, PC background, Api interface; products, users, shopping carts, orders, points, Modules such as coupons, marketing, balance, permissions, roles, system settings, combined data, and drag-and-drop forms have greatly reduced the cost of second-opening.",
+  "author": "CRMEB",
+  "license": "MIT",
+  "scripts": {
+    "dev": "vue-cli-service serve --open",
+    "build:prod": "vue-cli-service build",
+    "build:stage": "vue-cli-service build --mode staging",
+    "preview": "node build/index.js --preview",
+    "prettier:comment": "自动格式化当前目录下的所有文件",
+    "prettier": "prettier --write .",
+    "lint": "eslint --ext .js,.vue src",
+    "test:unit": "jest --clearCache && vue-cli-service test:unit",
+    "test:ci": "npm run lint && npm run test:unit",
+    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
+    "new": "plop",
+    "serve_t": "set NODE_OPTIONS=\"--openssl-legacy-provider\" & npm run serve\n"
+  },
+  "keywords": [
+    "CRMEB Java"
+  ],
+  "repository": {
+    "type": "gitee",
+    "url": "https://gitee.com/ZhongBangKeJi/crmeb_java"
+  },
+  "dependencies": {
+    "@babel/parser": "^7.9.6",
+    "@riophae/vue-treeselect": "0.4.0",
+    "async-validator": "^1.11.2",
+    "axios": "^0.24.0",
+    "babel-polyfill": "^6.26.0",
+    "clipboard": "^2.0.4",
+    "core-js": "^2.6.11",
+    "crypto-js": "^4.2.0",
+    "echarts": "4.2.1",
+    "element-ui": "2.15.6",
+    "file-saver": "2.0.1",
+    "fuse.js": "3.4.4",
+    "js-cookie": "2.2.0",
+    "jsonlint": "1.6.3",
+    "jszip": "3.2.1",
+    "mpvue-calendar": "^2.3.7",
+    "normalize.css": "7.0.0",
+    "nprogress": "0.2.0",
+    "path-to-regexp": "2.4.0",
+    "qrcodejs2": "^0.0.2",
+    "sass": "1.26.2",
+    "sass-loader": "^7.2.0",
+    "screenfull": "^5.0.2",
+    "script-loader": "0.7.2",
+    "throttle-debounce": "^2.1.0",
+    "vconsole": "^3.3.2",
+    "vue": "2.6.10",
+    "vue-awesome-swiper": "^3.1.3",
+    "vue-cropper": "^0.5.8",
+    "vue-echarts": "^4.0.3",
+    "vue-router": "3.0.2",
+    "vue-ydui": "^1.2.6",
+    "vuedraggable": "^2.20.0",
+    "vuex": "3.1.0",
+    "wechat-jssdk": "^5.0.4",
+    "xlsx": "0.14.1"
+  },
+  "devDependencies": {
+    "@babel/core": "7.23.5",
+    "@babel/register": "7.0.0",
+    "@vue/cli-plugin-babel": "3.5.3",
+    "@vue/cli-plugin-unit-jest": "3.5.3",
+    "@vue/cli-service": "4.0.0",
+    "@vue/test-utils": "1.0.0-beta.29",
+    "babel-core": "7.0.0-bridge.0",
+    "babel-jest": "23.6.0",
+    "chalk": "2.4.2",
+    "chokidar": "^3.1.1",
+    "connect": "3.6.6",
+    "html-webpack-plugin": "3.2.0",
+    "mockjs": "1.0.1-beta3",
+    "plop": "2.3.0",
+    "prettier": "^2.5.1",
+    "runjs": "^4.3.2",
+    "script-ext-html-webpack-plugin": "2.1.3",
+    "script-loader": "^0.7.2",
+    "serve-static": "^1.13.2",
+    "svg-sprite-loader": "4.1.3",
+    "svgo": "1.2.0",
+    "vue-lazyload": "^1.3.3",
+    "vue-template-compiler": "2.6.10"
+  },
+  "engines": {
+    "node": ">=8.9",
+    "npm": ">= 3.0.0"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions"
+  ]
+}

+ 18 - 0
mer_mer_admin/plop-templates/component/index.hbs

@@ -0,0 +1,18 @@
+{{#if template}}
+  <template>
+    <div></div>
+  </template>
+{{/if}}
+
+{{#if script}}
+  <script>
+    export default { name: '{{properCase name}}', props: {}, data() { return {} }, created() {}, mounted() {}, methods:
+    {} }
+  </script>
+{{/if}}
+
+{{#if style}}
+  <style lang='scss' scoped>
+
+  </style>
+{{/if}}

+ 59 - 0
mer_mer_admin/plop-templates/component/prompt.js

@@ -0,0 +1,59 @@
+const { notEmpty } = require('../utils.js');
+
+module.exports = {
+  description: 'generate vue component',
+  prompts: [
+    {
+      type: 'input',
+      name: 'name',
+      message: 'component name please',
+      validate: notEmpty('name'),
+    },
+    {
+      type: 'checkbox',
+      name: 'blocks',
+      message: 'Blocks:',
+      choices: [
+        {
+          name: '<wxTemplate>',
+          value: 'template',
+          checked: true,
+        },
+        {
+          name: '<script>',
+          value: 'script',
+          checked: true,
+        },
+        {
+          name: 'style',
+          value: 'style',
+          checked: true,
+        },
+      ],
+      validate(value) {
+        if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
+          return 'Components require at least a <script> or <wxTemplate> tag.';
+        }
+        return true;
+      },
+    },
+  ],
+  actions: (data) => {
+    const name = '{{properCase name}}';
+    const actions = [
+      {
+        type: 'add',
+        path: `src/components/${name}/index.vue`,
+        templateFile: 'plop-templates/component/index.hbs',
+        data: {
+          name: name,
+          template: data.blocks.includes('template'),
+          script: data.blocks.includes('script'),
+          style: data.blocks.includes('style'),
+        },
+      },
+    ];
+
+    return actions;
+  },
+};

+ 15 - 0
mer_mer_admin/plop-templates/store/index.hbs

@@ -0,0 +1,15 @@
+{{#if state}}
+  const state = {}
+{{/if}}
+
+{{#if mutations}}
+  const mutations = {}
+{{/if}}
+
+{{#if actions}}
+  const actions = {}
+{{/if}}
+
+export default { namespaced: true,
+{{options}}
+}

+ 66 - 0
mer_mer_admin/plop-templates/store/prompt.js

@@ -0,0 +1,66 @@
+const { notEmpty } = require('../utils.js');
+
+module.exports = {
+  description: 'generate product',
+  prompts: [
+    {
+      type: 'input',
+      name: 'name',
+      message: 'product name please',
+      validate: notEmpty('name'),
+    },
+    {
+      type: 'checkbox',
+      name: 'blocks',
+      message: 'Blocks:',
+      choices: [
+        {
+          name: 'state',
+          value: 'state',
+          checked: true,
+        },
+        {
+          name: 'mutations',
+          value: 'mutations',
+          checked: true,
+        },
+        {
+          name: 'actions',
+          value: 'actions',
+          checked: true,
+        },
+      ],
+      validate(value) {
+        if (!value.includes('state') || !value.includes('mutations')) {
+          return 'product require at least state and mutations';
+        }
+        return true;
+      },
+    },
+  ],
+  actions(data) {
+    const name = '{{name}}';
+    const { blocks } = data;
+    const options = ['state', 'mutations'];
+    const joinFlag = `,
+  `;
+    if (blocks.length === 3) {
+      options.push('actions');
+    }
+
+    const actions = [
+      {
+        type: 'add',
+        path: `src/store/modules/${name}.js`,
+        templateFile: 'plop-templates/product/index.hbs',
+        data: {
+          options: options.join(joinFlag),
+          state: blocks.includes('state'),
+          mutations: blocks.includes('mutations'),
+          actions: blocks.includes('actions'),
+        },
+      },
+    ];
+    return actions;
+  },
+};

+ 9 - 0
mer_mer_admin/plop-templates/utils.js

@@ -0,0 +1,9 @@
+exports.notEmpty = (name) => {
+  return (v) => {
+    if (!v || v.trim === '') {
+      return `${name} is required`;
+    } else {
+      return true;
+    }
+  };
+};

+ 18 - 0
mer_mer_admin/plop-templates/view/index.hbs

@@ -0,0 +1,18 @@
+{{#if template}}
+  <template>
+    <div></div>
+  </template>
+{{/if}}
+
+{{#if script}}
+  <script>
+    export default { name: '{{properCase name}}', props: {}, data() { return {} }, created() {}, mounted() {}, methods:
+    {} }
+  </script>
+{{/if}}
+
+{{#if style}}
+  <style lang='scss' scoped>
+
+  </style>
+{{/if}}

+ 59 - 0
mer_mer_admin/plop-templates/view/prompt.js

@@ -0,0 +1,59 @@
+const { notEmpty } = require('../utils.js');
+
+module.exports = {
+  description: 'generate a view',
+  prompts: [
+    {
+      type: 'input',
+      name: 'name',
+      message: 'view name please',
+      validate: notEmpty('name'),
+    },
+    {
+      type: 'checkbox',
+      name: 'blocks',
+      message: 'Blocks:',
+      choices: [
+        {
+          name: '<wxTemplate>',
+          value: 'template',
+          checked: true,
+        },
+        {
+          name: '<script>',
+          value: 'script',
+          checked: true,
+        },
+        {
+          name: 'style',
+          value: 'style',
+          checked: true,
+        },
+      ],
+      validate(value) {
+        if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
+          return 'View require at least a <script> or <wxTemplate> tag.';
+        }
+        return true;
+      },
+    },
+  ],
+  actions: (data) => {
+    const name = '{{name}}';
+    const actions = [
+      {
+        type: 'add',
+        path: `src/views/${name}/index.vue`,
+        templateFile: 'plop-templates/view/index.hbs',
+        data: {
+          name: name,
+          template: data.blocks.includes('template'),
+          script: data.blocks.includes('script'),
+          style: data.blocks.includes('style'),
+        },
+      },
+    ];
+
+    return actions;
+  },
+};

+ 9 - 0
mer_mer_admin/plopfile.js

@@ -0,0 +1,9 @@
+const viewGenerator = require('./plop-templates/view/prompt');
+const componentGenerator = require('./plop-templates/component/prompt');
+const storeGenerator = require('./plop-templates/store/prompt.js');
+
+module.exports = function (plop) {
+  plop.setGenerator('view', viewGenerator);
+  plop.setGenerator('component', componentGenerator);
+  plop.setGenerator('store', storeGenerator);
+};

+ 5 - 0
mer_mer_admin/postcss.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  plugins: {
+    autoprefixer: {},
+  },
+};

BIN
mer_mer_admin/public/favicon.ico


+ 23 - 0
mer_mer_admin/public/index.html

@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="renderer" content="webkit">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+    <meta name="author" content="CRMEB! Team and CRMEB UI Team" />
+    <meta name="copyright" content="2001-2013 CRMEB Inc." />
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <title><%= webpackConfig.name %></title>
+  </head>
+  <body>
+    <script src="<%= BASE_URL %>static/tinymce4.7.5/tinymce.min.js"></script>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+    <div class="pre-loader" id="pre-loader">
+      <div class="inner one"></div>
+      <div class="inner two"></div>
+      <div class="inner three"></div>
+    </div>
+  </body>
+</html>

+ 38 - 0
mer_mer_admin/public/preview.html

@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="zh">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <title>form-generator-preview</title>
+    <link href="https://cdn.bootcss.com/element-ui/2.12.0/theme-chalk/index.css" rel="stylesheet">
+    <script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
+    <script src="https://cdn.bootcss.com/vue-router/3.1.3/vue-router.min.js"></script>
+    <!-- <script src="https://cdn.bootcss.com/axios/0.19.0/axios.min.js"></script> -->
+    <script src="https://cdn.bootcss.com/element-ui/2.12.0/index.js"></script>
+    <style>
+      body{
+        margin: 0;
+        padding: 0;
+        overflow-x: hidden;
+        -moz-osx-font-smoothing: grayscale;
+        -webkit-font-smoothing: antialiased;
+        text-rendering: optimizeLegibility;
+        height: calc(100vh - 33px);
+        padding: 12px;
+        box-sizing: border-box;
+        font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;
+      }
+      input, textarea{
+        font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;
+      }
+    </style>
+  </head>
+  <body>
+    <noscript>
+      <strong>抱歉,javascript被禁用,请开启后重试。</strong>
+    </noscript>
+    <div id="previewApp"></div>
+  </body>
+</html>

+ 230 - 0
mer_mer_admin/public/static/tinymce4.7.5/langs/zh_CN.js

@@ -0,0 +1,230 @@
+tinymce.addI18n('zh_CN',{
+"Cut": "\u526a\u5207",
+"Heading 5": "\u6807\u98985",
+"Header 2": "\u6807\u98982",
+"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u5bf9\u526a\u8d34\u677f\u7684\u8bbf\u95ee\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u952e\u8fdb\u884c\u590d\u5236\u7c98\u8d34\u3002",
+"Heading 4": "\u6807\u98984",
+"Div": "Div\u533a\u5757",
+"Heading 2": "\u6807\u98982",
+"Paste": "\u7c98\u8d34",
+"Close": "\u5173\u95ed",
+"Font Family": "\u5b57\u4f53",
+"Pre": "\u9884\u683c\u5f0f\u6587\u672c",
+"Align right": "\u53f3\u5bf9\u9f50",
+"New document": "\u65b0\u6587\u6863",
+"Blockquote": "\u5f15\u7528",
+"Numbered list": "\u7f16\u53f7\u5217\u8868",
+"Heading 1": "\u6807\u98981",
+"Headings": "\u6807\u9898",
+"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
+"Formats": "\u683c\u5f0f",
+"Headers": "\u6807\u9898",
+"Select all": "\u5168\u9009",
+"Header 3": "\u6807\u98983",
+"Blocks": "\u533a\u5757",
+"Undo": "\u64a4\u6d88",
+"Strikethrough": "\u5220\u9664\u7ebf",
+"Bullet list": "\u9879\u76ee\u7b26\u53f7",
+"Header 1": "\u6807\u98981",
+"Superscript": "\u4e0a\u6807",
+"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
+"Font Sizes": "\u5b57\u53f7",
+"Subscript": "\u4e0b\u6807",
+"Header 6": "\u6807\u98986",
+"Redo": "\u91cd\u590d",
+"Paragraph": "\u6bb5\u843d",
+"Ok": "\u786e\u5b9a",
+"Bold": "\u7c97\u4f53",
+"Code": "\u4ee3\u7801",
+"Italic": "\u659c\u4f53",
+"Align center": "\u5c45\u4e2d",
+"Header 5": "\u6807\u98985",
+"Heading 6": "\u6807\u98986",
+"Heading 3": "\u6807\u98983",
+"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
+"Header 4": "\u6807\u98984",
+"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002",
+"Underline": "\u4e0b\u5212\u7ebf",
+"Cancel": "\u53d6\u6d88",
+"Justify": "\u4e24\u7aef\u5bf9\u9f50",
+"Inline": "\u6587\u672c",
+"Copy": "\u590d\u5236",
+"Align left": "\u5de6\u5bf9\u9f50",
+"Visual aids": "\u7f51\u683c\u7ebf",
+"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
+"Square": "\u65b9\u5757",
+"Default": "\u9ed8\u8ba4",
+"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
+"Circle": "\u7a7a\u5fc3\u5706",
+"Disc": "\u5b9e\u5fc3\u5706",
+"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
+"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
+"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
+"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002",
+"Name": "\u540d\u79f0",
+"Anchor": "\u951a\u70b9",
+"Id": "\u6807\u8bc6\u7b26",
+"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
+"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
+"Special character": "\u7279\u6b8a\u7b26\u53f7",
+"Source code": "\u6e90\u4ee3\u7801",
+"Language": "\u8bed\u8a00",
+"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
+"B": "B",
+"R": "R",
+"G": "G",
+"Color": "\u989c\u8272",
+"Right to left": "\u4ece\u53f3\u5230\u5de6",
+"Left to right": "\u4ece\u5de6\u5230\u53f3",
+"Emoticons": "\u8868\u60c5",
+"Robots": "\u673a\u5668\u4eba",
+"Document properties": "\u6587\u6863\u5c5e\u6027",
+"Title": "\u6807\u9898",
+"Keywords": "\u5173\u952e\u8bcd",
+"Encoding": "\u7f16\u7801",
+"Description": "\u63cf\u8ff0",
+"Author": "\u4f5c\u8005",
+"Fullscreen": "\u5168\u5c4f",
+"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
+"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
+"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
+"General": "\u666e\u901a",
+"Advanced": "\u9ad8\u7ea7",
+"Source": "\u5730\u5740",
+"Border": "\u8fb9\u6846",
+"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
+"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
+"Image description": "\u56fe\u7247\u63cf\u8ff0",
+"Style": "\u6837\u5f0f",
+"Dimensions": "\u5927\u5c0f",
+"Insert image": "\u63d2\u5165\u56fe\u7247",
+"Image": "\u56fe\u7247",
+"Zoom in": "\u653e\u5927",
+"Contrast": "\u5bf9\u6bd4\u5ea6",
+"Back": "\u540e\u9000",
+"Gamma": "\u4f3d\u9a6c\u503c",
+"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
+"Resize": "\u8c03\u6574\u5927\u5c0f",
+"Sharpen": "\u9510\u5316",
+"Zoom out": "\u7f29\u5c0f",
+"Image options": "\u56fe\u7247\u9009\u9879",
+"Apply": "\u5e94\u7528",
+"Brightness": "\u4eae\u5ea6",
+"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
+"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
+"Edit image": "\u7f16\u8f91\u56fe\u7247",
+"Color levels": "\u989c\u8272\u5c42\u6b21",
+"Crop": "\u88c1\u526a",
+"Orientation": "\u65b9\u5411",
+"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
+"Invert": "\u53cd\u8f6c",
+"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
+"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
+"Remove link": "\u5220\u9664\u94fe\u63a5",
+"Url": "\u5730\u5740",
+"Text to display": "\u663e\u793a\u6587\u5b57",
+"Anchors": "\u951a\u70b9",
+"Insert link": "\u63d2\u5165\u94fe\u63a5",
+"Link": "\u94fe\u63a5",
+"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
+"None": "\u65e0",
+"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f",
+"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
+"Target": "\u6253\u5f00\u65b9\u5f0f",
+"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f",
+"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
+"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
+"Media": "\u5a92\u4f53",
+"Alternative source": "\u955c\u50cf",
+"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
+"Insert video": "\u63d2\u5165\u89c6\u9891",
+"Poster": "\u5c01\u9762",
+"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
+"Embed": "\u5185\u5d4c",
+"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
+"Page break": "\u5206\u9875\u7b26",
+"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
+"Preview": "\u9884\u89c8",
+"Print": "\u6253\u5370",
+"Save": "\u4fdd\u5b58",
+"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
+"Replace": "\u66ff\u6362",
+"Next": "\u4e0b\u4e00\u4e2a",
+"Whole words": "\u5168\u5b57\u5339\u914d",
+"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
+"Replace with": "\u66ff\u6362\u4e3a",
+"Find": "\u67e5\u627e",
+"Replace all": "\u5168\u90e8\u66ff\u6362",
+"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
+"Prev": "\u4e0a\u4e00\u4e2a",
+"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
+"Finish": "\u5b8c\u6210",
+"Ignore all": "\u5168\u90e8\u5ffd\u7565",
+"Ignore": "\u5ffd\u7565",
+"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
+"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
+"Rows": "\u884c",
+"Height": "\u9ad8",
+"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
+"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
+"Border color": "\u8fb9\u6846\u989c\u8272",
+"Column group": "\u5217\u7ec4",
+"Row": "\u884c",
+"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
+"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
+"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
+"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
+"Row type": "\u884c\u7c7b\u578b",
+"Insert table": "\u63d2\u5165\u8868\u683c",
+"Body": "\u8868\u4f53",
+"Caption": "\u6807\u9898",
+"Footer": "\u8868\u5c3e",
+"Delete row": "\u5220\u9664\u884c",
+"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
+"Scope": "\u8303\u56f4",
+"Delete table": "\u5220\u9664\u8868\u683c",
+"H Align": "\u6c34\u5e73\u5bf9\u9f50",
+"Top": "\u9876\u90e8\u5bf9\u9f50",
+"Header cell": "\u8868\u5934\u5355\u5143\u683c",
+"Column": "\u5217",
+"Row group": "\u884c\u7ec4",
+"Cell": "\u5355\u5143\u683c",
+"Middle": "\u5782\u76f4\u5c45\u4e2d",
+"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
+"Copy row": "\u590d\u5236\u884c",
+"Row properties": "\u884c\u5c5e\u6027",
+"Table properties": "\u8868\u683c\u5c5e\u6027",
+"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
+"V Align": "\u5782\u76f4\u5bf9\u9f50",
+"Header": "\u8868\u5934",
+"Right": "\u53f3\u5bf9\u9f50",
+"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
+"Cols": "\u5217",
+"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
+"Width": "\u5bbd",
+"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
+"Left": "\u5de6\u5bf9\u9f50",
+"Cut row": "\u526a\u5207\u884c",
+"Delete column": "\u5220\u9664\u5217",
+"Center": "\u5c45\u4e2d",
+"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
+"Insert template": "\u63d2\u5165\u6a21\u677f",
+"Templates": "\u6a21\u677f",
+"Background color": "\u80cc\u666f\u8272",
+"Custom...": "\u81ea\u5b9a\u4e49...",
+"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
+"No color": "\u65e0",
+"Text color": "\u6587\u5b57\u989c\u8272",
+"Table of Contents": "\u5185\u5bb9\u5217\u8868",
+"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
+"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
+"Words: {0}": "\u5b57\u6570\uff1a{0}",
+"Insert": "\u63d2\u5165",
+"File": "\u6587\u4ef6",
+"Edit": "\u7f16\u8f91",
+"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9",
+"Tools": "\u5de5\u5177",
+"View": "\u89c6\u56fe",
+"Table": "\u8868\u683c",
+"Format": "\u683c\u5f0f"
+});

+ 138 - 0
mer_mer_admin/public/static/tinymce4.7.5/plugins/codesample/css/prism.css

@@ -0,0 +1,138 @@
+/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+
+code[class*="language-"],
+pre[class*="language-"] {
+  color: black;
+  text-shadow: 0 1px white;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  direction: ltr;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
+code[class*="language-"]::selection, code[class*="language-"] ::selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+@media print {
+  code[class*="language-"],
+  pre[class*="language-"] {
+    text-shadow: none;
+  }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+  padding: 1em;
+  margin: .5em 0;
+  overflow: auto;
+}
+
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+  background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+  padding: .1em;
+  border-radius: .3em;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #a67f59;
+  background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function {
+  color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}
+

BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-cool.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-cry.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-embarassed.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-foot-in-mouth.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-frown.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-innocent.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-kiss.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-laughing.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-money-mouth.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-sealed.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-smile.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-surprised.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-tongue-out.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-undecided.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-wink.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-yell.gif


+ 154 - 0
mer_mer_admin/public/static/tinymce4.7.5/plugins/visualblocks/css/visualblocks.css

@@ -0,0 +1,154 @@
+.mce-visualblocks p {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h1 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h2 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h3 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h4 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h5 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h6 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks div:not([data-mce-bogus]) {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks section {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks article {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks blockquote {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks address {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks pre {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks figure {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks hgroup {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks aside {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks figcaption {
+  border: 1px dashed #BBB;
+}
+
+.mce-visualblocks ul {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks ol {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks dl {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
+  background-repeat: no-repeat;
+}

File diff suppressed because it is too large
+ 1 - 0
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/content.inline.min.css


File diff suppressed because it is too large
+ 1 - 0
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/content.min.css


BIN
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-mobile.woff


BIN
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.eot


File diff suppressed because it is too large
+ 63 - 0
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.svg


BIN
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.ttf


BIN
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.woff


BIN
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.eot


File diff suppressed because it is too large
+ 131 - 0
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.svg


BIN
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.ttf


BIN
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.woff


BIN
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/img/anchor.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/img/loader.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/img/object.gif


BIN
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/img/trans.gif


File diff suppressed because it is too large
+ 1 - 0
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/skin.min.css


File diff suppressed because it is too large
+ 1 - 0
mer_mer_admin/public/static/tinymce4.7.5/skins/lightgray/skin.min.css.map


File diff suppressed because it is too large
+ 2 - 0
mer_mer_admin/public/static/tinymce4.7.5/tinymce.min.js


+ 100 - 0
mer_mer_admin/src/App.vue

@@ -0,0 +1,100 @@
+<template>
+  <div id="app">
+    <router-view v-if="isRouterAlive" />
+    <Setings ref="setingsRef" />
+  </div>
+</template>
+
+<script>
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+import { Local } from '@/utils/storage.js';
+import Setings from '@/layout/navBars/breadcrumb/setings.vue';
+
+export default {
+  name: 'App',
+  components: { Setings },
+
+  provide() {
+    return {
+      reload: this.reload,
+    };
+  },
+  data() {
+    return {
+      isRouterAlive: true,
+    };
+  },
+  watch: {
+    // 监听路由 控制侧边栏显示 标记当前顶栏菜单(如需要)
+    $route(to, from) {
+      const onRoutes = to.meta.activeMenu ? to.meta.activeMenu : to.meta.path;
+      this.$store.commit('menu/setActivePath', onRoutes);
+      if (to.name == 'crud_crud') {
+        this.$store.state.user.oneLvRoutes.map((e) => {
+          if (e.path === to.path) {
+            to.meta.title = e.title;
+          }
+        });
+      }
+      //商品添加、优惠券
+      if (['creatProduct', 'coupon'].includes(to.name)) {
+        let route = to.matched[1].path.split(':')[0];
+        this.$store.state.user.oneLvRoutes.map((e) => {
+          if (route.indexOf(e.path) != -1) {
+            to.meta.title = `${e.title} ${to.params.id ? 'ID:' + to.params.id : ''}`;
+          }
+        });
+      }
+      //个人中心、修改密码
+      if (['MaintainUser'].includes(to.name)) {
+        let route = to.matched[1].path.split(':')[0];
+        this.$store.state.user.oneLvRoutes.map((e) => {
+          if (route.indexOf(e.path) != -1) {
+            let params = to.params.type;
+            to.meta.title = params === 'users' ? '个人中心' : '修改密码';
+          }
+        });
+      }
+    },
+  },
+  mounted() {
+    this.openSetingsDrawer();
+    this.getLayoutThemeConfig();
+  },
+  methods: {
+    reload() {
+      this.isRouterAlive = false;
+      this.$nextTick(function () {
+        this.isRouterAlive = true;
+      });
+    },
+    // 布局配置弹窗打开
+    openSetingsDrawer() {
+      this.bus.$on('openSetingsDrawer', () => {
+        this.$refs.setingsRef.openDrawer();
+      });
+    },
+    // 获取缓存中的布局配置
+    getLayoutThemeConfig() {
+      if (Local.get('JavaMerThemeConfigPrev')) {
+        this.$store.dispatch('themeConfig/setThemeConfig', Local.get('JavaMerThemeConfigPrev'));
+        document.documentElement.style.cssText = Local.get('JavaMerThemeConfigStyle');
+      } else {
+        Local.set('JavaMerThemeConfigPrev', this.$store.state.themeConfig.themeConfig);
+      }
+    },
+  },
+  destroyed() {
+    this.bus.$off('openSetingsDrawer');
+  },
+};
+</script>
+<style></style>

+ 178 - 0
mer_mer_admin/src/api/article.js

@@ -0,0 +1,178 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * 删除文章
+ * @param id
+ * @constructor
+ */
+export function DelArticle(id) {
+  return request({
+    url: `/admin/merchant/article/delete/${id}`,
+    method: 'POST',
+  });
+}
+
+/**
+ * 文章详情
+ * @param id
+ * @constructor
+ */
+export function InfoArticle(id) {
+  return request({
+    url: `/admin/merchant/article/info/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 文章列表
+ * @param pram
+ * @constructor
+ */
+export function ListArticle(pram) {
+  const data = {
+    author: pram.author,
+    cid: pram.cid,
+    page: pram.page,
+    limit: pram.limit,
+    title: pram.title,
+    searchType: pram.searchType,
+    content: pram.content,
+  };
+  return request({
+    url: '/admin/merchant/article/list',
+    method: 'GET',
+    params: data,
+  });
+}
+
+/**
+ * 新增文章
+ * @param pram
+ * @constructor
+ */
+export function AddArticle(pram) {
+  const data = {
+    author: pram.author,
+    cid: pram.cid,
+    content: pram.content,
+    cover: pram.cover,
+    isBanner: pram.isBanner,
+    isHot: pram.isHot,
+    sort: pram.sort,
+    synopsis: pram.synopsis,
+    title: pram.title,
+    url: pram.url,
+  };
+  return request({
+    url: '/admin/merchant/article/save',
+    method: 'post',
+    data: data,
+  });
+}
+
+/**
+ * 更新文章
+ * @param pram
+ * @constructor
+ */
+export function UpdateArticle(pram) {
+  const data = {
+    author: pram.author,
+    cid: pram.cid,
+    content: pram.content,
+    cover: pram.cover,
+    isBanner: pram.isBanner,
+    isHot: pram.isHot,
+    sort: pram.sort,
+    synopsis: pram.synopsis,
+    title: pram.title,
+    id: pram.id,
+  };
+  return request({
+    url: '/admin/merchant/article/update',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 新增文章分类
+ * @param data
+ * @constructor
+ */
+export function articleCategoryAddApi(data) {
+  return request({
+    url: '/admin/merchant/article/category/add',
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 删除文章分类
+ * @param data
+ * @constructor
+ */
+export function articleCategoryDelApi(row) {
+  return request({
+    url: `admin/merchant/article/category/delete/${row.id}`,
+    method: 'POST',
+  });
+}
+
+/**
+ * 文章分类分页列表
+ * @constructor
+ */
+export function articleCategoryListApi() {
+  return request({
+    url: `admin/merchant/article/category/list`,
+    method: 'GET',
+  });
+}
+
+/**
+ * 修改文章分类
+ * @param data
+ * @constructor
+ */
+export function articleCategoryUpdateApi(data) {
+  return request({
+    url: `admin/merchant/article/category/update`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 文章开关
+ * @param data
+ */
+export function articleSwitchApi(id) {
+  return request({
+    url: `/admin/merchant/article/switch/${id}`,
+    method: 'POST',
+  });
+}
+
+/**
+ * 文章分类开关
+ * @param data
+ */
+export function articleCategorySwitchApi(id) {
+  return request({
+    url: `/admin/merchant/article/category/switch/${id}`,
+    method: 'POST',
+  });
+}

+ 52 - 0
mer_mer_admin/src/api/authInformation.js

@@ -0,0 +1,52 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * 获取版权信息
+ */
+export function copyrightInfoApi() {
+  return request({
+    url: '/admin/merchant/copyright/get/company/info',
+    method: 'get',
+  });
+}
+
+/**
+ * @description 账号登录检测
+ */
+export function accountDetectionApi(data) {
+  return request({
+    url: '/admin/merchant/login/account/detection',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 获取移动端域名
+ */
+export function frontDomainApi() {
+  return request({
+    url: '/publicly/config/get/front/domain',
+    method: 'get',
+  });
+}
+
+/**
+ * 获取移动端主题色
+ */
+export function getSystemColorApi() {
+  return request({
+    url: '/publicly/config/get/change/color',
+    method: 'get',
+  });
+}

+ 154 - 0
mer_mer_admin/src/api/categoryApi.js

@@ -0,0 +1,154 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * 新增分类
+ * @param pram
+ */
+export function addCategroy(pram) {
+  const data = {
+    extra: pram.extra,
+    name: pram.name,
+    pid: pram.pid,
+    sort: pram.sort,
+    status: pram.status,
+    type: pram.type,
+    url: pram.url,
+    owner: pram.owner,
+  };
+  return request({
+    url: '/admin/merchant/category/save',
+    method: 'POST',
+    data: data,
+  });
+}
+
+/**
+ * 分类详情
+ * @param pram
+ */
+export function infoCategroy(pram) {
+  return request({
+    url: `/admin/merchant/category/info/${pram}`,
+    method: 'GET',
+  });
+}
+
+/**
+ * 删除分类
+ * @param pram
+ */
+export function deleteCategroy(pram) {
+  return request({
+    url: `/admin/merchant/category/delete/${pram}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 分类列表
+ * @param pram
+ */
+export function listCategroy(pram) {
+  const data = {
+    limit: pram.limit,
+    name: pram.name,
+    page: pram.page,
+    pid: pram.pid,
+    status: pram.status,
+    type: pram.type,
+  };
+  return request({
+    url: '/admin/merchant/category/list',
+    method: 'GET',
+    params: data,
+  });
+}
+
+/**
+ * 分类数据tree数据
+ * @param pram
+ */
+export function treeCategroy(pram) {
+  const data = {
+    type: pram.type,
+    status: pram.status,
+    name: pram.name,
+    owner: pram.owner,
+  };
+  return request({
+    url: '/admin/merchant/category/list/tree',
+    method: 'GET',
+    params: data,
+  });
+}
+
+/**
+ * 更新分类
+ * @param pram
+ */
+export function updateCategroy(pram) {
+  const data = {
+    extra: pram.extra,
+    name: pram.name,
+    pid: pram.pid,
+    sort: pram.sort,
+    status: pram.status,
+    type: pram.type,
+    url: pram.url,
+    id: pram.id,
+    owner: pram.owner,
+  };
+  return request({
+    url: `/admin/merchant/category/update/${pram.id}`,
+    method: 'POST',
+    params: data,
+  });
+}
+
+/**
+ * 根据id集合查询对应分类列表
+ * @param pram
+ */
+export function categroyByIds(pram) {
+  const data = {
+    ids: pram.ids,
+  };
+  return request({
+    url: '/admin/merchant/category/list/ids',
+    method: 'GET',
+    params: data,
+  });
+}
+
+/**
+ * 修改 显示关闭状态
+ * @param pram
+ */
+export function categroyUpdateStatus(id) {
+  return request({
+    url: `/admin/merchant/category/updateStatus/${id}`,
+    method: 'GET',
+  });
+}
+
+/**
+ * 文章详情
+ * @param pram
+ */
+export function articleInfoApi(params) {
+  return request({
+    url: `/admin/merchant/article/info`,
+    method: 'GET',
+    params,
+  });
+}

+ 91 - 0
mer_mer_admin/src/api/dashboard.js

@@ -0,0 +1,91 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+// 首页数据概览
+export function viewModelApi() {
+  return request({
+    url: '/admin/merchant/statistics/home/index',
+    method: 'GET',
+  });
+}
+
+// 用户曲线图
+export function chartUserApi() {
+  return request({
+    url: '/admin/statistics/home/chart/user',
+    method: 'get',
+  });
+}
+
+// 用户购买统计
+export function chartBuyApi() {
+  return request({
+    url: '/admin/statistics/home/chart/user/buy',
+    method: 'get',
+  });
+}
+
+// 订单量趋势 30天
+export function chartOrder30Api() {
+  return request({
+    url: '/admin/statistics/home/chart/order',
+    method: 'get',
+  });
+}
+
+// 订单量趋势 月
+export function chartOrderMonthApi() {
+  return request({
+    url: '/admin/statistics/home/chart/order/month',
+    method: 'get',
+  });
+}
+
+// 订单量趋势 周
+export function chartOrderWeekApi() {
+  return request({
+    url: '/admin/statistics/home/chart/order/week',
+    method: 'get',
+  });
+}
+
+// 订单量趋势 年
+export function chartOrderYearApi() {
+  return request({
+    url: '/admin/statistics/home/chart/order/year',
+    method: 'get',
+  });
+}
+
+// 首页经营数据
+export function businessData() {
+  return request({
+    url: '/admin/merchant/statistics/home/operating/data',
+    method: 'get',
+  });
+}
+
+// 商品浏览量排行榜
+export function pageviewDataApi() {
+  return request({
+    url: '/admin/merchant/statistics/home/product/pageview/ranking',
+    method: 'get',
+  });
+}
+
+// 商品支付排行榜
+export function payDataApi() {
+  return request({
+    url: '/admin/merchant/statistics/home/product/pay/ranking',
+    method: 'get',
+  });
+}

+ 54 - 0
mer_mer_admin/src/api/deliveryPersonnel.js

@@ -0,0 +1,54 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * @description 商户配送人员分页列表
+ */
+export function personnelListApi(params) {
+  return request({
+    url: '/admin/merchant/delivery/personnel/page',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description 新增商户配送人员
+ */
+export function personnelSaveApi(data) {
+  return request({
+    url: '/admin/merchant/delivery/personnel/save',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 编辑商户配送人员
+ */
+export function personnelEditApi(data) {
+  return request({
+    url: '/admin/merchant/delivery/personnel/edit',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 删除商户配送人员
+ */
+export function personnelDeleteApi(id) {
+  return request({
+    url: `admin/merchant/delivery/personnel/delete/${id}`,
+    method: 'post',
+  });
+}

+ 109 - 0
mer_mer_admin/src/api/devise.js

@@ -0,0 +1,109 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * @description 新增商户装修模板
+ */
+export function pagediySaveApi(data) {
+  return request({
+    url: '/admin/merchant/page/diy/save',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 商户装修模板分页列表
+ */
+export function pagediyListApi(params) {
+  return request({
+    url: '/admin/merchant/page/diy/page',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description diy 详情
+ */
+export function pagediyInfoApi(id) {
+  return request({
+    url: `/admin/merchant/page/diy/info/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * @description 编辑商户装修模板
+ */
+export function pagediyUpdateApi(data) {
+  return request({
+    url: `/admin/merchant/page/diy/update`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 设置商户装修默认首页
+ */
+export function pagediySetdefaultApi(id) {
+  return request({
+    url: `/admin/merchant/page/diy/set/default/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * @description 删除商户装修模板
+ */
+export function pagediyDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/page/diy/delete/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 获取商户装修默认首页ID
+ * @returns {*}
+ */
+export function pagediyGetSetHome() {
+  return request({
+    url: `/admin/merchant/page/diy/get/default/id`,
+    method: 'get',
+  });
+}
+
+/**
+ * 获取小程序二维码
+ * @returns {*}
+ */
+export function wechatQrcodeApi(data) {
+  return request({
+    url: `/publicly/wechat/mini/get/qrcode`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 编辑商户装修模板名称
+ * @returns {*}
+ */
+export function pagediyUpdatenameApi(data) {
+  return request({
+    url: `/admin/merchant/page/diy/update/name`,
+    method: 'post',
+    data,
+  });
+}

+ 166 - 0
mer_mer_admin/src/api/finance.js

@@ -0,0 +1,166 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+import request from '@/utils/request';
+import req from './req';
+
+/**
+ * @description 财务对账 -- 对账单列表
+ */
+export function reconciliationListApi(data) {
+  return request.get(`store/order/reconciliation/lst`, data);
+}
+
+/**
+ * @description 财务对账 -- 确认打款
+ */
+export function reconciliationStatusApi(id, data) {
+  return request.post(`store/order/reconciliation/status/${id}`, data);
+}
+
+/**
+ * @description 财务对账 -- 查看订单
+ */
+export function reconciliationOrderApi(id, data) {
+  return request.get(`store/order/reconciliation/${id}/order`, data);
+}
+
+/**
+ * @description 财务对账 -- 退款订单
+ */
+export function reconciliationRefundApi(id, data) {
+  return request.get(`store/order/reconciliation/${id}/refund`, data);
+}
+
+/**
+ * @description 财务对账 -- 备注
+ */
+export function reconciliationMarkApi(id) {
+  return request.get(`store/order/reconciliation/mark/${id}/form`);
+}
+/**
+ * @description 资金流水 -- 列表
+ */
+export function capitalFlowLstApi(params) {
+  return request({
+    url: `admin/merchant/finance/funds/flow`,
+    method: 'get',
+    params,
+  });
+}
+/**
+ * @description 资金流水 -- 导出
+ */
+export function capitalFlowExportApi(data) {
+  return request.get(`financial_record/export`, data);
+}
+/**
+ * @description 转账记录 -- 导出
+ */
+export function transferRecordsExportApi(data) {
+  return request.get(`financial/export`, data);
+}
+/**
+ * @description 结算申请
+ */
+export function closingApplyApi(data) {
+  return request({
+    url: 'admin/merchant/finance/closing/apply',
+    method: 'post',
+    data,
+  });
+}
+/**
+ * @description 结算记录分页列表
+ */
+export function closingRecordListApi(params) {
+  return request({
+    url: 'admin/merchant/finance/closing/record/list',
+    method: 'GET',
+    params,
+  });
+}
+/**
+ * @description 获取结算申请基础信息
+ */
+export function closingBaseInfoApi() {
+  return request({
+    url: `admin/merchant/finance/closing/base/info`,
+    method: 'GET',
+  });
+}
+
+/**
+ * @description 结算记录详情
+ */
+export function closingDetailApi(id) {
+  return request({
+    url: `admin/merchant/finance/closing/record/detail/${id}`,
+    method: 'GET',
+  });
+}
+
+/**
+ * @description 账单管理 日帐单管理分页列表
+ */
+export function dayStatementApi(params) {
+  return request({
+    url: `admin/merchant/finance/daily/statement/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description 账单管理 月帐单管理分页列表
+ */
+export function monthStatementApi(params) {
+  return request({
+    url: `admin/merchant/finance/month/statement/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description 申请转账 -- 备注
+ */
+export function transferMarkApi(id) {
+  return request.get(`financial/mark/${id}/form`);
+}
+/**
+ * @description 财务账单 -- 列表
+ */
+export function financialLstApi(data) {
+  return request.get(`financial_record/lst`, data);
+}
+/**
+ * @description 财务账单 -- 详情
+ */
+export function financialDetailApi(type, data) {
+  return request.get(`financial_record/detail/${type}`, data);
+}
+/**
+ * @description 财务账单 -- 头部数据
+ */
+export function finaHeaderDataApi(data) {
+  return request.get(`financial_record/title`, data);
+}
+/**
+ * @description 财务账单 -- 下载账单
+ */
+export function downloadFinancialApi(type, data) {
+  return request.get(`financial_record/detail_export/${type}`, data);
+}
+/**
+ * @description 资金流水 -- 统计数据
+ */
+export function getStatisticsApi(data) {
+  return request.get(`financial_record/count`, data);
+}

+ 154 - 0
mer_mer_admin/src/api/group.js

@@ -0,0 +1,154 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+// ------------------------拼团活动----------------------------------------
+
+/**
+ * 新增
+ * @param
+ */
+export function groupBuySave(pram) {
+  return request({
+    url: '/admin/merchant/groupbuy/activity/save',
+    method: 'POST',
+    data: pram,
+  });
+}
+
+/**
+ * 分页列表
+ * @param
+ */
+export function groupBuyList(pram) {
+  const data = {
+    page: pram.page,
+    limit: pram.limit,
+    groupName: pram.groupName,
+    groupProcess: pram.groupProcess,
+    activityStatus: pram.activityStatus,
+    groupStatus: pram.groupStatus,
+    startTime: pram.startTime,
+  };
+  return request({
+    url: '/admin/merchant/groupbuy/activity/list',
+    method: 'get',
+    params: data,
+  });
+}
+/**
+ * 修改
+ * @param
+ */
+export function groupBuyUpdate(pram) {
+  return request({
+    url: '/admin/merchant/groupbuy/activity/update',
+    method: 'post',
+    data: pram,
+  });
+}
+/**
+ * 删除
+ * @param
+ */
+export function groupBuyDelete(id) {
+  const data = {
+    id: id,
+  };
+  return request({
+    url: '/admin/merchant/groupbuy/activity/delete',
+    method: 'get',
+    params: data,
+  });
+}
+/**
+ * 详情
+ * @param
+ */
+export function groupBuyInfo(id) {
+  const data = {
+    id: id,
+  };
+  return request({
+    url: `/admin/merchant/groupbuy/activity/info`,
+    method: 'get',
+    params: data,
+  });
+}
+/**
+ * 拼团头部
+ * @param
+ */
+export function groupBuyListCount(data) {
+  return request({
+    url: '/admin/merchant/groupbuy/activity/list/count',
+    method: 'get',
+    params: data,
+  });
+}
+/**
+ * 状态变更
+ * @param
+ */
+export function groupActivityStatus(pram) {
+  return request({
+    url: '/admin/merchant/groupbuy/activity/status',
+    method: 'post',
+    data: pram,
+  });
+}
+/**
+ * 撤回审核
+ * @param
+ */
+export function groupbuyActivityRollback(id) {
+  const data = {
+    id: id,
+  };
+  return request({
+    url: '/admin/merchant/groupbuy/activity/activity/rollback',
+    method: 'get',
+    params: data,
+  });
+}
+// ------------------------拼团记录----------------------------------------
+/**
+ * 分页列表
+ * @param
+ */
+export function groupBuyRecordList(data) {
+  return request({
+    url: '/admin/merchant/groupbuy/record/list',
+    method: 'get',
+    params: data,
+  });
+}
+/**
+ * 详情
+ * @param
+ */
+export function groupRecordInfo(id) {
+  return request({
+    url: `/admin/merchant/groupbuy/record/info/${id}`,
+    method: 'get',
+  });
+}
+/**
+ * 头部
+ * @param
+ */
+export function groupBuyRecordCount(data) {
+  return request({
+    url: '/admin/merchant/groupbuy/record/list/count',
+    method: 'get',
+    params: data,
+  });
+}

+ 161 - 0
mer_mer_admin/src/api/logistics.js

@@ -0,0 +1,161 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * @description 全部物流公司
+ */
+export function expressAllApi(params) {
+  return request({
+    url: 'admin/merchant/express/all',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description 物流运费模板列表
+ */
+export function shippingTemplatesList(data) {
+  return request({
+    url: '/admin/merchant/shipping/templates/list',
+    method: 'get',
+    params: { ...data },
+  });
+}
+
+/**
+ * @description 物流运费模板详情
+ */
+export function templateDetailApi(data) {
+  return request({
+    url: `/admin/merchant/shipping/templates/info/${data.id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * @description 物流运费模板新增
+ */
+export function shippingSave(data) {
+  return request({
+    url: 'admin/merchant/shipping/templates/save',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 物流运费模板更新
+ */
+export function shippingUpdate(data) {
+  return request({
+    url: 'admin/merchant/shipping/templates/update',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 物流运费模板删除
+ */
+export function shippingDetete(data) {
+  return request({
+    url: `admin/merchant/shipping/templates/delete/${data.id}`,
+    method: 'POST',
+  });
+}
+
+/**
+ * @description 城市列表
+ */
+export function cityListTree() {
+  return request({
+    url: '/admin/merchant/city/region/city/tree',
+    method: 'get',
+  });
+}
+
+/**
+ * @description 查询物流公司面单模板
+ */
+export function exportTempApi(params) {
+  return request({
+    url: '/admin/merchant/express/template',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description 商户物流公司默认开关
+ */
+export function expressDefaultAwitchApi(id) {
+  return request({
+    url: `/admin/merchant/express/default/switch/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * @description 商户物流公司删除
+ */
+export function expressDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/express/delete/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * @description 添加电子面单信息
+ * @param data
+ * @returns {*}
+ */
+export function expressUpdate(data) {
+  return request({
+    url: `/admin/merchant/express/update`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 商户物流公司开关
+ */
+export function expressOpenSwitchApi(id) {
+  return request({
+    url: `/admin/merchant/express/open/switch/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * @description 商户关联物流公司
+ */
+export function expressRelateApi(data) {
+  return request({
+    url: `/admin/merchant/express/relate`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 商户物流公司分页列表
+ */
+export function expressPageApi(params) {
+  return request({
+    url: `/admin/merchant/express/search/page`,
+    method: 'GET',
+    params,
+  });
+}

+ 770 - 0
mer_mer_admin/src/api/marketing.js

@@ -0,0 +1,770 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * 会员领取记录 列表
+ * @param pram
+ */
+export function couponUserListApi(params) {
+  return request({
+    url: '/admin/merchant/coupon/user/list',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 视频号 草稿列表
+ */
+export function draftListApi(params) {
+  return request({
+    url: `/admin/merchant/pay/component/draftproduct/draft/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 视频号 过审商品列表
+ */
+export function videoProductListApi(params) {
+  return request({
+    url: `/admin/merchant/pay/component/product/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 视频号 类目
+ */
+export function catListApi(params) {
+  return request({
+    url: `/admin/merchant/pay/component/cat/get/list`,
+    method: 'get',
+  });
+}
+
+/**
+ * 视频号 草稿商品添加
+ */
+export function videoAddApi(data) {
+  return request({
+    url: `/admin/merchant/pay/component/draftproduct/add`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 视频号 过审商品上架
+ */
+export function videoUpApi(proId) {
+  return request({
+    url: `/admin/merchant/pay/component/product/puton/${proId}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 视频号 过审商品下架
+ */
+export function videoDownApi(proId) {
+  return request({
+    url: `/admin/merchant/pay/component/product/putdown/${proId}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 视频号 草稿商品删除
+ */
+export function draftDelApi(id) {
+  return request({
+    url: `/admin/merchant/pay/component/draftproduct/delete/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 视频号 草稿商品详情
+ */
+export function draftInfoApi(id) {
+  return request({
+    url: `/admin/merchant/pay/component/draftproduct/draft/get/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 视频号 草稿商品编辑
+ */
+export function draftUpdateApi(data) {
+  return request({
+    url: `/admin/merchant/pay/component/draftproduct/update`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 视频号 草稿商品图片上传至微信
+ */
+export function shopImgUploadApi(data) {
+  return request({
+    url: `/admin/merchant/pay/component/shop/img/upload`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 视频号 商家审核草稿商品
+ */
+export function draftReviewApi(data) {
+  return request({
+    url: `/admin/merchant/pay/component/draftproduct/review`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 视频号 品牌列表
+ */
+export function draftBrandlistApi() {
+  return request({
+    url: `/admin/merchant/pay/component/shop/brand/usable/list`,
+    method: 'get',
+  });
+}
+
+/**
+ * 视频号 过审商品删除
+ */
+export function payProductDeleteApi(proId) {
+  return request({
+    url: `/admin/merchant/pay/component/product/delete/${proId}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 视频号 过审商品详情
+ */
+export function payProductGetApi(id) {
+  return request({
+    url: `/admin/merchant/pay/component/product/get/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 秒杀 秒杀活动详情
+ */
+export function seckillActivityDetailApi(id) {
+  return request({
+    url: `/admin/merchant/seckill/activity/detail/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 秒杀 秒杀活动分页列表
+ */
+export function seckillActivityListApi(params) {
+  return request({
+    url: `/admin/merchant/seckill/activity/page`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 秒杀 秒杀商品列表
+ */
+export function seckillProListApi(params) {
+  return request({
+    url: `/admin/merchant/seckill/product/page`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 秒杀 秒杀商品删除
+ */
+export function seckillProDelApi(data) {
+  return request({
+    url: `/admin/merchant/seckill/product/delete`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 秒杀 秒杀商品添加
+ */
+export function seckillProAddApi(data) {
+  return request({
+    url: `/admin/merchant/seckill/product/add`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 秒杀 秒杀商品下架
+ */
+export function seckillProDownApi(data) {
+  return request({
+    url: `/admin/merchant/seckill/product/down`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 秒杀 秒杀商品上架
+ */
+export function seckillProUpApi(data) {
+  return request({
+    url: `/admin/merchant/seckill/product/up`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 秒杀 秒杀商品设置活动价
+ */
+export function seckillProSetPriceApi(data) {
+  return request({
+    url: `/admin/merchant/seckill/product/set/price`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 秒杀 秒杀商品撤回审核
+ */
+export function seckillProWithdrawApi(id) {
+  return request({
+    url: `/admin/merchant/seckill/product/withdraw/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 直播 商品撤回审核
+ */
+export function liveGoodsAuditResetApi(id) {
+  return request({
+    url: `/admin/merchant/mp/live/goods/audit/reset/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 重新提交申请
+ */
+export function liveGoodsAuditApi(id) {
+  return request({
+    url: `/admin/merchant/mp/live/goods/audit/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 商品 删除
+ */
+export function liveGoodsDelApi(id) {
+  return request({
+    url: `/admin/merchant/mp/live/goods/delete/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 商品 详情
+ */
+export function liveGoodsInfoApi(id) {
+  return request({
+    url: `/admin/merchant/mp/live/goods/info/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 商品 分页列表
+ */
+export function liveGoodsListApi(params) {
+  return request({
+    url: `/admin/merchant/mp/live/goods/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 直播 商品 新增并提审
+ */
+export function liveGoodsSaveApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/goods/save`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 直播 商品 修改
+ */
+export function liveGoodsuUpdateApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/goods/update`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 直播 商品 微信 - 素材上传
+ */
+export function mediaUploadApi(data, params) {
+  return request({
+    url: `/admin/merchant/mp/media/upload`,
+    method: 'POST',
+    params,
+    data,
+  });
+}
+
+/**
+ * 直播 商品 修改
+ */
+export function liveGoodsUpdateApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/goods/update`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 直播 小助手 删除
+ */
+export function liveAssistantDelApi(id) {
+  return request({
+    url: `/admin/merchant/mp/live/assistant/delete/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 小助手 详情
+ */
+export function liveAssistantInfoApi(id) {
+  return request({
+    url: `/admin/merchant/mp/live/assistant/info/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 小助手 分页列表
+ */
+export function liveAssistantListApi(params) {
+  return request({
+    url: `/admin/merchant/mp/live/assistant/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 直播 小助手 新增
+ */
+export function liveAssistantSaveApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/assistant/save`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 直播 小助手 修改
+ */
+export function liveAssistantUpdateApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/assistant/update`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 直播 直播间 新增直播间小助手 到直播间
+ */
+export function liveRoomAddasstoroomeApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/room/addasstoroome`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 直播 直播间 新增直播间小助手 到直播间
+ */
+export function liveRoomEditasstoroomeApi(id, assid) {
+  return request({
+    url: `/admin/merchant/mp/live/room/modifyass/${id}/${assid}`,
+    method: 'POST',
+  });
+}
+
+/**
+ * 直播 直播间  删除直播间小助手
+ */
+export function liveRoomRemoveasstoroomeApi(id, assid) {
+  return request({
+    url: `/admin/merchant/mp/live/room/removeass/${id}/${assid}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 导入商品
+ */
+export function liveRoomAddgoodsApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/room/addgoods`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 直播 直播间 新增直播间主播副号
+ */
+export function liveRoomAddsubanchorApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/room/addsubanchor`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 直播 直播间 创建直播室
+ */
+export function liveRoomCreateApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/room/create`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 直播 直播间 删除直播室
+ */
+export function liveRoomDeleteApi(roomId) {
+  return request({
+    url: `/admin/merchant/mp/live/room/delete/${roomId}`,
+    method: 'GET',
+  });
+}
+
+/**
+ * 直播 直播间 删除直播间商品
+ */
+export function liveRoomDeletegoodsinroomApi(roomId, goodsId) {
+  return request({
+    url: `/admin/merchant/mp/live/room/deletegoodsinroom/${roomId}/${goodsId}`,
+    method: 'GET',
+  });
+}
+
+/**
+ * 直播 直播间 删除直播间主播副号
+ */
+export function liveRoomDeletesubanchorApi(roomId) {
+  return request({
+    url: `/admin/merchant/mp/live/room/deletesubanchor/${roomId}`,
+    method: 'GET',
+  });
+}
+
+/**
+ * 直播 直播间 编辑直播室
+ */
+export function liveRoomEditApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/room/edit`,
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 直播 直播间 获取直播间分享二维码
+ */
+export function liveRoomGetsharecodeApi(roomId) {
+  return request({
+    url: `/admin/merchant/mp/live/room/getsharecode/${roomId}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 获取直播间主播副号
+ */
+export function liveRoomGetsubanchorApi(roomId) {
+  return request({
+    url: `/admin/merchant/mp/live/room/getsubanchor/${roomId}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 下载讲解视频
+ */
+export function liveRoomGetvideoApi(id, roomId) {
+  return request({
+    url: `/admin/merchant/mp/live/room/getvideo/${id}/${goodsId}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 商品上下架
+ */
+export function liveRoomGoodsonsaleApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/room/goodsonsale`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 直播 直播间 商品排序
+ */
+export function liveRoomGoodsortApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/room/goodsort`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 直播 直播间 查询直播间小助手
+ */
+export function liveRoomModifyassApi(id) {
+  return request({
+    url: `/admin/merchant/mp/live/room/modifyass/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 修改直播间小助手
+ */
+export function liveRoomModifyassUpdateApi(id, assid) {
+  return request({
+    url: `/admin/merchant/mp/live/room/modifyass/${id}/${assid}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 修改直播间主播副号
+ */
+export function liveRoomModifysubanchorApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/room/modifysubanchor`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 直播 直播间 推送商品
+ */
+export function liveRoomPushgoodsApi(roomId, goodsId) {
+  return request({
+    url: `/admin/merchant/mp/live/room/pushgoods/${roomId}/${goodsId}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 删除直播间小助手
+ */
+export function liveRoomRemoveassApi(id, assid) {
+  return request({
+    url: `/admin/merchant/mp/live/room/removeass/${id}/${assid}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 禁言管理
+ */
+export function liveRoomUpdatecommentApi(id, banComment) {
+  return request({
+    url: `/admin/merchant/mp/live/room/updatecomment/${id}/${banComment}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 官方收录管理
+ */
+export function liveRoomIsFeedsPublicApi(id, isFeedsPublic) {
+  return request({
+    url: `/admin/merchant/mp/live/room/updatefeedpublic/${id}/${isFeedsPublic}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 开启回放
+ */
+export function liveRoomUpdatereplayApi(id, closeReplay) {
+  return request({
+    url: `/admin/merchant/mp/live/room/updatereplay/${id}/${closeReplay}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 直播室列表和回放
+ */
+export function liveRoomListApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/room/list`,
+    method: 'post',
+    data: {
+      pageParamRequest: {
+        limit: data.limit,
+        page: data.page,
+      },
+      searchRequest: {
+        reviewStatus: data.reviewStatus,
+        liveStatus: data.liveStatus,
+        keywords: data.keywords,
+        storeShow: data.storeShow,
+        star: data.star,
+      },
+    },
+  });
+}
+
+/**
+ * 直播 直播间 素材上传本地
+ */
+export function liveMediaUploadlocalApi(data) {
+  return request({
+    url: `/admin/merchant/mp/media/uploadlocal`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 直播 直播间 直播间商品列表
+ */
+export function liveRoomGoodslistApi(id) {
+  return request({
+    url: `/admin/merchant/mp/live/room/goodslist/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 直播间商品列表
+ */
+export function liveRoomInfoApi(id) {
+  return request({
+    url: `/admin/merchant/mp/live/room/info/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 直播间商品列表
+ */
+export function liveRoomGetassApi(id) {
+  return request({
+    url: `/admin/merchant/mp/live/room/getass/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 直播 直播间 管理直播间小助手
+ */
+export function liveRoomMangerassApi(data) {
+  return request({
+    url: `/admin/merchant/mp/live/room/mangerass`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 直播 直播间 客服管理
+ */
+export function liveRoomUpdateclosekfApi(id, closeKf) {
+  return request({
+    url: `/admin/merchant/mp/live/room/updateclosekf/${id}/${closeKf}`,
+    method: 'get',
+  });
+}
+
+/**
+ * @description 直播-商品-修改排序
+ */
+export function liveGoodsSortApi(id, sort) {
+  return request({
+    url: `/admin/merchant/mp/live/goods/sort/${id}/${sort}`,
+    method: 'GET',
+  });
+}
+
+
+/**
+ * 配送费信息
+ */
+export function settingsDeliveryFeeData() {
+  return request({
+    url: `/admin/merchant/market/info`,
+    method: 'get',
+  });
+}
+
+/**
+ * 配送费信息修改
+ */
+export function settingsDeliveryFeeUpdate(data) {
+  return request({
+    url: `/admin/merchant/market/update`,
+    method: 'post',
+    data,
+  });
+}

+ 164 - 0
mer_mer_admin/src/api/merchant.js

@@ -0,0 +1,164 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+import request from '@/utils/request';
+
+/**
+ * 商户分类 全部列表
+ */
+export function merchantCategoryAllListApi() {
+  return request({
+    url: '/admin/merchant/category/all/list',
+    method: 'get',
+  });
+}
+
+/**
+ * 店铺类型 全部列表
+ */
+export function merchantTypeAllListApi() {
+  return request({
+    url: '/admin/merchant/type/all/list',
+    method: 'get',
+  });
+}
+
+/**
+ * @description 商户基本设置 -- 商户详情
+ */
+export function getBaseInfoApi() {
+  return request({
+    url: '/admin/merchant/base/info',
+    method: 'get',
+  });
+}
+
+/**
+ * @description 商户基本设置 -- 提交
+ */
+export function merchantUpdateApi(data) {
+  return request({
+    url: '/admin/merchant/config/info/edit',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 商户基本设置 -- 配置信息
+ */
+export function merchantConfigInfoApi() {
+  return request({
+    url: '/admin/merchant/config/info',
+    method: 'get',
+  });
+}
+
+/**
+ * @description 商户基本设置 -- 商户开关
+ */
+export function merchantSwitchApi() {
+  return request({
+    url: '/admin/merchant/switch/update',
+    method: 'post',
+  });
+}
+
+/**
+ * @description 商户基本设置 -- 转账信息
+ */
+export function merchantTransferApi() {
+  return request({
+    url: '/admin/merchant/settlement/info',
+    method: 'GET',
+  });
+}
+
+/**
+ * @description 商户基本设置 -- 转账信息编辑
+ */
+export function merchantTransferEditApi(data) {
+  return request({
+    url: '/admin/merchant/settlement/info/edit',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 获取商户端商户商品审核开关信息
+ */
+export function productAuditSwitchInfoApi() {
+  return request({
+    url: '/admin/merchant/product/audit/switch/info',
+    method: 'get',
+  });
+}
+
+/**
+ * 商铺优惠措施 列表
+ */
+export function merchantMeasuresListApi(params) {
+  return request({
+    url: '/admin/merchant/measures/list',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 商铺优惠措施 全部列表
+ */
+export function merchantMeasuresAllListApi() {
+  return request({
+    url: '/admin/merchant/measures/all/list',
+    method: 'get',
+  });
+}
+
+/**
+ * 优惠措施  添加
+ */
+export function merchantMeasuresAddApi(data) {
+  return request({
+    url: '/admin/merchant/measures/add',
+    method: 'post',
+    data,
+  });
+} 
+
+/**
+ * 优惠措施  编辑
+ */
+export function merchantMeasuresUpdateApi(data) {
+  return request({
+    url: '/admin/merchant/measures/update',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 优惠措施  删除
+ */
+export function merchantMeasuresDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/measures/delete/${id}`,
+    method: 'post',
+  });
+}
+/**
+ * 优惠措施 推荐开关
+ */
+export function merchantMeasuresSwitchApi(id) {
+  return request({
+    url: `/admin/merchant/measures/switch/${id}`,
+    method: 'post',
+  });
+}

+ 367 - 0
mer_mer_admin/src/api/order.js

@@ -0,0 +1,367 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * 订单 列表
+ * @param prams
+ */
+export function orderListApi(params) {
+  return request({
+    url: '/admin/merchant/order/list',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 订单 列表 获取各状态数量
+ * @param params
+ */
+export function orderStatusNumApi(params) {
+  return request({
+    url: '/admin/merchant/order/status/num',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 订单 删除
+ * @param params
+ */
+export function orderDeleteApi(orderNo) {
+  return request({
+    url: `/admin/merchant/order/delete/${orderNo}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 订单 记录
+ * @param prams
+ */
+export function orderLogApi(params) {
+  return request({
+    url: '/admin/store/order/status/list',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 订单 详情
+ * @param prams
+ */
+export function orderDetailApi(orderNo) {
+  return request({
+    url: `/admin/merchant/order/info/${orderNo}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 订单 备注
+ * @param prams
+ */
+export function orderMarkApi(data) {
+  return request({
+    url: '/admin/merchant/order/mark',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 订单 发货
+ * @param prams
+ */
+export function orderSendApi(data) {
+  return request({
+    url: '/admin/merchant/order/send',
+    method: 'post',
+    data,
+  });
+}
+
+export function orderPrintReceiptApi(orderno) {
+  return request({
+    url: '/admin/merchant/order/printreceipt/' + orderno,
+    method: 'get',
+  });
+}
+
+/**
+ * 订单 拒绝退款
+ * @param prams
+ */
+export function orderRefuseApi(params) {
+  return request({
+    url: '/admin/merchant/refund/order/refund/refuse',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 订单 立即退款
+ * @param prams
+ */
+export function orderRefundApi(params) {
+  return request({
+    url: '/admin/merchant/refund/order/refund',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 订单 统计 头部数据
+ */
+export function orderStatisticsApi() {
+  return request({
+    url: `/admin/store/order/statistics`,
+    method: 'get',
+  });
+}
+
+/**
+ * 核销订单 月列表数据
+ */
+export function statisticsDataApi(params) {
+  return request({
+    url: `/admin/store/order/statisticsData`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 一键改价
+ */
+export function updatePriceApi(data) {
+  return request({
+    url: `admin/store/order/update/price`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ *订单统计详情
+ */
+export function orderTimeApi(params) {
+  return request({
+    url: `/admin/store/order/time`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ *面单默认配置信息
+ */
+export function sheetInfoApi() {
+  return request({
+    url: `/admin/store/order/sheet/info`,
+    method: 'get',
+  });
+}
+
+/**
+ *面单默认配置信息
+ */
+export function getLogisticsInfoApi(invoiceId) {
+  return request({
+    url: `/admin/merchant/order/get/${invoiceId}/logistics/info`,
+    method: 'get',
+  });
+}
+
+/**
+ *视频号物流公司
+ */
+export function companyGetListApi() {
+  return request({
+    url: `/admin/pay/component/delivery/company/get/list`,
+    method: 'get',
+  });
+}
+
+/**
+ *视频号物流公司
+ */
+export function videoSendApi(data) {
+  return request({
+    url: `/admin/store/order/video/send`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ *打印小票
+ */
+export function orderPrint(id) {
+  return request({
+    url: `/admin/yly/print/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ *退款列表
+ */
+export function refundListApi(params) {
+  return request({
+    url: `/admin/merchant/refund/order/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ *退商户备注退款订单
+ */
+export function refundMarkApi(data) {
+  return request({
+    url: `/admin/merchant/refund/order/mark`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ *获取退款订单各状态数量
+ */
+export function refundStatusNumApi(params) {
+  return request({
+    url: `/admin/merchant/refund/order/status/num`,
+    method: 'GET',
+    params,
+  });
+}
+
+/**
+ * 订单 核销订单
+ * @param data
+ */
+export function writeUpdateApi(data) {
+  return request({
+    url: `/admin/merchant/order/verification`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 订单细节详情列表(发货使用)
+ * @param orderNo 订单号
+ */
+export function orderProDetailApi(orderNo) {
+  return request({
+    url: `/admin/merchant/order/${orderNo}/detail/list`,
+    method: 'get',
+  });
+}
+
+/**
+ * 获取订单发货单列表
+ * @param orderNo 订单号
+ */
+export function orderInvoiceListApi(orderNo) {
+  return request({
+    url: `/admin/merchant/order/${orderNo}/invoice/list`,
+    method: 'get',
+  });
+}
+
+/**
+ * 平台端退款订单详情
+ * @param refundOrderNo 订单号
+ */
+export function refundOrderDetailApi(refundOrderNo) {
+  return request({
+    url: `/admin/merchant/refund/order/detail/${refundOrderNo}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 平台端退款订单详情
+ * @param params 对象
+ */
+export function orderExcelApi(params) {
+  return request({
+    url: `/admin/merchant/export/order/excel`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 退款单审核
+ * @param data 对象
+ */
+export function orderAuditApi(data) {
+  return request({
+    url: `/admin/merchant/refund/order/audit`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 退款单收到退货
+ * @param refundOrderNo 退款单号
+ */
+export function refundOrderReceivingApi(refundOrderNo) {
+  return request({
+    url: `/admin/merchant/refund/order/receiving/${refundOrderNo}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 退款单拒绝收货
+ * @param data
+ */
+export function refundOrderReceivingRejectApi(data) {
+  return request({
+    url: `/admin/merchant/refund/order/receiving/reject`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 商户直接退款
+ * @param data
+ */
+export function orderDirectRefundApi(data) {
+  return request({
+    url: `/admin/merchant/order/direct/refund`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 修改发货单配送信息
+ * @param data
+ */
+export function orderInvoiceUpdateApi(data) {
+  return request({
+    url: `/admin/merchant/order/invoice/update`,
+    method: 'post',
+    data,
+  });
+}

+ 745 - 0
mer_mer_admin/src/api/product.js

@@ -0,0 +1,745 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * 新增商品
+ * @param pram
+ */
+export function productCreateApi(data) {
+  return request({
+    url: '/admin/merchant/product/save',
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 编辑商品
+ * @param pram
+ */
+export function productUpdateApi(data) {
+  return request({
+    url: '/admin/merchant/product/update',
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 商品详情
+ * @param pram
+ */
+export function productDetailApi(id) {
+  return request({
+    url: `/admin/merchant/product/info/${id}`,
+    method: 'GET',
+  });
+}
+
+/**
+ * 删除商品
+ * @param pram
+ */
+export function productDeleteApi(data) {
+  return request({
+    url: `/admin/merchant/product/delete`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 商品列表 表头数量
+ */
+export function productHeadersApi(params) {
+  return request({
+    url: '/admin/merchant/product/tabs/headers',
+    method: 'GET',
+    params,
+  });
+}
+
+/**
+ * 商品列表
+ * @param pram
+ */
+export function productLstApi(params) {
+  return request({
+    url: '/admin/merchant/product/list',
+    method: 'GET',
+    params,
+  });
+}
+/**
+ * 平台端商品分类缓存树
+ * @param pram
+ */
+export function categoryApi() {
+  return request({
+    url: '/admin/merchant/plat/product/category/cache/tree',
+    method: 'GET',
+  });
+}
+/**
+ * 商户端商品分类缓存树
+ * @param pram
+ */
+export function storeCategoryAllApi() {
+  return request({
+    url: '/admin/merchant/store/product/category/cache/tree',
+    method: 'GET',
+  });
+}
+/**
+ * 商品上架
+ * @param pram
+ */
+export function putOnShellApi(id) {
+  return request({
+    url: `/admin/merchant/product/up/${id}`,
+    method: 'post',
+  });
+}
+/**
+ * 商品下架
+ * @param pram
+ */
+export function offShellApi(id) {
+  return request({
+    url: `/admin/merchant/product/down/${id}`,
+    method: 'post',
+  });
+}
+/**
+ * 商品规格 列表
+ * @param pram
+ */
+export function templateListApi(params) {
+  return request({
+    url: '/admin/merchant/product/rule/list',
+    method: 'GET',
+    params,
+  });
+}
+/**
+ * 商品规格 删除
+ * @param pram
+ */
+export function attrDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/product/rule/delete/${id}`,
+    method: 'post',
+  });
+}
+/**
+ * 商品规格 新增
+ * @param pram
+ */
+export function attrCreatApi(data) {
+  return request({
+    url: '/admin/merchant/product/rule/save',
+    method: 'POST',
+    data,
+  });
+}
+/**
+ * 商品规格 编辑
+ * @param pram
+ */
+export function attrEditApi(data) {
+  return request({
+    url: '/admin/merchant/product/rule/update',
+    method: 'POST',
+    data,
+  });
+}
+/**
+ * 商品规格 详情
+ * @param pram
+ */
+export function attrInfoApi(id) {
+  return request({
+    url: `admin/merchant/product/rule/info/${id}`,
+    method: 'GET',
+  });
+}
+/**
+ * 商品评论 列表
+ * @param pram
+ */
+export function replyListApi(params) {
+  return request({
+    url: '/admin/merchant/product/reply/list',
+    method: 'GET',
+    params,
+  });
+}
+/**
+ * 商品评论 新增
+ * @param pram
+ */
+export function replyCreatApi(data) {
+  return request({
+    url: '/admin/merchant/product/reply/virtual',
+    method: 'POST',
+    data,
+  });
+}
+/**
+ * 商品评论 编辑
+ * @param pram
+ */
+export function replyEditApi(data) {
+  return request({
+    url: '/admin/store/product/reply/update',
+    method: 'POST',
+    data,
+  });
+}
+/**
+ * 商品评论 详情
+ * @param pram
+ */
+export function replyInfoApi(id) {
+  return request({
+    url: `/admin/store/product/reply/info/${id}`,
+    method: 'GET',
+  });
+}
+/**
+ * 商品评论 删除
+ * @param pram
+ */
+export function replyDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/product/reply/delete/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 商品评论 回复
+ * @param pram
+ */
+export function replyCommentApi(data) {
+  return request({
+    url: `/admin/merchant/product/reply/comment`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 商品评论 导出
+ * @param pram
+ */
+export function productExportApi(params) {
+  return request({
+    url: `/admin/export/excel/product`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 商品复制 99Api
+ * @param pram
+ */
+export function importProductApi(params) {
+  return request({
+    url: `/admin/merchant/product/importProduct`,
+    method: 'post',
+    params,
+  });
+}
+
+/**
+ * 商品复制 一号通
+ * @param pram
+ */
+export function copyProductApi(data) {
+  return request({
+    url: `/admin/merchant/product/copy/product`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 恢复
+ * @param pram
+ */
+export function restoreApi(id) {
+  return request({
+    url: `/admin/merchant/product/restore/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 商品列表 导出
+ * @param pram
+ */
+export function productExcelApi(params) {
+  return request({
+    url: `/admin/export/excel/product`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 商品列表 获取复制商品配置
+ * @param pram
+ */
+export function copyConfigApi() {
+  return request({
+    url: `/admin/merchant/product/copy/config`,
+    method: 'post',
+  });
+}
+
+/**
+ * 订单数据 导出
+ * @param pram
+ */
+export function orderExcelApi(params) {
+  return request({
+    url: `/admin/export/excel/order`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 商品分类 列表
+ * @param pram
+ */
+export function productCategoryListApi(params) {
+  return request({
+    url: '/admin/merchant/store/product/category/list',
+    method: 'GET',
+    params,
+  });
+}
+/**
+ * 商品分类 新增
+ * @param pram
+ */
+export function productCategoryAddApi(data) {
+  return request({
+    url: '/admin/merchant/store/product/category/add',
+    method: 'post',
+    data,
+  });
+}
+/**
+ * 商品分类 编辑
+ * @param pram
+ */
+export function productCategoryUpdateApi(data) {
+  return request({
+    url: '/admin/merchant/store/product/category/update',
+    method: 'post',
+    data,
+  });
+}
+/**
+ * 商品分类 删除
+ * @param pram
+ */
+export function productCategoryDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/store/product/category/delete/${id}`,
+    method: 'post',
+  });
+}
+/**
+ * 商品分类 修改分类显示状态
+ * @param pram
+ */
+export function productCategoryShowApi(id) {
+  return request({
+    url: `/admin/merchant/store/product/category/update/show/${id}`,
+    method: 'post',
+  });
+}
+/**
+ * 保障服务列表
+ * @param pram
+ */
+export function productGuaranteeApi() {
+  return request({
+    url: `/admin/merchant/plat/product/guarantee/list`,
+    method: 'get',
+  });
+}
+/**
+ * 品牌列表 全部
+ * @param pram
+ */
+export function brandAllApi() {
+  return request({
+    url: `/admin/merchant/plat/product/brand/cache/list`,
+    method: 'get',
+  });
+}
+
+/**
+ * 品牌列表
+ * @param pram
+ */
+export function brandListApi(params) {
+  return request({
+    url: `/admin/merchant/plat/product/brand/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 优惠券 列表
+ * @param pram
+ */
+export function marketingListApi(params) {
+  return request({
+    url: '/admin/merchant/coupon/list',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 商品可用优惠券列表
+ * @param pram
+ */
+export function productCouponListApi() {
+  return request({
+    url: '/admin/merchant/coupon/product/usable/list',
+    method: 'get',
+  });
+}
+
+/**
+ * 优惠券 详情
+ * @param pram
+ */
+export function couponInfoApi(id) {
+  return request({
+    url: `/admin/merchant/coupon/info/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 优惠券 修改状态
+ * @param pram
+ */
+export function couponIssueStatusApi(id) {
+  return request({
+    url: `/admin/merchant/coupon/update/status/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 优惠券 删除
+ * @param pram
+ */
+export function couponDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/coupon/delete/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 优惠券 新增
+ * @param pram
+ */
+export function couponSaveApi(data) {
+  return request({
+    url: `/admin/merchant/coupon/save`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 优惠券 商品券关联商品编辑
+ * @param pram
+ */
+export function couponProductEditApi(data) {
+  return request({
+    url: `/admin/merchant/coupon/product/join/edit`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 保障服务组合 列表
+ * @param pram
+ */
+export function guaranteeListApi(params) {
+  return request({
+    url: `/admin/merchant/product/guarantee/group/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 保障服务组合 新增
+ * @param pram
+ */
+export function guaranteeAddApi(data) {
+  return request({
+    url: `/admin/merchant/product/guarantee/group/add`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 保障服务组合 编辑
+ * @param pram
+ */
+export function guaranteeUpdateApi(data) {
+  return request({
+    url: `/admin/merchant/product/guarantee/group/edit`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 保障服务组合 删除
+ * @param pram
+ */
+export function guaranteeDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/product/guarantee/group/delete/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 商品提审
+ * @param pram
+ */
+export function productAuditApi(data) {
+  return request({
+    url: `/admin/merchant/product/submit/audit`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 快捷添加库存
+ * @param pram
+ */
+export function productStockAddApi(data) {
+  return request({
+    url: `/admin/merchant/product/quick/stock/add`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 商品免审编辑
+ * @param pram
+ */
+export function productFreeEditApi(data) {
+  return request({
+    url: `/admin/merchant/product/review/free/edit`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 商品搜索分页列表(活动,diy、氛围图、除去营销活动的商品列表)
+ * @param pram
+ */
+export function productActivityListApi(params) {
+  return request({
+    url: '/admin/merchant/product/activity/search/page',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 添加回馈券
+ * @param data
+ */
+export function productAddCouponsApi(data) {
+  return request({
+    url: '/admin/merchant/product/add/feedback/coupons',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 批量添加回馈券
+ * @param data
+ */
+export function productBatchAddCouponsApi(data) {
+  return request({
+    url: '/admin/merchant/product/batch/add/feedback/coupons',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 批量删除商品
+ * @param data
+ */
+export function productBatchDeleteApi(data) {
+  return request({
+    url: '/admin/merchant/product/batch/delete',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 批量商品下架
+ * @param data
+ */
+export function productBatchDownApi(data) {
+  return request({
+    url: '/admin/merchant/product/batch/down',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 批量加入回收站
+ * @param data
+ */
+export function productBatchRecycleApi(data) {
+  return request({
+    url: '/admin/merchant/product/batch/recycle',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 批量恢复回收站商品
+ * @param data
+ */
+export function productBatchRestoreApi(data) {
+  return request({
+    url: '/admin/merchant/product/batch/restore',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 批量设置佣金
+ * @param data
+ */
+export function productBatchBrokerageApi(data) {
+  return request({
+    url: '/admin/merchant/product/batch/set/brokerage',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 批量设置运费模板
+ * @param data
+ */
+export function productBatchFreightApi(data) {
+  return request({
+    url: '/admin/merchant/product/batch/set/freight/template',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 批量提审商品
+ * @param data
+ */
+export function productBatchAuditApi(data) {
+  return request({
+    url: '/admin/merchant/product/batch/submit/audit',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 批量上架商品
+ * @param data
+ */
+export function productBatchUpApi(data) {
+  return request({
+    url: '/admin/merchant/product/batch/up',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 设置佣金
+ * @param data
+ */
+export function productBrokerageApi(data) {
+  return request({
+    url: '/admin/merchant/product/set/brokerage',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 设置运费模板
+ * @param data
+ */
+export function productSetFreightApi(data) {
+  return request({
+    url: '/admin/merchant/product/set/freight/template',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 商品搜索分页列表(营销活动,现有秒杀与拼团中调用)
+ * @param pram
+ */
+export function productMarketingListApi(params) {
+  return request({
+    url: '/admin/merchant/product/marketing/search/page',
+    method: 'get',
+    params,
+  });
+}
+
+export function whattodayeatTagAllApi() {
+  return request({
+    url: `/admin/platform/whattodayeatTag/all`,
+    method: 'get',
+  });
+}

+ 142 - 0
mer_mer_admin/src/api/productCdkey.js

@@ -0,0 +1,142 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * 删除卡密库
+ * @param id
+ */
+export function productCdkeyDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/cdkey/library/delete/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 卡密库分页列表
+ * @param params
+ */
+export function productCdkeyListApi(params) {
+  return request({
+    url: `/admin/merchant/cdkey/library/page/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 新增卡密库
+ * @param data
+ */
+export function productCdkeysaveApi(data) {
+  return request({
+    url: `/admin/merchant/cdkey/library/save`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 未关联卡密库列表
+ * @param params
+ */
+export function productUnrelatedListApi(params) {
+  return request({
+    url: `/admin/merchant/cdkey/library/unrelated/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 修改卡密库
+ * @param data
+ */
+export function productUnrelatedUpdateApi(data) {
+  return request({
+    url: `/admin/merchant/cdkey/library/update`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 删除卡密
+ * @param id
+ */
+export function cardSecretDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/card/secret/delete/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 导入卡密
+ * @param data
+ */
+export function cardSecretImportExcelApi(data, params) {
+  return request({
+    url: `/admin/merchant/card/secret/import/excel`,
+    method: 'post',
+    data,
+    params,
+  });
+}
+
+/**
+ * 卡密分页列表
+ * @param params
+ */
+export function cardSecretPageListApi(params) {
+  return request({
+    url: `/admin/merchant/card/secret/page/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 新增卡密
+ * @param data
+ */
+export function cardSecretSaveApi(data) {
+  return request({
+    url: `/admin/merchant/card/secret/save`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 修改卡密
+ * @param data
+ */
+export function cardSecretUpdateApi(data) {
+  return request({
+    url: `/admin/merchant/card/secret/update`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 批量删除卡密
+ * @param data
+ */
+export function cardSecretBatchDeleteApi(data) {
+  return request({
+    url: `/admin/merchant/card/secret/batch/delete`,
+    method: 'post',
+    data,
+  });
+}

+ 42 - 0
mer_mer_admin/src/api/req.js

@@ -0,0 +1,42 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import axios from 'axios';
+
+const service = axios.create({
+  timeout: 40000,
+});
+service.interceptors.request.use(
+  (config) => {
+    return config;
+  },
+  (error) => {
+    Promise.reject(error);
+  },
+);
+
+// response interceptor
+service.interceptors.response.use(
+  (response) => {
+    const res = response;
+    if (res.status !== 200 && res.status !== 401) {
+      Message({
+        message: res.data.msg || 'Error',
+        type: 'error',
+        duration: 5 * 1000,
+      });
+      return Promise.reject();
+    } else {
+      return res.data;
+    }
+  },
+  (error) => {},
+);
+export default service;

+ 112 - 0
mer_mer_admin/src/api/role.js

@@ -0,0 +1,112 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * 新增
+ * @param
+ */
+export function addRole(pram) {
+  const data = {
+    roleName: pram.roleName,
+    status: pram.status,
+    rules: pram.rules,
+    merId: pram.merId,
+  };
+  // data.rules = pram.rules.join(',')
+  return request({
+    url: '/admin/merchant/role/save',
+    method: 'POST',
+    data: data,
+  });
+}
+
+/**
+ * 删除
+ * @param
+ */
+export function delRole(id) {
+  return request({
+    url: `admin/merchant/role/delete/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 详情
+ * @param
+ */
+export function getInfo(pram) {
+  return request({
+    url: `/admin/merchant/role/info/${pram}`,
+    method: 'GET',
+  });
+}
+
+/**
+ * 分页列表
+ * @param
+ */
+export function getRoleList(pram) {
+  const data = {
+    page: pram.page,
+    limit: pram.limit,
+    roleName: pram.roleName,
+    status: pram.status,
+  };
+  return request({
+    url: '/admin/merchant/role/list',
+    method: 'get',
+    params: data,
+  });
+}
+
+/**
+ * 修改
+ * @param
+ */
+export function updateRole(pram) {
+  const data = {
+    id: pram.id,
+    roleName: pram.roleName,
+    rules: pram.rules,
+    status: pram.status,
+    merId: pram.merId,
+  };
+  return request({
+    url: '/admin/merchant/role/update',
+    method: 'post',
+    data: data,
+  });
+}
+
+/**
+ * 修改身份状态
+ * @param
+ */
+export function updateRoleStatus(pram) {
+  return request({
+    url: '/admin/merchant/role/updateStatus',
+    method: 'post',
+    data: { id: pram.id, status: pram.status },
+  });
+}
+
+/**
+ * 缓存菜单
+ * @param
+ */
+export function menuCacheList(pram) {
+  return request({
+    url: '/admin/merchant/menu/cache/tree',
+    method: 'get',
+  });
+}

+ 22 - 0
mer_mer_admin/src/api/roleApi.js

@@ -0,0 +1,22 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * 菜单
+ * @param pram
+ */
+export function menuListApi() {
+  return request({
+    url: '/admin/merchant/getMenus',
+    method: 'GET',
+  });
+}

+ 93 - 0
mer_mer_admin/src/api/staff.js

@@ -0,0 +1,93 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * 分页列表
+ * @param
+ */
+export function employeeRoleList(pram) {
+  const data = {
+    page: pram.page,
+    limit: pram.limit,
+    keywords: pram.keywords,
+    status: pram.status,
+  };
+  return request({
+    url: '/admin/merchant/employee/list',
+    method: 'get',
+    params: data,
+  });
+}
+/**
+ * 删除
+ * @param
+ */
+export function employeeDelRole(id) {
+  const data = {
+    id: id,
+  };
+  return request({
+    url: 'admin/merchant/employee/delete',
+    method: 'get',
+    params: data,
+  });
+}
+/**
+ * 详情
+ * @param
+ */
+export function employeeGetInfo(pram) {
+  return request({
+    url: `/admin/merchant/employee/info/${pram}`,
+    method: 'GET',
+  });
+}
+/**
+ * 新增
+ * @param
+ */
+export function employeeAddRole(pram) {
+  const data = {
+    avatar: pram.avatar,
+    name: pram.name,
+    phone: pram.phone,
+    role: pram.role,
+    status: pram.status,
+    uid: pram.uid,
+    id: pram.id,
+  };
+  return request({
+    url: '/admin/merchant/employee/save',
+    method: 'POST',
+    data: data,
+  });
+}
+/**
+ * 修改
+ * @param
+ */
+export function employeeUpdateRole(pram) {
+  const data = {
+    avatar: pram.avater,
+    name: pram.name,
+    phone: pram.phone,
+    role: pram.role,
+    status: pram.status,
+    uid: pram.uid,
+    id: pram.id,
+  };
+  return request({
+    url: '/admin/merchant/employee/update',
+    method: 'post',
+    data: data,
+  });
+}

+ 74 - 0
mer_mer_admin/src/api/systemForm.js

@@ -0,0 +1,74 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * 添加系统表单
+ * @param data
+ * @returns {AxiosPromise}
+ */
+export function systemFormAddApi(data) {
+  return request({
+    url: '/admin/merchant/system/form/add',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 删除系统表单
+ * @param id
+ * @returns {AxiosPromise}
+ */
+export function systemFormDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/system/form/delete/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 系统表单详情
+ * @param id
+ * @returns {AxiosPromise}
+ */
+export function systemFormDetailApi(id) {
+  return request({
+    url: `/admin/merchant/system/form/detail/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 系统表单分页列表
+ * @param params
+ * @returns {AxiosPromise}
+ */
+export function systemFormPageApi(params) {
+  return request({
+    url: `/admin/merchant/system/form/page`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 修改系统表单
+ * @param data
+ * @returns {AxiosPromise}
+ */
+export function systemFormUpdateApi(data) {
+  return request({
+    url: `/admin/merchant/system/form/update`,
+    method: 'post',
+    data,
+  });
+}

+ 56 - 0
mer_mer_admin/src/api/systemFormConfig.js

@@ -0,0 +1,56 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+export function getFormConfigInfo(pram) {
+  const data = {
+    id: pram.id,
+  };
+  return request({
+    url: '/admin/merchant/form/temp/info',
+    method: 'GET',
+    params: data,
+  });
+}
+
+/**
+ * 通过名称查询详情
+ * @param pram
+ */
+export function formTempNameInfoApi(params) {
+  return request({
+    url: `/admin/merchant/form/temp/name/info`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description 验证行为验证码
+ */
+export function knowUserSmsCaptchaApi(data) {
+  return request({
+    url: '/publicly/safety/check',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 获取行为验证码
+ */
+export function knowUserCaptchaApi(data) {
+  return request({
+    url: '/publicly/safety/get',
+    method: 'post',
+    data,
+  });
+}

+ 34 - 0
mer_mer_admin/src/api/systemPcConfig.js

@@ -0,0 +1,34 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+/**
+ * 获取商户PC商城设置
+ * @param pram
+ */
+export function getPcConfigApi() {
+  return request({
+    url: '/admin/merchant/config/get/pc/shopping/config',
+    method: 'GET',
+  });
+}
+
+/**
+ * 保存商户PC商城设置
+ * @param pram
+ */
+export function savePcConfigApi(data) {
+  return request({
+    url: '/admin/merchant/config/save/pc/shopping/config',
+    method: 'post',
+    data,
+  });
+}

+ 338 - 0
mer_mer_admin/src/api/systemSetting.js

@@ -0,0 +1,338 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+export function systemConfigCheck(pram) {
+  const data = {
+    name: pram.name,
+  };
+  return request({
+    url: '/admin/system/config/check',
+    method: 'GET',
+    params: data,
+  });
+}
+
+export function systemConfigInfo(pram) {
+  const data = {
+    formId: pram.id,
+  };
+  return request({
+    url: '/admin/system/config/info',
+    method: 'GET',
+    params: data,
+  });
+}
+
+export function systemConfigSave(pram) {
+  return request({
+    url: '/admin/system/config/save/form',
+    method: 'POST',
+    data: pram,
+  });
+}
+
+/**
+ * 文件上传
+ * @param data
+ */
+export function fileFileApi(data, params) {
+  return request({
+    url: '/admin/merchant/upload/file',
+    method: 'POST',
+    params,
+    data,
+  });
+}
+
+/**
+ * 图片上传
+ * @param data
+ */
+export function fileImageApi(data, params) {
+  return request({
+    url: '/admin/merchant/upload/image',
+    method: 'POST',
+    params,
+    data,
+  });
+}
+
+/**
+ * 图片列表
+ * @param data
+ */
+export function fileListApi(params) {
+  return request({
+    url: '/admin/merchant/attachment/list',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 图片列表 删除图片
+ * @param data
+ */
+export function fileDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/attachment/delete`,
+    method: 'post',
+    data: { ids: id },
+  });
+}
+
+/**
+ * 图片列表 移動分類
+ * @param data
+ */
+export function attachmentMoveApi(data) {
+  return request({
+    url: `/admin/merchant/attachment/move`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ *  商家小票打印配置列表
+ * @param pram
+ * @returns {*}
+ */
+export function merchantPrintList(pram) {
+  return request({
+    url: '/admin/merchant/print/list',
+    method: 'GET',
+    params: pram,
+  });
+}
+
+/**
+ * 商家小票打印配置删除
+ * @param id
+ * @returns {*}
+ */
+export function merchantPrintDelete(id) {
+  return request({
+    url: '/admin/merchant/print/delete/' + id,
+    method: 'GET',
+  });
+}
+
+/**
+ * 商家小票打印配置详情
+ * @param pram
+ * @returns {*}
+ */
+export function merchantPrintInfo(pram) {
+  const data = {
+    key: pram.key,
+  };
+  return request({
+    url: '/admin/merchant/print/info/{id}',
+    method: 'GET',
+    params: data,
+  });
+}
+
+/**
+ * 商家小票打印配置新增
+ * @param data
+ * @returns {*}
+ */
+export function merchantPrintSave(data) {
+  return request({
+    url: `/admin/merchant/print/save`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 商家小票打印配置更新状态
+ * @param data
+ * @returns {*}
+ */
+export function merchantPrintStatus(data) {
+  return request({
+    url: `/admin/merchant/print/status`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 商家小票打印配置编辑
+ * @param data
+ * @returns {*}
+ */
+export function merchantPrintEdit(data) {
+  return request({
+    url: `/admin/merchant/print/update`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 商家电子面单编辑
+ * @param data
+ * @returns {*}
+ */
+export function merchantElectrSheetEdit(data) {
+  return request({
+    url: `/admin/merchant/elect/update`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 商家电子面单新增
+ * @param data
+ * @returns {*}
+ */
+export function merchantElectrSheetAdd(data) {
+  return request({
+    url: `/admin/merchant/elect/save`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 商家电子面单详情
+ * @returns {*}
+ */
+export function merchantElectrSheetInfo() {
+  return request({
+    url: `/admin/merchant/elect/info`,
+    method: 'get',
+  });
+}
+
+/**
+ * 商家电子面单删除
+ * @param id
+ * @returns {*}
+ */
+export function merchantElectrSheetDelete(id) {
+  return request({
+    url: `/admin/merchant/elect/delete/${id}`,
+    method: 'get',
+  });
+}
+
+
+/**
+ * 商户地址分页列表
+ * @param data
+ * @returns {*}
+ */
+export function merchantAddressListApi() {
+  return request({
+    url: `/admin/merchant/address/list`,
+    method: 'get',
+  });
+}
+
+/**
+ * 删除商户地址
+ * @param data
+ * @returns {*}
+ */
+export function merchantAddressDeleteApi(id) {
+  return request({
+    url: `/admin/merchant/address/delete/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 新增商户地址
+ * @param data
+ * @returns {*}
+ */
+export function merchantAddressSaveApi(data) {
+  return request({
+    url: `/admin/merchant/address/save`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 修改商户地址
+ * @param data
+ * @returns {*}
+ */
+export function merchantAddressUpdateApi(data) {
+  return request({
+    url: `/admin/merchant/address/update`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 设置商户默认地址
+ * @param data
+ * @returns {*}
+ */
+export function merchantAddressSetDefaultApi(id) {
+  return request({
+    url: `/admin/merchant/address/set/default/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 设置商户地址开启状态
+ * @param data
+ * @returns {*}
+ */
+export function merchantAddressUpdateShowApi(id) {
+  return request({
+    url: `/admin/merchant/address/update/show/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ * 获取平台当前的素材地址
+ */
+export function mediadomainApi() {
+  return request({
+    url: '/publicly/config/get/admin/mediadomain',
+    method: 'get',
+  });
+}
+
+/**
+ * 获取打印内容配置
+ */
+export function getPrintContentApi(id) {
+  return request({
+    url: `/admin/merchant/print/get/content/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 保存打印内容配置
+ */
+export function savePrintContentApi(data, id) {
+  return request({
+    url: `/admin/merchant/print/save/content/${id}`,
+    method: 'post',
+    data,
+  });
+}

+ 166 - 0
mer_mer_admin/src/api/systemadmin.js

@@ -0,0 +1,166 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+export function adminDel(pram) {
+  const data = {
+    id: pram.id,
+  };
+  return request({
+    url: '/admin/merchant/admin/delete',
+    method: 'GET',
+    params: data,
+  });
+}
+
+export function adminInfo(pram) {
+  const data = {
+    id: pram.id,
+  };
+  return request({
+    url: '/admin/merchant/admin/info',
+    method: 'GET',
+    params: data,
+  });
+}
+
+export function adminList(params) {
+  return request({
+    url: '/admin/merchant/admin/list',
+    method: 'GET',
+    params,
+  });
+}
+
+export function adminAdd(pram) {
+  const data = {
+    account: pram.account,
+    level: pram.level,
+    pwd: pram.pwd,
+    realName: pram.realName,
+    roles: pram.roles.join(','),
+    status: pram.status,
+    phone: pram.phone,
+  };
+  return request({
+    url: '/admin/merchant/admin/save',
+    method: 'POST',
+    data: data,
+  });
+}
+
+export function adminUpdate(pram) {
+  const data = {
+    account: pram.account,
+    phone: pram.phone,
+    pwd: pram.pwd,
+    realName: pram.realName,
+    id: pram.id,
+    roles: pram.roles,
+    status: pram.status,
+  };
+  return request({
+    url: '/admin/merchant/admin/update',
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 修改状态
+ * @param pram
+ */
+export function updateStatusApi(params) {
+  return request({
+    url: `/admin/merchant/admin/updateStatus`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 修改后台管理员是否接收状态
+ * @param pram
+ */
+export function updateIsSmsApi(params) {
+  return request({
+    url: `/admin/merchant/admin/update/isSms`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 敏感操作日志分页列表
+ * @param data
+ */
+export function sensitiveListApi(params) {
+  return request({
+    url: `/admin/merchant/log/sensitive/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 修改登录用户信息
+ * @param data
+ */
+export function adminAccountUpdate(pram) {
+  const data = {
+    realName: pram.realName,
+  };
+  return request({
+    url: '/admin/merchant/login/admin/update',
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 修改登录用户密码
+ * @param data
+ */
+export function adminPasswordUpdate(pram) {
+  const data = {
+    confirmPassword: pram.confirmPassword,
+    password: pram.password,
+    oldPassword: pram.oldPassword,
+  };
+  return request({
+    url: '/admin/merchant/login/admin/update/password',
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 修改管理员密码
+ * @param data
+ */
+export function editPassWordApi(data) {
+  return request({
+    url: '/admin/merchant/admin/update/password',
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * 商户后台管理员短信开关
+ * @param pram
+ */
+export function updateReceiveSmsApi(id) {
+  return request({
+    url: `/admin/merchant/admin/update/receive/sms/${id}`,
+    method: 'post',
+  });
+}

+ 75 - 0
mer_mer_admin/src/api/user.js

@@ -0,0 +1,75 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+export function login(data) {
+  return request({
+    url: '/admin/merchant/login',
+    method: 'post',
+    data,
+  });
+}
+
+export function getAdminInfoByTokenApi() {
+  return request({
+    url: '/admin/merchant/getAdminInfoByToken',
+    method: 'get',
+  });
+}
+
+export function logout() {
+  return request({
+    url: '/admin/merchant/logout',
+    method: 'get',
+  });
+}
+
+/**
+ * 会员管理 列表
+ * @param pram
+ */
+export function userListApi(params) {
+  return request({
+    url: `/admin/merchant/user/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ *获取登录页图片
+ */
+export function getLoginPicApi() {
+  return request({
+    url: `/admin/merchant/getLoginPic`,
+    method: 'get',
+  });
+}
+
+/**
+ * @description 验证码
+ */
+export function captchaApi() {
+  return request({
+    url: `/publicly/validate/code/get`,
+    method: 'get',
+  });
+}
+
+/**
+ * @description 用户详情列表
+ */
+export function userDetailApi(id) {
+  return request({
+    url: `/admin/merchant/user/detail/${id}`,
+    method: 'get',
+  });
+}

BIN
mer_mer_admin/src/assets/401_images/401.gif


BIN
mer_mer_admin/src/assets/404_images/404.png


BIN
mer_mer_admin/src/assets/404_images/404_cloud.png


File diff suppressed because it is too large
+ 108 - 0
mer_mer_admin/src/assets/iconfont/iconfont-weapp-icon.css


+ 894 - 0
mer_mer_admin/src/assets/iconfont/iconfont.css

@@ -0,0 +1,894 @@
+@font-face {
+  font-family: 'iconfont'; /* Project id 3139466 */
+  src: url('//at.alicdn.com/t/c/font_3139466_jayb4igf1z.woff2?t=1734767396089') format('woff2'),
+    url('//at.alicdn.com/t/c/font_3139466_jayb4igf1z.woff?t=1734767396089') format('woff'),
+    url('//at.alicdn.com/t/c/font_3139466_jayb4igf1z.ttf?t=1734767396089') format('truetype');
+}
+
+.iconfont {
+  font-family: 'iconfont' !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-shangpinliebiaopaixuyangshi:before {
+  content: '\e6f4';
+}
+
+.icon-youhuiquanyangshiyi:before {
+  content: '\e6f5';
+}
+
+.icon-jianbianlianjie:before {
+  content: '\e6e4';
+}
+
+.icon-lianjietubiao:before {
+  content: '\e6e5';
+}
+
+.icon-biaotiwenzijiacu:before {
+  content: '\e6e6';
+}
+
+.icon-pintuanyangshisi:before {
+  content: '\e6e7';
+}
+
+.icon-youhuiquanyangshisi:before {
+  content: '\e6e8';
+}
+
+.icon-fuzhuxian-xuxian:before {
+  content: '\e6e9';
+}
+
+.icon-pintuanyangshiyi:before {
+  content: '\e6ea';
+}
+
+.icon-youhuiquanyangshisan:before {
+  content: '\e6eb';
+}
+
+.icon-youhuiquanyangshier:before {
+  content: '\e6ec';
+}
+
+.icon-biaotiwenzixieti:before {
+  content: '\e6ed';
+}
+
+.icon-requwenzitishi:before {
+  content: '\e6ee';
+}
+
+.icon-biaotiwenziyangshi:before {
+  content: '\e6ef';
+}
+
+.icon-pintuanyangshisan:before {
+  content: '\e6f0';
+}
+
+.icon-fuzhuxian-dianzhuangxian:before {
+  content: '\e6f1';
+}
+
+.icon-fuzhuxian-shixian:before {
+  content: '\e6f2';
+}
+
+.icon-pintuanyangshier:before {
+  content: '\e6f3';
+}
+
+.icon-ic_layout4:before {
+  content: '\e836';
+}
+
+.icon-biaodanzujian-duoxuankuang:before {
+  content: '\e6da';
+}
+
+.icon-biaodanzujian-riqi:before {
+  content: '\e6db';
+}
+
+.icon-biaodanzujian-danxuankuang:before {
+  content: '\e6dc';
+}
+
+.icon-biaodanzujian-danhangwenben:before {
+  content: '\e6dd';
+}
+
+.icon-biaodanzujian-riqifanwei:before {
+  content: '\e6de';
+}
+
+.icon-biaodanzujian-shijian:before {
+  content: '\e6df';
+}
+
+.icon-biaodanzujian-xialakuang:before {
+  content: '\e6e0';
+}
+
+.icon-biaodanzujian-shijianfanwei:before {
+  content: '\e6e1';
+}
+
+.icon-biaodanzujian-tupian:before {
+  content: '\e6e2';
+}
+
+.icon-biaodanzujian-chengshi:before {
+  content: '\e6e3';
+}
+
+.icon-caiwuchazhang:before {
+  content: '\e6d9';
+}
+
+.icon-CPjiesuan:before {
+  content: '\e665';
+}
+
+.icon-dingdan:before {
+  content: '\e61c';
+}
+
+.icon-shanghuliebiao:before {
+  content: '\e61a';
+}
+
+.icon-ic-complete1:before {
+  content: '\e66b';
+}
+
+.icon-ic_close1:before {
+  content: '\e66a';
+}
+
+.icon-tu:before {
+  content: '\e85c';
+}
+
+.icon-dantu:before {
+  content: '\e6d6';
+}
+
+.icon-pingpu:before {
+  content: '\e6d7';
+}
+
+.icon-datu:before {
+  content: '\e6d8';
+}
+
+.icon-a-11:before {
+  content: '\e6d2';
+}
+
+.icon-a-43:before {
+  content: '\e6d3';
+}
+
+.icon-a-34:before {
+  content: '\e6d4';
+}
+
+.icon-a-169:before {
+  content: '\e6d5';
+}
+
+.icon-lianjie:before {
+  content: '\e6d1';
+}
+
+.icon-qingxie:before {
+  content: '\e6ce';
+}
+
+.icon-zhengchang:before {
+  content: '\e6cf';
+}
+
+.icon-jiacu:before {
+  content: '\e6d0';
+}
+
+.icon-xuanze:before {
+  content: '\e6cd';
+}
+
+.icon-dianpujie-yangshiyi:before {
+  content: '\e6c9';
+}
+
+.icon-tianjia1:before {
+  content: '\e6ca';
+}
+
+.icon-xiala1:before {
+  content: '\e6cb';
+}
+
+.icon-youhuiquan-yangshiyi:before {
+  content: '\e6c4';
+}
+
+.icon-guanbi1:before {
+  content: '\e69b';
+}
+
+.icon-fuchuang-youshang:before {
+  content: '\e687';
+}
+
+.icon-fuchuang-zuoshang:before {
+  content: '\e683';
+}
+
+.icon-fuchuang-zuoxia:before {
+  content: '\e68d';
+}
+
+.icon-anniuer:before {
+  content: '\e68e';
+}
+
+.icon-fuchuang-youxia:before {
+  content: '\e695';
+}
+
+.icon-zuhe-sousuokuang:before {
+  content: '\e697';
+}
+
+.icon-anniuyi:before {
+  content: '\e698';
+}
+
+.icon-youhuiquan-yangshier:before {
+  content: '\e699';
+}
+
+.icon-logo:before {
+  content: '\e682';
+}
+
+.icon-cha:before {
+  content: '\e684';
+}
+
+.icon-caozuo-shang:before {
+  content: '\e685';
+}
+
+.icon-bianjiao:before {
+  content: '\e686';
+}
+
+.icon-bianji1:before {
+  content: '\e688';
+}
+
+.icon-caozuo-xianshi:before {
+  content: '\e689';
+}
+
+.icon-caozuo-shanchu:before {
+  content: '\e68a';
+}
+
+.icon-caozuo-xia:before {
+  content: '\e68b';
+}
+
+.icon-caozuo-yincang:before {
+  content: '\e68c';
+}
+
+.icon-daohang-4ge:before {
+  content: '\e68f';
+}
+
+.icon-daohang-3hang:before {
+  content: '\e690';
+}
+
+.icon-daohang-2hang:before {
+  content: '\e691';
+}
+
+.icon-daohang-3ge:before {
+  content: '\e692';
+}
+
+.icon-daohang-4hang:before {
+  content: '\e693';
+}
+
+.icon-dianzhuangxian:before {
+  content: '\e694';
+}
+
+.icon-daohang-5ge:before {
+  content: '\e696';
+}
+
+.icon-buxianshi:before {
+  content: '\e69a';
+}
+
+.icon-jiage:before {
+  content: '\e69c';
+}
+
+.icon-juzhong:before {
+  content: '\e69d';
+}
+
+.icon-juyou:before {
+  content: '\e69e';
+}
+
+.icon-juzuo:before {
+  content: '\e69f';
+}
+
+.icon-shangpin-lianglie:before {
+  content: '\e6a0';
+}
+
+.icon-shangpin-danlie:before {
+  content: '\e6a1';
+}
+
+.icon-shangpin-datu:before {
+  content: '\e6a4';
+}
+
+.icon-shangpin-sanlie:before {
+  content: '\e6a7';
+}
+
+.icon-tupian-yangshier:before {
+  content: '\e6a8';
+}
+
+.icon-shipinlianjie:before {
+  content: '\e6a9';
+}
+
+.icon-tonglan:before {
+  content: '\e6aa';
+}
+
+.icon-shoudongshangchuan:before {
+  content: '\e6ab';
+}
+
+.icon-tupian-yangshiwu:before {
+  content: '\e6ac';
+}
+
+.icon-tupian-yangshiliu:before {
+  content: '\e6ad';
+}
+
+.icon-tupian-yangshiyi:before {
+  content: '\e6ae';
+}
+
+.icon-tupian-yangshisan:before {
+  content: '\e6b0';
+}
+
+.icon-tupian-yangshisi:before {
+  content: '\e6b1';
+}
+
+.icon-xuxian:before {
+  content: '\e6b2';
+}
+
+.icon-tuozhuaidian:before {
+  content: '\e6b3';
+}
+
+.icon-xiaoliang:before {
+  content: '\e6b5';
+}
+
+.icon-xiantiao:before {
+  content: '\e6b8';
+}
+
+.icon-yangshier:before {
+  content: '\e6b9';
+}
+
+.icon-yangshisan:before {
+  content: '\e6ba';
+}
+
+.icon-yangshiyi:before {
+  content: '\e6bb';
+}
+
+.icon-shangxia:before {
+  content: '\e6bc';
+}
+
+.icon-shixian:before {
+  content: '\e6bd';
+}
+
+.icon-zonghe:before {
+  content: '\e6be';
+}
+
+.icon-zuhe-fenlei:before {
+  content: '\e6bf';
+}
+
+.icon-youxiajiao:before {
+  content: '\e6c0';
+}
+
+.icon-zuhe-lunbotu:before {
+  content: '\e6c1';
+}
+
+.icon-zuoyou:before {
+  content: '\e6c2';
+}
+
+.icon-zuoxiajiao:before {
+  content: '\e6c3';
+}
+
+.icon-zuoshangjiao:before {
+  content: '\e6c5';
+}
+
+.icon-zhengti:before {
+  content: '\e6c6';
+}
+
+.icon-youshangjiao:before {
+  content: '\e6c7';
+}
+
+.icon-yuandian:before {
+  content: '\e6c8';
+}
+
+.icon-caozuo-fuzhi1:before {
+  content: '\e6cc';
+}
+
+.icon-shipinico:before {
+  content: '\e707';
+}
+
+.icon-drag2:before {
+  content: '\e61e';
+}
+
+.icon-miaosha:before {
+  content: '\e619';
+}
+
+.icon-shipinhao2:before {
+  content: '\e61b';
+}
+
+.icon-youhuiquan:before {
+  content: '\e63c';
+}
+
+.icon-a-dingdanguanli1:before {
+  content: '\e617';
+}
+
+.icon-daihexiao:before {
+  content: '\e618';
+}
+
+.icon-caiwuguanli:before {
+  content: '\e60b';
+}
+
+.icon-yonghuguanli:before {
+  content: '\e60c';
+}
+
+.icon-xitongshezhi:before {
+  content: '\e60d';
+}
+
+.icon-qiandaopeizhi:before {
+  content: '\e60e';
+}
+
+.icon-daituikuan:before {
+  content: '\e60f';
+}
+
+.icon-yihaotong:before {
+  content: '\e610';
+}
+
+.icon-shangpinguanli:before {
+  content: '\e611';
+}
+
+.icon-shanghuguanli:before {
+  content: '\e612';
+}
+
+.icon-daishenheshangpin:before {
+  content: '\e613';
+}
+
+.icon-fenxiaoshezhi:before {
+  content: '\e614';
+}
+
+.icon-zaishoushangpin:before {
+  content: '\e615';
+}
+
+.icon-daifahuo2:before {
+  content: '\e616';
+}
+
+.icon-shipinhao:before {
+  content: '\e60a';
+}
+
+.icon-yingyeshijian2:before {
+  content: '\e801';
+}
+
+.icon-tianjia:before {
+  content: '\e672';
+}
+
+.icon-shoucang3:before {
+  content: '\e79d';
+}
+
+.icon-shouye8:before {
+  content: '\e79e';
+}
+
+.icon-pinzhong:before {
+  content: '\e6a2';
+}
+
+.icon-hanghuo:before {
+  content: '\e6a3';
+}
+
+.icon-zhifa:before {
+  content: '\e6b6';
+}
+
+.icon-dijia:before {
+  content: '\e6b7';
+}
+
+.icon-yuyanqiehuan:before {
+  content: '\e608';
+}
+
+.icon-gouwuche1:before {
+  content: '\e609';
+}
+
+.icon-xuanzhong4:before {
+  content: '\e6af';
+}
+
+.icon-a-bianzu2:before {
+  content: '\e607';
+}
+
+.icon-daifukuan1:before {
+  content: '\e603';
+}
+
+.icon-daifahuo1:before {
+  content: '\e604';
+}
+
+.icon-wancheng:before {
+  content: '\e605';
+}
+
+.icon-daishouhuo1:before {
+  content: '\e606';
+}
+
+.icon-complete:before {
+  content: '\e646';
+}
+
+.icon-gou:before {
+  content: '\e602';
+}
+
+.icon-duoshanghupc-shuomingdanchuang:before {
+  content: '\e79a';
+}
+
+.icon-zizhi:before {
+  content: '\e601';
+}
+
+.icon-baozhang:before {
+  content: '\e6b4';
+}
+
+.icon-xiangxia:before {
+  content: '\e8ca';
+}
+
+.icon-xiangshang:before {
+  content: '\ebbb';
+}
+
+.icon-shaixuan:before {
+  content: '\e651';
+}
+
+.icon-xuanzhong11:before {
+  content: '\e6a5';
+}
+
+.icon-weixuan:before {
+  content: '\e6a6';
+}
+
+.icon-kefu_o:before {
+  content: '\eb63';
+}
+
+.icon-yingyongAPP_o:before {
+  content: '\eb88';
+}
+
+.icon-huobiliu_o:before {
+  content: '\eb9f';
+}
+
+.icon-yizhan_o:before {
+  content: '\ebc6';
+}
+
+.icon-guanzhu:before {
+  content: '\e645';
+}
+
+.icon-shangjiadingdan:before {
+  content: '\e64a';
+}
+
+.icon-jiantou:before {
+  content: '\e600';
+}
+
+.icon-jiazai:before {
+  content: '\e799';
+}
+
+.icon-shouye1:before {
+  content: '\e798';
+}
+
+.icon-wuliu:before {
+  content: '\e797';
+}
+
+.icon-zhuangshixian:before {
+  content: '\e796';
+}
+
+.icon-xihuan1:before {
+  content: '\e794';
+}
+
+.icon-shezhi:before {
+  content: '\e795';
+}
+
+.icon-pingfen:before {
+  content: '\e792';
+}
+
+.icon-pingweifen:before {
+  content: '\e793';
+}
+
+.icon-more:before {
+  content: '\e791';
+}
+
+.icon-yituikuan:before {
+  content: '\e78f';
+}
+
+.icon-tuikuanzhong:before {
+  content: '\e790';
+}
+
+.icon-sousuo2:before {
+  content: '\e78e';
+}
+
+.icon-guanbi:before {
+  content: '\e78d';
+}
+
+.icon-fenlei:before {
+  content: '\e788';
+}
+
+.icon-yuyan:before {
+  content: '\e78c';
+}
+
+.icon-gouwuche:before {
+  content: '\e789';
+}
+
+.icon-xihuan:before {
+  content: '\e78a';
+}
+
+.icon-gerenzhongxin:before {
+  content: '\e78b';
+}
+
+.icon-zhifushibai:before {
+  content: '\e785';
+}
+
+.icon-zhifuchenggong:before {
+  content: '\e786';
+}
+
+.icon-shouji:before {
+  content: '\e784';
+}
+
+.icon-mima:before {
+  content: '\e781';
+}
+
+.icon-youxiang:before {
+  content: '\e782';
+}
+
+.icon-yanzhengma:before {
+  content: '\e783';
+}
+
+.icon-fenxiang:before {
+  content: '\e77f';
+}
+
+.icon-yangshi1:before {
+  content: '\e780';
+}
+
+.icon-gengduo:before {
+  content: '\e776';
+}
+
+.icon-qingkong:before {
+  content: '\e777';
+}
+
+.icon-dingbufanhui:before {
+  content: '\e778';
+}
+
+.icon-xiala:before {
+  content: '\e779';
+}
+
+.icon-kefu:before {
+  content: '\e77a';
+}
+
+.icon-sousuo:before {
+  content: '\e77b';
+}
+
+.icon-paizhao:before {
+  content: '\e77c';
+}
+
+.icon-sousuo1:before {
+  content: '\e77d';
+}
+
+.icon-yangshi2:before {
+  content: '\e77e';
+}
+
+.icon-facebook:before {
+  content: '\e773';
+}
+
+.icon-guge:before {
+  content: '\e774';
+}
+
+.icon-twitter:before {
+  content: '\e775';
+}
+
+.icon-suozi:before {
+  content: '\e772';
+}
+
+.icon-dizhi:before {
+  content: '\e76c';
+}
+
+.icon-a-411ditu:before {
+  content: '\e76d';
+}
+
+.icon-shuoming:before {
+  content: '\e76e';
+}
+
+.icon-shanchu:before {
+  content: '\e76f';
+}
+
+.icon-yonghu:before {
+  content: '\e770';
+}
+
+.icon-bianji:before {
+  content: '\e771';
+}
+
+.icon-daifahuo:before {
+  content: '\e76b';
+}
+
+.icon-daipingjia-2:before {
+  content: '\e767';
+}
+
+.icon-daifukuan:before {
+  content: '\e768';
+}
+
+.icon-shouhou_tuikuan-2:before {
+  content: '\e769';
+}
+
+.icon-daishouhuo:before {
+  content: '\e76a';
+}
+
+.icon-jia:before {
+  content: '\e766';
+}
+
+.icon-jian:before {
+  content: '\e765';
+}

BIN
mer_mer_admin/src/assets/imgs/app.png


BIN
mer_mer_admin/src/assets/imgs/bg.jpg


BIN
mer_mer_admin/src/assets/imgs/capsule.png


+ 0 - 0
mer_mer_admin/src/assets/imgs/couponBg.png


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