## v1.3.1 更新列表
1. 【修复】申请退款后积分等操作可能出现错误的问题 2. 【修复】拼团支付可能出现支付错误的问题 3. 【修复】退款申请后的订单流程优化和积分赠送的问题 4. 【修复】回收站中的商品无法恢复的问题 5. 【修复】一号通短信查询记录不完整的问题 6. 【修复】用户管理批量加分组,标签的问题 7. 【修复】积分日志搜索显示有误的问题 8. 【修复】手动发送优惠券可能会出错的问题 9. 【修复】核销订单创建在某种条件下会出错的问题 10. 【修复】移动端商品详情,购物车等样式兼容问题 11. 【修复】业务流程性的优化
This commit is contained in:
14
README.md
14
README.md
@@ -126,6 +126,20 @@ CRMEB打通版:https://gitee.com/ZhongBangKeJi/CRMEB
|
||||
|
||||
|
||||
## 更新列表一览
|
||||
|
||||
## v1.3.1 更新列表
|
||||
1. 【修复】申请退款后积分等操作可能出现错误的问题
|
||||
2. 【修复】拼团支付可能出现支付错误的问题
|
||||
3. 【修复】退款申请后的订单流程优化和积分赠送的问题
|
||||
4. 【修复】回收站中的商品无法恢复的问题
|
||||
5. 【修复】一号通短信查询记录不完整的问题
|
||||
6. 【修复】用户管理批量加分组,标签的问题
|
||||
7. 【修复】积分日志搜索显示有误的问题
|
||||
8. 【修复】手动发送优惠券可能会出错的问题
|
||||
9. 【修复】核销订单创建在某种条件下会出错的问题
|
||||
10. 【修复】移动端商品详情,购物车等样式兼容问题
|
||||
11. 【修复】业务流程性的优化
|
||||
|
||||
## v1.3 更新列表
|
||||
1. 【新增】砍价
|
||||
2. 【新增】拼团
|
||||
|
||||
258
admin/README.es.md
Normal file
258
admin/README.es.md
Normal file
@@ -0,0 +1,258 @@
|
||||
# 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 模板
|
||||
│ └── UEditor # 富文本编辑器插件
|
||||
├── src # 源代码
|
||||
│ ├── api # 所有请求
|
||||
│ │ └──user.js # 有关登录/用户的接口
|
||||
│ │ └──article.js # 有关内容的接口
|
||||
│ │ └──categoryApi.js # 有关配置的接口
|
||||
│ │ └──configTabApi.js # 有关配置分类的接口
|
||||
│ │ └──dashboard.js # 有关统计的接口
|
||||
│ │ └──distribution.js # 有关分销的接口
|
||||
│ │ └──logistics.js # 有关城市数据、物流配置的接口
|
||||
│ │ └──marketing.js # 有关优惠券、秒杀的接口
|
||||
│ │ └──order.js # 有关订单的接口
|
||||
│ │ └──role.js # 有关权限的接口
|
||||
│ │ └──roleApi.js # 有关菜单的接口
|
||||
│ │ └──sms.js # 有关短信的接口
|
||||
│ │ └──store.js # 有关商品的接口
|
||||
│ │ └──storePoint.js # 有关提货点的接口
|
||||
│ │ └──productCreateApi.js # 有关附件上传的接口
|
||||
│ │ └──systemadmin.js # 有关管理员的接口
|
||||
│ │ └──systemConfig.js # 有关系统配置的接口
|
||||
│ │ └──systemFormConfig.js # 有关表单配置的接口
|
||||
│ │ └──systemGroup.js # 有关组合数据的接口
|
||||
│ │ └──systemSetting.js # 有关上传文件的接口
|
||||
│ │ └──user.js # 有关用户的接口
|
||||
│ │ └──wxApi.js # 有关微信的接口
|
||||
│ ├── assets # 图片、svg 等静态资源
|
||||
│ ├── components # 公共组件
|
||||
│ │ └──articleList # 文章列表
|
||||
│ │ └──attrFrom # 商品规格
|
||||
│ │ └──Breadcrumb # 头部标题标签
|
||||
│ │ └──cards # 统计小方块
|
||||
│ │ └──echarts # 统计图
|
||||
│ │ └──Category # 分类
|
||||
│ │ └──customerInfo # 用户列表
|
||||
│ │ └──FormGenerator # 表单配置
|
||||
│ │ └──couponList # 优惠劵列表
|
||||
│ │ └──goodsList # 商品列表
|
||||
│ │ └──Hamburger # 导航收缩组件
|
||||
│ │ └──HeaderSearch # 导航搜索组件
|
||||
│ │ └──iconFrom # 导航添加图标
|
||||
│ │ └──RightPanel # 右侧设置按钮,设置导航相关
|
||||
│ │ └──Screenfull # 全屏
|
||||
│ │ └──SvgIcon # svg图标
|
||||
│ │ └──Tinymce # 颜色选择
|
||||
│ │ └──ThemePicker # 右侧设置按钮,设置组题颜色
|
||||
│ │ └──templatesFrom # 运费模板
|
||||
│ │ └──ueditorFrom # 富文本编辑器
|
||||
│ │ └──uploadPicture # 上传图片组件
|
||||
│ │ └──Upload # 上传文件组件
|
||||
│ │ └──UploadExcel # 下载Excel
|
||||
│ │ └──userList # 用户列表
|
||||
│ │ └──TimeSelect # 时间段选择
|
||||
│ ├── layouts # 导航布局
|
||||
│ │ ├──index # 主页面
|
||||
│ │ ├──components # 导航组件
|
||||
│ │ └──Settings # 右边小按钮,设置导航等
|
||||
│ │ └──Sidebar # 侧边导航
|
||||
│ │ └──TagsView # tab标签页导航
|
||||
│ │ └──Navbar # 头部导航
|
||||
│ │ └──AppMain # 导航路由
|
||||
│ │ └──index.js # 组件引用
|
||||
│ │ └──mixins # 自适应大小
|
||||
│ ├── libs # 公共js方法
|
||||
│ │ └──settingMer # 配置请求地址
|
||||
│ ├── views # 所有页面
|
||||
│ │ └──login # 登录
|
||||
│ │ └──index # 登录
|
||||
│ │ └──dashboard # 首页
|
||||
│ │ └──store # 商品
|
||||
│ │ └──creatStore # 添加商品
|
||||
│ │ └──storeAttr # 商品规格
|
||||
│ │ └──sort # 商品分类
|
||||
│ │ └──taoBao # 复制商品
|
||||
│ │ └──storeComment # 商品评论
|
||||
│ │ └──order # 订单管理
|
||||
│ │ └──marketing # 营销
|
||||
│ │ └──coupon # 优惠劵
|
||||
│ │ └──systemSetting # 设置
|
||||
│ │ └──administratorAuthority # 管理权限
|
||||
│ │ └──adminList # 管理员列表
|
||||
│ │ └──identityManager# 身份管理
|
||||
│ │ └──permissionRules# 权限规则
|
||||
│ │ └──logistics # 物流设置
|
||||
│ │ └──cityList # 城市数据
|
||||
│ │ └──companyList # 物流公司
|
||||
│ │ └──config # 物流配置
|
||||
│ │ └──shippingTemplates # 运费模板
|
||||
│ │ └──setting # 系统设置
|
||||
│ │ └──systemStore # 提货点设置
|
||||
│ │ └──appSetting # 应用 小程序 公众号设置
|
||||
│ │ └──content # 内容
|
||||
│ │ └──article # 文章管理
|
||||
│ │ └──articleclass # 文章分类
|
||||
│ │ └──datas # 统计数据
|
||||
│ │ └──user # 用户
|
||||
│ │ └──list # 用户管理
|
||||
│ │ └──grade # 用户等级/标签
|
||||
│ │ └──group # 用户分组
|
||||
│ │ └──distribution # 分销设置
|
||||
│ │ └──maintain # 维护
|
||||
│ │ └──devconfig # 组合数据
|
||||
│ │ └──formConfig # 表单配置
|
||||
│ │ └──financial # 财务
|
||||
│ │ └──error-page # 错误页
|
||||
│ │ └──404 # 错误页404
|
||||
│ │ └──403 # 错误页403
|
||||
│ ├── filters # 过滤器
|
||||
│ ├── router # 路由配置
|
||||
│ │ └──modules # 页面路由模块
|
||||
│ │ └──content.js # 有关内容 文章
|
||||
│ │ └──user.js # 有关用户
|
||||
│ │ └──appSetting.js # 有关应用
|
||||
│ │ └──marketing.js # 有关优惠券、秒杀
|
||||
│ │ └──distribution.js # 有关分销
|
||||
│ │ └──order.js # 有关订单
|
||||
│ │ └──financial.js # 有关财务
|
||||
│ │ └──store.js # 有关商品
|
||||
│ │ └──maintain.js # 有关维护
|
||||
│ │ └──operation.js # 有关设置
|
||||
│ │ └──index.js # 路由的汇总
|
||||
│ ├── store # Vuex 状态管理
|
||||
│ ├── utils # 全局公用方法
|
||||
│ │ └──request.js # 请求封装
|
||||
│ │ └──settingMer.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
|
||||
```
|
||||
|
||||
|
||||
256
admin/README.ja.md
Normal file
256
admin/README.ja.md
Normal file
@@ -0,0 +1,256 @@
|
||||
# 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 模板
|
||||
│ └── UEditor # 富文本编辑器插件
|
||||
├── src # 源代码
|
||||
│ ├── api # 所有请求
|
||||
│ │ └──user.js # 有关登录/用户的接口
|
||||
│ │ └──article.js # 有关内容的接口
|
||||
│ │ └──categoryApi.js # 有关配置的接口
|
||||
│ │ └──configTabApi.js # 有关配置分类的接口
|
||||
│ │ └──dashboard.js # 有关统计的接口
|
||||
│ │ └──distribution.js # 有关分销的接口
|
||||
│ │ └──logistics.js # 有关城市数据、物流配置的接口
|
||||
│ │ └──marketing.js # 有关优惠券、秒杀的接口
|
||||
│ │ └──order.js # 有关订单的接口
|
||||
│ │ └──role.js # 有关权限的接口
|
||||
│ │ └──roleApi.js # 有关菜单的接口
|
||||
│ │ └──sms.js # 有关短信的接口
|
||||
│ │ └──store.js # 有关商品的接口
|
||||
│ │ └──storePoint.js # 有关提货点的接口
|
||||
│ │ └──productCreateApi.js # 有关附件上传的接口
|
||||
│ │ └──systemadmin.js # 有关管理员的接口
|
||||
│ │ └──systemConfig.js # 有关系统配置的接口
|
||||
│ │ └──systemFormConfig.js # 有关表单配置的接口
|
||||
│ │ └──systemGroup.js # 有关组合数据的接口
|
||||
│ │ └──systemSetting.js # 有关上传文件的接口
|
||||
│ │ └──user.js # 有关用户的接口
|
||||
│ │ └──wxApi.js # 有关微信的接口
|
||||
│ ├── assets # 图片、svg 等静态资源
|
||||
│ ├── components # 公共组件
|
||||
│ │ └──articleList # 文章列表
|
||||
│ │ └──attrFrom # 商品规格
|
||||
│ │ └──Breadcrumb # 头部标题标签
|
||||
│ │ └──cards # 统计小方块
|
||||
│ │ └──echarts # 统计图
|
||||
│ │ └──Category # 分类
|
||||
│ │ └──customerInfo # 用户列表
|
||||
│ │ └──FormGenerator # 表单配置
|
||||
│ │ └──couponList # 优惠劵列表
|
||||
│ │ └──goodsList # 商品列表
|
||||
│ │ └──Hamburger # 导航收缩组件
|
||||
│ │ └──HeaderSearch # 导航搜索组件
|
||||
│ │ └──iconFrom # 导航添加图标
|
||||
│ │ └──RightPanel # 右侧设置按钮,设置导航相关
|
||||
│ │ └──Screenfull # 全屏
|
||||
│ │ └──SvgIcon # svg图标
|
||||
│ │ └──Tinymce # 颜色选择
|
||||
│ │ └──ThemePicker # 右侧设置按钮,设置组题颜色
|
||||
│ │ └──templatesFrom # 运费模板
|
||||
│ │ └──ueditorFrom # 富文本编辑器
|
||||
│ │ └──uploadPicture # 上传图片组件
|
||||
│ │ └──Upload # 上传文件组件
|
||||
│ │ └──UploadExcel # 下载Excel
|
||||
│ │ └──userList # 用户列表
|
||||
│ │ └──TimeSelect # 时间段选择
|
||||
│ ├── layouts # 导航布局
|
||||
│ │ ├──index # 主页面
|
||||
│ │ ├──components # 导航组件
|
||||
│ │ └──Settings # 右边小按钮,设置导航等
|
||||
│ │ └──Sidebar # 侧边导航
|
||||
│ │ └──TagsView # tab标签页导航
|
||||
│ │ └──Navbar # 头部导航
|
||||
│ │ └──AppMain # 导航路由
|
||||
│ │ └──index.js # 组件引用
|
||||
│ │ └──mixins # 自适应大小
|
||||
│ ├── libs # 公共js方法
|
||||
│ │ └──settingMer # 配置请求地址
|
||||
│ ├── views # 所有页面
|
||||
│ │ └──login # 登录
|
||||
│ │ └──index # 登录
|
||||
│ │ └──dashboard # 首页
|
||||
│ │ └──store # 商品
|
||||
│ │ └──creatStore # 添加商品
|
||||
│ │ └──storeAttr # 商品规格
|
||||
│ │ └──sort # 商品分类
|
||||
│ │ └──taoBao # 复制商品
|
||||
│ │ └──storeComment # 商品评论
|
||||
│ │ └──order # 订单管理
|
||||
│ │ └──marketing # 营销
|
||||
│ │ └──coupon # 优惠劵
|
||||
│ │ └──systemSetting # 设置
|
||||
│ │ └──administratorAuthority # 管理权限
|
||||
│ │ └──adminList # 管理员列表
|
||||
│ │ └──identityManager# 身份管理
|
||||
│ │ └──permissionRules# 权限规则
|
||||
│ │ └──logistics # 物流设置
|
||||
│ │ └──cityList # 城市数据
|
||||
│ │ └──companyList # 物流公司
|
||||
│ │ └──config # 物流配置
|
||||
│ │ └──shippingTemplates # 运费模板
|
||||
│ │ └──setting # 系统设置
|
||||
│ │ └──systemStore # 提货点设置
|
||||
│ │ └──appSetting # 应用 小程序 公众号设置
|
||||
│ │ └──content # 内容
|
||||
│ │ └──article # 文章管理
|
||||
│ │ └──articleclass # 文章分类
|
||||
│ │ └──datas # 统计数据
|
||||
│ │ └──user # 用户
|
||||
│ │ └──list # 用户管理
|
||||
│ │ └──grade # 用户等级/标签
|
||||
│ │ └──group # 用户分组
|
||||
│ │ └──distribution # 分销设置
|
||||
│ │ └──maintain # 维护
|
||||
│ │ └──devconfig # 组合数据
|
||||
│ │ └──formConfig # 表单配置
|
||||
│ │ └──financial # 财务
|
||||
│ │ └──error-page # 错误页
|
||||
│ │ └──404 # 错误页404
|
||||
│ │ └──403 # 错误页403
|
||||
│ ├── filters # 过滤器
|
||||
│ ├── router # 路由配置
|
||||
│ │ └──modules # 页面路由模块
|
||||
│ │ └──content.js # 有关内容 文章
|
||||
│ │ └──user.js # 有关用户
|
||||
│ │ └──appSetting.js # 有关应用
|
||||
│ │ └──marketing.js # 有关优惠券、秒杀
|
||||
│ │ └──distribution.js # 有关分销
|
||||
│ │ └──order.js # 有关订单
|
||||
│ │ └──financial.js # 有关财务
|
||||
│ │ └──store.js # 有关商品
|
||||
│ │ └──maintain.js # 有关维护
|
||||
│ │ └──operation.js # 有关设置
|
||||
│ │ └──index.js # 路由的汇总
|
||||
│ ├── store # Vuex 状态管理
|
||||
│ ├── utils # 全局公用方法
|
||||
│ │ └──request.js # 请求封装
|
||||
│ │ └──settingMer.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
|
||||
```
|
||||
19059
admin/package-lock.json
generated
19059
admin/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -29,7 +29,7 @@
|
||||
UEDITOR_HOME_URL: URL,
|
||||
|
||||
// 服务器统一请求接口路径
|
||||
serverUrl: URL + 'php/controller.php',
|
||||
serverUrl: '',
|
||||
|
||||
// 工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的重新定义
|
||||
toolbars: [[
|
||||
|
||||
@@ -136,3 +136,15 @@ export function categroyUpdateStatus(id) {
|
||||
method: 'GET'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 文章详情
|
||||
* @param pram
|
||||
*/
|
||||
export function articleInfoApi(params) {
|
||||
return request({
|
||||
url: `/admin/article/info`,
|
||||
method: 'GET',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
@@ -174,10 +174,11 @@ export function exportTempApi(params) {
|
||||
/**
|
||||
* @description 全部物流公司
|
||||
*/
|
||||
export function expressAllApi() {
|
||||
export function expressAllApi(params) {
|
||||
return request({
|
||||
url: 'admin/express/all',
|
||||
method: 'get'
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
BIN
admin/src/assets/imgs/kefuImg.jpg
Normal file
BIN
admin/src/assets/imgs/kefuImg.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 52 KiB |
@@ -8,7 +8,7 @@
|
||||
>
|
||||
<el-input v-model="editPram.name" :maxlength="biztype.value === 1 ? 8 : 20" placeholder="分类名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="URL">
|
||||
<el-form-item label="URL" v-if="biztype.value!==1">
|
||||
<el-input v-model="editPram.url" placeholder="URL" />
|
||||
</el-form-item>
|
||||
<el-form-item label="父级" v-if="biztype.value!==3">
|
||||
@@ -31,7 +31,8 @@
|
||||
<el-input-number v-model="editPram.sort"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态">
|
||||
<el-switch v-model="editPram.status" :active-value="true" :inactive-value="false" />
|
||||
<el-switch v-model="editPram.status" active-text="显示"
|
||||
inactive-text="隐藏" :active-value="true" :inactive-value="false" />
|
||||
</el-form-item>
|
||||
<el-form-item label="扩展字段" v-if="biztype.value !== 1 && biztype.value !== 3 && biztype.value !== 5">
|
||||
<el-input v-model="editPram.extra" type="textarea" placeholder="扩展字段" />
|
||||
@@ -45,7 +46,6 @@
|
||||
</template>
|
||||
<!--创建和编辑公用一个组件-->
|
||||
<script>
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import * as categoryApi from '@/api/categoryApi.js'
|
||||
import * as selfUtil from '@/utils/ZBKJIutil.js'
|
||||
export default {
|
||||
@@ -73,7 +73,7 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
loadingBtn: false,
|
||||
constants,
|
||||
constants: this.$constants,
|
||||
editPram: {
|
||||
extra: null,
|
||||
name: null,
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="Url" min-width="250">
|
||||
<el-table-column label="Url" min-width="250" v-if="biztype.value === 5" key="2">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.url }}</span>
|
||||
</template>
|
||||
@@ -141,7 +141,6 @@
|
||||
import * as categoryApi from '@/api/categoryApi.js'
|
||||
import info from './info'
|
||||
import edit from './edit'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import * as selfUtil from '@/utils/ZBKJIutil.js'
|
||||
export default {
|
||||
// name: "list"
|
||||
@@ -177,7 +176,7 @@ export default {
|
||||
return {
|
||||
selectModelKeysNew: this.selectModelKeys,
|
||||
loading: false,
|
||||
constants,
|
||||
constants: this.$constants,
|
||||
treeProps: {
|
||||
label: 'name',
|
||||
children: 'child',
|
||||
@@ -197,12 +196,12 @@ export default {
|
||||
dataList: [],
|
||||
treeList: [],
|
||||
listPram: {
|
||||
pid: this.pid,
|
||||
pid: this.pid,
|
||||
type: this.biztype.value,
|
||||
status: -1,
|
||||
name: '',
|
||||
page: constants.page.page,
|
||||
limit: constants.page.limit[0]
|
||||
page: this.$constants.page.page,
|
||||
limit: this.$constants.page.limit[0]
|
||||
},
|
||||
viewInfoConfig: {
|
||||
data: null,
|
||||
@@ -293,7 +292,7 @@ export default {
|
||||
this.loading = false
|
||||
}).catch(()=>{
|
||||
this.loading = false
|
||||
}) : categoryApi.listCategroy({ type: 3, status: '', pid: this.listPram.pid}).then(data => {
|
||||
}) : categoryApi.listCategroy({ type: 3, status: this.listPram.status, pid: this.listPram.pid, name: this.listPram.name}).then(data => {
|
||||
this.treeList = data.list
|
||||
})
|
||||
},
|
||||
|
||||
@@ -39,7 +39,6 @@ function formBtns(h) {
|
||||
return <el-col>
|
||||
<el-form-item size='mini'>
|
||||
<el-button type='primary' onClick={this.submitForm}>提交</el-button>
|
||||
<el-button onClick={this.resetForm}>取消</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
}
|
||||
|
||||
@@ -69,7 +69,6 @@
|
||||
<script>
|
||||
import * as articleApi from '@/api/article.js'
|
||||
import * as categoryApi from '@/api/categoryApi.js'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import * as selfUtil from '@/utils/ZBKJIutil.js'
|
||||
export default {
|
||||
// name: "list",
|
||||
@@ -83,12 +82,12 @@
|
||||
return {
|
||||
templateRadio:'',
|
||||
imgList: [],
|
||||
constants,
|
||||
constants: this.$constants,
|
||||
listPram: {
|
||||
keywords: null,
|
||||
cid: null,
|
||||
page: 1,
|
||||
limit: constants.page.limit[0]
|
||||
limit: this.$constants.page.limit[0]
|
||||
},
|
||||
listData: { list: [], total: 0 },
|
||||
editDialogConfig: {
|
||||
@@ -130,7 +129,7 @@
|
||||
})
|
||||
},
|
||||
handlerGetCategoryTreeData() {
|
||||
const _pram = { type: constants.categoryType[2].value, status: 1 }
|
||||
const _pram = { type: this.constants.categoryType[2].value, status: 1 }
|
||||
categoryApi.treeCategroy(_pram).then(data => {
|
||||
this.categoryTreeData = selfUtil.addTreeListLabelForCasCard(data)
|
||||
})
|
||||
|
||||
@@ -91,178 +91,178 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { marketingListApi, couponUserApi } from '@/api/marketing'
|
||||
export default {
|
||||
name: 'CouponList',
|
||||
props: {
|
||||
handle: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
couponData: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
keyNum: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
userIds: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
import { marketingListApi, couponUserApi } from '@/api/marketing'
|
||||
export default {
|
||||
name: 'CouponList',
|
||||
props: {
|
||||
handle: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
listLoading: true,
|
||||
tableData: {
|
||||
data: [],
|
||||
total: 0
|
||||
},
|
||||
tableFrom: {
|
||||
page: 1,
|
||||
limit: 10,
|
||||
name: '',
|
||||
// type: 0,
|
||||
isDel: 0,
|
||||
status: 1
|
||||
},
|
||||
multipleSelection: [],
|
||||
multipleSelectionAll: [],
|
||||
idKey: 'id',
|
||||
nextPageFlag: false,
|
||||
attr: []
|
||||
}
|
||||
couponData: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
watch: {
|
||||
keyNum: {
|
||||
deep: true,
|
||||
handler(val) {
|
||||
this.getList()
|
||||
}
|
||||
}
|
||||
keyNum: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
mounted() {
|
||||
this.tableFrom.page = 1
|
||||
this.getList()
|
||||
this.multipleSelectionAll = this.couponData || []
|
||||
},
|
||||
methods: {
|
||||
close() {
|
||||
this.multipleSelection = []
|
||||
userIds: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
listLoading: true,
|
||||
tableData: {
|
||||
data: [],
|
||||
total: 0
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val
|
||||
setTimeout(() => {
|
||||
this.changePageCoreRecordData()
|
||||
}, 50)
|
||||
tableFrom: {
|
||||
page: 1,
|
||||
limit: 10,
|
||||
name: '',
|
||||
// type: 0,
|
||||
isDel: 0,
|
||||
status: 1
|
||||
},
|
||||
// 设置选中的方法
|
||||
setSelectRow() {
|
||||
if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
|
||||
return
|
||||
}
|
||||
// 标识当前行的唯一键的名称
|
||||
const idKey = this.idKey
|
||||
const selectAllIds = []
|
||||
this.multipleSelectionAll.forEach(row => {
|
||||
selectAllIds.push(row[idKey])
|
||||
})
|
||||
this.$refs.table.clearSelection()
|
||||
for (var i = 0; i < this.tableData.data.length; i++) {
|
||||
if (selectAllIds.indexOf(this.tableData.data[i][idKey]) >= 0) {
|
||||
// 设置选中,记住table组件需要使用ref="table"
|
||||
this.$refs.table.toggleRowSelection(this.tableData.data[i], true)
|
||||
}
|
||||
}
|
||||
},
|
||||
// 记忆选择核心方法
|
||||
changePageCoreRecordData() {
|
||||
// 标识当前行的唯一键的名称
|
||||
const idKey = this.idKey
|
||||
const that = this
|
||||
// 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
|
||||
if (this.multipleSelectionAll.length <= 0) {
|
||||
this.multipleSelectionAll = this.multipleSelection
|
||||
return
|
||||
}
|
||||
// 总选择里面的key集合
|
||||
const selectAllIds = []
|
||||
this.multipleSelectionAll.forEach(row => {
|
||||
selectAllIds.push(row[idKey])
|
||||
})
|
||||
const selectIds = []
|
||||
// 获取当前页选中的id
|
||||
this.multipleSelection.forEach(row => {
|
||||
selectIds.push(row[idKey])
|
||||
// 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
|
||||
if (selectAllIds.indexOf(row[idKey]) < 0) {
|
||||
that.multipleSelectionAll.push(row)
|
||||
}
|
||||
})
|
||||
const noSelectIds = []
|
||||
// 得到当前页没有选中的id
|
||||
this.tableData.data.forEach(row => {
|
||||
if (selectIds.indexOf(row[idKey]) < 0) {
|
||||
noSelectIds.push(row[idKey])
|
||||
}
|
||||
})
|
||||
noSelectIds.forEach(id => {
|
||||
if (selectAllIds.indexOf(id) >= 0) {
|
||||
for (let i = 0; i < that.multipleSelectionAll.length; i++) {
|
||||
if (that.multipleSelectionAll[i][idKey] == id) {
|
||||
// 如果总选择中有未被选中的,那么就删除这条
|
||||
that.multipleSelectionAll.splice(i, 1)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
ok() {
|
||||
if (this.multipleSelection.length > 0) {
|
||||
this.$emit('getCouponId', this.multipleSelectionAll)
|
||||
// this.close()
|
||||
} else {
|
||||
this.$message.warning('请先选择优惠劵')
|
||||
}
|
||||
},
|
||||
// 列表
|
||||
getList(num) {
|
||||
this.listLoading = true
|
||||
this.tableFrom.page = num ? num : this.tableFrom.page
|
||||
marketingListApi(this.tableFrom).then(res => {
|
||||
this.tableData.data = res.list
|
||||
this.tableData.total = res.total
|
||||
this.listLoading = false
|
||||
this.$nextTick(function() {
|
||||
this.setSelectRow()// 调用跨页选中方法
|
||||
})
|
||||
}).catch(res => {
|
||||
this.listLoading = false
|
||||
})
|
||||
},
|
||||
pageChange(page) {
|
||||
this.changePageCoreRecordData()
|
||||
this.tableFrom.page = page
|
||||
multipleSelection: [],
|
||||
multipleSelectionAll: [],
|
||||
idKey: 'id',
|
||||
nextPageFlag: false,
|
||||
attr: []
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
keyNum: {
|
||||
deep: true,
|
||||
handler(val) {
|
||||
this.getList()
|
||||
},
|
||||
handleSizeChange(val) {
|
||||
this.changePageCoreRecordData()
|
||||
this.tableFrom.limit = val
|
||||
this.getList()
|
||||
},
|
||||
// 发送
|
||||
sendGrant(id){
|
||||
this.$modalSure('发送优惠劵吗').then(() => {
|
||||
couponUserApi({ couponId:id, uid:this.userIds }).then(() => {
|
||||
this.$message.success('发送成功')
|
||||
this.getList()
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.tableFrom.page = 1
|
||||
this.getList()
|
||||
this.multipleSelectionAll = this.couponData || []
|
||||
},
|
||||
methods: {
|
||||
close() {
|
||||
this.multipleSelection = []
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val
|
||||
setTimeout(() => {
|
||||
this.changePageCoreRecordData()
|
||||
}, 50)
|
||||
},
|
||||
// 设置选中的方法
|
||||
setSelectRow() {
|
||||
if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
|
||||
return
|
||||
}
|
||||
// 标识当前行的唯一键的名称
|
||||
const idKey = this.idKey
|
||||
const selectAllIds = []
|
||||
this.multipleSelectionAll.forEach(row => {
|
||||
selectAllIds.push(row[idKey])
|
||||
})
|
||||
this.$refs.table.clearSelection()
|
||||
for (var i = 0; i < this.tableData.data.length; i++) {
|
||||
if (selectAllIds.indexOf(this.tableData.data[i][idKey]) >= 0) {
|
||||
// 设置选中,记住table组件需要使用ref="table"
|
||||
this.$refs.table.toggleRowSelection(this.tableData.data[i], true)
|
||||
}
|
||||
}
|
||||
},
|
||||
// 记忆选择核心方法
|
||||
changePageCoreRecordData() {
|
||||
// 标识当前行的唯一键的名称
|
||||
const idKey = this.idKey
|
||||
const that = this
|
||||
// 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
|
||||
if (this.multipleSelectionAll.length <= 0) {
|
||||
this.multipleSelectionAll = this.multipleSelection
|
||||
return
|
||||
}
|
||||
// 总选择里面的key集合
|
||||
const selectAllIds = []
|
||||
this.multipleSelectionAll.forEach(row => {
|
||||
selectAllIds.push(row[idKey])
|
||||
})
|
||||
const selectIds = []
|
||||
// 获取当前页选中的id
|
||||
this.multipleSelection.forEach(row => {
|
||||
selectIds.push(row[idKey])
|
||||
// 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
|
||||
if (selectAllIds.indexOf(row[idKey]) < 0) {
|
||||
that.multipleSelectionAll.push(row)
|
||||
}
|
||||
})
|
||||
const noSelectIds = []
|
||||
// 得到当前页没有选中的id
|
||||
this.tableData.data.forEach(row => {
|
||||
if (selectIds.indexOf(row[idKey]) < 0) {
|
||||
noSelectIds.push(row[idKey])
|
||||
}
|
||||
})
|
||||
noSelectIds.forEach(id => {
|
||||
if (selectAllIds.indexOf(id) >= 0) {
|
||||
for (let i = 0; i < that.multipleSelectionAll.length; i++) {
|
||||
if (that.multipleSelectionAll[i][idKey] == id) {
|
||||
// 如果总选择中有未被选中的,那么就删除这条
|
||||
that.multipleSelectionAll.splice(i, 1)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
ok() {
|
||||
if (this.multipleSelection.length > 0) {
|
||||
this.$emit('getCouponId', this.multipleSelectionAll)
|
||||
// this.close()
|
||||
} else {
|
||||
this.$message.warning('请先选择优惠劵')
|
||||
}
|
||||
},
|
||||
// 列表
|
||||
getList(num) {
|
||||
this.listLoading = true
|
||||
this.tableFrom.page = num ? num : this.tableFrom.page
|
||||
marketingListApi(this.tableFrom).then(res => {
|
||||
this.tableData.data = res.list
|
||||
this.tableData.total = res.total
|
||||
this.listLoading = false
|
||||
this.$nextTick(function() {
|
||||
this.setSelectRow()// 调用跨页选中方法
|
||||
})
|
||||
}).catch(res => {
|
||||
this.listLoading = false
|
||||
})
|
||||
},
|
||||
pageChange(page) {
|
||||
this.changePageCoreRecordData()
|
||||
this.tableFrom.page = page
|
||||
this.getList()
|
||||
},
|
||||
handleSizeChange(val) {
|
||||
this.changePageCoreRecordData()
|
||||
this.tableFrom.limit = val
|
||||
this.getList()
|
||||
},
|
||||
// 发送
|
||||
sendGrant(id){
|
||||
this.$modalSure('发送优惠劵吗').then(() => {
|
||||
couponUserApi({ couponId:id, uid:this.userIds }).then(() => {
|
||||
this.$message.success('发送成功')
|
||||
this.getList()
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@@ -102,12 +102,11 @@
|
||||
<script>
|
||||
import * as systemAdminApi from '@/api/systemadmin.js'
|
||||
import * as roleApi from '@/api/role.js'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
export default {
|
||||
name: "index",
|
||||
data(){
|
||||
return {
|
||||
constants,
|
||||
constants: this.$constants,
|
||||
loading:false,
|
||||
templateRadio:'',
|
||||
dialogFormVisible:false,
|
||||
|
||||
@@ -33,7 +33,7 @@ export default {
|
||||
initialFrameHeight: 500, // 初始容器高度
|
||||
initialFrameWidth: '100%', // 初始容器宽度
|
||||
UEDITOR_HOME_URL: '/UEditor/',
|
||||
serverUrl: 'http://35.201.165.105:8000/controller.php'
|
||||
serverUrl: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<template>
|
||||
<template>
|
||||
<div>
|
||||
<el-row :gutter="30">
|
||||
<el-col v-bind="grid">
|
||||
@@ -31,34 +31,45 @@
|
||||
>({{ data.name }})</span>
|
||||
</div>
|
||||
<span class="el-ic">
|
||||
<svg-icon
|
||||
icon-class="example"
|
||||
title="添加分类"
|
||||
class="icon-space"
|
||||
@click.stop="onAdd(data.id)"
|
||||
/>
|
||||
<svg-icon
|
||||
icon-class="danyuan"
|
||||
title="添加管理单元"
|
||||
class="icon-space"
|
||||
/>
|
||||
<i
|
||||
v-if="data.id!== 10000"
|
||||
class="el-icon-edit"
|
||||
title="修改"
|
||||
@click.stop="onEdit(data.id)"
|
||||
/>
|
||||
<svg-icon
|
||||
icon-class="detail"
|
||||
title="查看该空间详情"
|
||||
class="icon-space"
|
||||
/>
|
||||
<i
|
||||
v-if="data.id!== 10000"
|
||||
class="el-icon-delete"
|
||||
title="删除分类"
|
||||
@click.stop="() => handleDelete(data.id)"
|
||||
/>
|
||||
<el-dropdown>
|
||||
<span class="el-dropdown-link">
|
||||
<i class="el-icon-more"></i>
|
||||
</span>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item @click.native="onAdd(data.id)">添加分类</el-dropdown-item>
|
||||
<el-dropdown-item @click.native="onEdit(data.id)">编辑分类</el-dropdown-item>
|
||||
<el-dropdown-item @click.native="handleDelete(data.id)">删除分类</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
|
||||
<!--<svg-icon-->
|
||||
<!--icon-class="example"-->
|
||||
<!--title="添加分类"-->
|
||||
<!--class="icon-space"-->
|
||||
<!--@click.stop="onAdd(data.id)"-->
|
||||
<!--/>-->
|
||||
<!--<svg-icon-->
|
||||
<!--icon-class="danyuan"-->
|
||||
<!--title="添加管理单元"-->
|
||||
<!--class="icon-space"-->
|
||||
<!--/>-->
|
||||
<!--<i-->
|
||||
<!--v-if="data.id!== 10000"-->
|
||||
<!--class="el-icon-edit"-->
|
||||
<!--title="修改"-->
|
||||
<!--@click.stop="onEdit(data.id)"-->
|
||||
<!--/>-->
|
||||
<!--<svg-icon-->
|
||||
<!--icon-class="detail"-->
|
||||
<!--title="查看该空间详情"-->
|
||||
<!--class="icon-space"-->
|
||||
<!--/>-->
|
||||
<!--<i-->
|
||||
<!--v-if="data.id!== 10000"-->
|
||||
<!--class="el-icon-delete"-->
|
||||
<!--title="删除分类"-->
|
||||
<!--@click.stop="() => handleDelete(data.id)"-->
|
||||
<!--/>-->
|
||||
</span>
|
||||
</div>
|
||||
</el-tree>
|
||||
@@ -70,22 +81,60 @@
|
||||
<el-col v-bind="grid2" class="colLeft">
|
||||
<div class="conter mb15">
|
||||
<div class="bnt">
|
||||
<el-button size="mini" type="primary" class="mb10 mr10" @click="checkPics">使用选中图片</el-button>
|
||||
<el-upload
|
||||
class="upload-demo mr10 mb15"
|
||||
action
|
||||
:http-request="handleUploadForm"
|
||||
:on-change="imgSaveToUrl"
|
||||
:headers="myHeaders"
|
||||
:show-file-list="false"
|
||||
multiple
|
||||
>
|
||||
<el-button size="mini" type="primary">点击上传</el-button>
|
||||
</el-upload>
|
||||
<el-button type="success" size="mini" @click.stop="onAdd">添加分类</el-button>
|
||||
<el-button type="error" size="mini" class="mr10" :disabled="checkPicList.length===0" @click.stop="editPicList('图片')">删除图片</el-button>
|
||||
<el-select v-model="sleOptions.attachment_category_name" placeholder="图片移动至" class="mb15" size="mini">
|
||||
<!--<el-tooltip class="item" effect="dark" content="使用选中图片" placement="top-start">-->
|
||||
<!--<i class="el-icon-thumb mr20" style="font-size: 25px;" @click="checkPics"></i>-->
|
||||
<!--</el-tooltip>-->
|
||||
<!--<el-upload-->
|
||||
<!--class="upload-demo mb15"-->
|
||||
<!--action-->
|
||||
<!--:http-request="handleUploadForm"-->
|
||||
<!--:on-change="imgSaveToUrl"-->
|
||||
<!--:headers="myHeaders"-->
|
||||
<!--:show-file-list="false"-->
|
||||
<!--multiple-->
|
||||
<!-->-->
|
||||
<!--<el-tooltip class="item" effect="dark" content="上传图片" placement="top-start">-->
|
||||
<!--<i class="el-icon-upload2 mr20" style="font-size: 25px;"></i>-->
|
||||
<!--</el-tooltip>-->
|
||||
|
||||
<!--<!–<el-button size="mini" type="primary">点击上传</el-button>–>-->
|
||||
<!--</el-upload>-->
|
||||
<el-button size="small" type="primary" class="mr20 mb20" @click="checkPics">使用选中图片</el-button>
|
||||
<div class="mr20 mb20">
|
||||
<el-button-group>
|
||||
<el-tooltip class="item" effect="dark" content="上传图片" placement="top-start">
|
||||
<el-upload
|
||||
class="upload-demo"
|
||||
action
|
||||
:http-request="handleUploadForm"
|
||||
:on-change="imgSaveToUrl"
|
||||
:headers="myHeaders"
|
||||
:show-file-list="false"
|
||||
multiple
|
||||
>
|
||||
<el-button type="primary" icon="el-icon-upload2" size="mini" style="font-size: 15px;"></el-button>
|
||||
</el-upload>
|
||||
</el-tooltip>
|
||||
<el-tooltip class="item" effect="dark" content="添加分类" placement="top-start">
|
||||
<el-button type="primary" icon="el-icon-circle-plus-outline" style="font-size: 15px;" size="mini" @click="onAdd"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip class="item" effect="dark" content="删除图片" placement="top-start">
|
||||
<el-button type="primary" icon="el-icon-delete" style="font-size: 15px;" size="mini" @click.stop="editPicList('图片')"></el-button>
|
||||
</el-tooltip>
|
||||
</el-button-group>
|
||||
</div>
|
||||
|
||||
<!--<el-tooltip class="item" effect="dark" content="添加分类" placement="top-start">-->
|
||||
<!--<i class="el-icon-circle-plus-outline mr20" style="font-size: 25px;" @click="onAdd"></i>-->
|
||||
<!--</el-tooltip>-->
|
||||
<!--<el-button type="success" size="mini" @click.stop="onAdd">添加分类</el-button>-->
|
||||
<!--<el-tooltip class="item" effect="dark" content="删除图片" placement="top-start">-->
|
||||
<!--<i class="el-icon-delete mr20" style="font-size: 25px;" @click.stop="editPicList('图片')"></i>-->
|
||||
<!--</el-tooltip>-->
|
||||
<!--<el-button type="error" size="mini" class="mr10" :disabled="checkPicList.length===0" @click.stop="editPicList('图片')">删除图片</el-button>-->
|
||||
<el-select v-model="sleOptions.attachment_category_name" placeholder="图片移动至" class="mb20" size="small">
|
||||
<el-option
|
||||
class="demo"
|
||||
:label="sleOptions.attachment_category_name"
|
||||
:value="sleOptions.attachment_category_id"
|
||||
style="max-width: 560px;height:200px;overflow: auto;background-color:#fff"
|
||||
@@ -106,7 +155,7 @@
|
||||
<i class="el-icon-picture" style="font-size: 60px;color: rgb(219, 219, 219);" />
|
||||
<span class="imagesNo_sp">图片库为空</span>
|
||||
</div>
|
||||
<div class="conters">
|
||||
<div class="conters scrollbarAll">
|
||||
<div
|
||||
v-for="(item, index) in pictrueList.list"
|
||||
:key="index"
|
||||
@@ -121,7 +170,7 @@
|
||||
</div>
|
||||
<div class="block">
|
||||
<el-pagination
|
||||
:page-sizes="[12, 24, 48, 60]"
|
||||
:page-sizes="[10, 20, 30, 40]"
|
||||
:page-size="tableData.limit"
|
||||
:current-page="tableData.page"
|
||||
:pager-count="5"
|
||||
@@ -142,8 +191,10 @@
|
||||
@close="closeModel"
|
||||
>
|
||||
<el-form ref="editPram" :model="editPram" label-width="100px" v-loading="loading">
|
||||
<el-form-item label="上级分类">
|
||||
<el-cascader v-model="editPram.pid" :options="treeData2" :props="categoryProps" style="width:100%" />
|
||||
<el-form-item label="上级分类" prop="pid"
|
||||
:rules="[{ type: 'number',required:true,message:'请选择上级分类',trigger:['blur','change'] }]"
|
||||
>
|
||||
<el-cascader v-model="editPram.pid" :options="treeData2" :props="categoryProps" style="width:100%"/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="分类名称"
|
||||
@@ -197,7 +248,7 @@ export default {
|
||||
emitPath: false
|
||||
},
|
||||
editPram:{
|
||||
pid: 0,
|
||||
pid: 1000,
|
||||
name: '',
|
||||
type: 2,
|
||||
sort: 1,
|
||||
@@ -213,17 +264,17 @@ export default {
|
||||
},
|
||||
list: [],
|
||||
grid: {
|
||||
xl: 8,
|
||||
lg: 8,
|
||||
md: 8,
|
||||
sm: 8,
|
||||
xl: 7,
|
||||
lg: 7,
|
||||
md: 7,
|
||||
sm: 7,
|
||||
xs: 24
|
||||
},
|
||||
grid2: {
|
||||
xl: 16,
|
||||
lg: 16,
|
||||
md: 16,
|
||||
sm: 16,
|
||||
xl: 17,
|
||||
lg: 17,
|
||||
md: 17,
|
||||
sm: 17,
|
||||
xs: 24
|
||||
},
|
||||
filterText: '',
|
||||
@@ -235,7 +286,7 @@ export default {
|
||||
},
|
||||
tableData: {
|
||||
page: 1,
|
||||
limit: 12,
|
||||
limit: 10,
|
||||
pid: 0
|
||||
},
|
||||
classifyId: 0,
|
||||
@@ -300,7 +351,7 @@ export default {
|
||||
handlerSubmit(formName) {
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
if( this.editPram.pid === 10000 ) this.editPram.pid = 0
|
||||
if( this.editPram.pid==10000) this.editPram.pid = 0
|
||||
this.bizTitle==='添加分类' ? addCategroy(this.editPram).then(data => {
|
||||
this.$message.success('创建成功')
|
||||
this.visible = false
|
||||
@@ -457,6 +508,7 @@ export default {
|
||||
},
|
||||
// 删除图片
|
||||
editPicList(tit) {
|
||||
if (!this.checkPicList.length) return this.$message.warning('请先选择图片')
|
||||
this.$modalSure().then(() => {
|
||||
fileDeleteApi(this.ids.join(',')).then(() => {
|
||||
this.$message.success('刪除成功')
|
||||
@@ -500,6 +552,16 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.demo::-webkit-scrollbar {
|
||||
display: none; /* Chrome Safari */
|
||||
}
|
||||
|
||||
.demo {
|
||||
scrollbar-width: none; /* firefox */
|
||||
-ms-overflow-style: none; /* IE 10+ */
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.temp {
|
||||
height: 0;
|
||||
margin-bottom: 0;
|
||||
@@ -515,6 +577,7 @@ export default {
|
||||
}
|
||||
.upload-demo {
|
||||
display: inline-block !important;
|
||||
float: left;
|
||||
}
|
||||
.tree_w {
|
||||
padding: 20px 30px
|
||||
@@ -524,7 +587,7 @@ export default {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
font-size: 14px;
|
||||
font-size: 12px;
|
||||
padding-right: 8px;
|
||||
color: #4386c6;
|
||||
}
|
||||
@@ -607,7 +670,7 @@ export default {
|
||||
box-sizing: border-box;
|
||||
.trees {
|
||||
width: 100%;
|
||||
max-height: 374px;
|
||||
max-height: 345px;
|
||||
}
|
||||
}
|
||||
.scollhide::-webkit-scrollbar {
|
||||
@@ -617,10 +680,12 @@ export default {
|
||||
.conters{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
max-height: 296px;
|
||||
overflow: auto;
|
||||
}
|
||||
.conters:after {content: ""; width: 410px !important; }
|
||||
.gridPic{
|
||||
margin-right: 20px;
|
||||
margin-right: 15px;
|
||||
margin-bottom: 10px;
|
||||
width: 110px;
|
||||
height: 110px;
|
||||
@@ -636,11 +701,12 @@ export default {
|
||||
height: 100%;
|
||||
.bnt {
|
||||
width: 100%;
|
||||
padding: 0 13px 10px 15px;
|
||||
padding: 0 13px 10px 7px;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
}
|
||||
.pictrueList {
|
||||
padding-left: 15px;
|
||||
/*padding-left: 15px;*/
|
||||
width: 100%;
|
||||
el-image {
|
||||
width: 100%;
|
||||
|
||||
@@ -26,3 +26,17 @@ export function orderStatusFilter(status) {
|
||||
}
|
||||
return statusMap[status]
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 退款状态
|
||||
* 2,已收货,待评价
|
||||
*/
|
||||
export function refundStatusFilter(status) {
|
||||
const statusMap = {
|
||||
'0': '未退款',
|
||||
'1': '申请中',
|
||||
'2': '已退款',
|
||||
'3': '退款中'
|
||||
}
|
||||
return statusMap[status]
|
||||
}
|
||||
|
||||
@@ -8,7 +8,12 @@ export function levelFilter(status) {
|
||||
return ''
|
||||
}
|
||||
let arrayList = JSON.parse(localStorage.getItem('levelKey'));
|
||||
return arrayList.filter(item => status === item.id)[0].name
|
||||
let array = arrayList.filter(item => status === item.id)
|
||||
if(array.length){
|
||||
return array[0].name
|
||||
}else{
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -22,3 +27,14 @@ export function typeFilter(status) {
|
||||
}
|
||||
return statusMap[status]
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户类型
|
||||
*/
|
||||
export function filterIsPromoter(status) {
|
||||
const statusMap = {
|
||||
true: '推广员',
|
||||
false: '普通用户'
|
||||
}
|
||||
return statusMap[status]
|
||||
}
|
||||
|
||||
@@ -5,12 +5,41 @@
|
||||
<router-view :key="key" />
|
||||
</keep-alive>
|
||||
</transition>
|
||||
<div class="footers">
|
||||
<el-link v-for="item in links" :key="item.key" :href="item.href" target="_blank" class="mr15 mb20">{{item.title}}</el-link>
|
||||
<div class="title mb15" v-text="copyright"></div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'AppMain',
|
||||
data () {
|
||||
return {
|
||||
links: [
|
||||
{
|
||||
title: '官网',
|
||||
key: '1',
|
||||
href: 'https://www.crmeb.com',
|
||||
blankTarget: true
|
||||
},
|
||||
{
|
||||
title: '社区',
|
||||
key: '2',
|
||||
href: 'http://bbs.crmeb.net',
|
||||
blankTarget: true
|
||||
},
|
||||
{
|
||||
title: '文档',
|
||||
key: '3',
|
||||
href: 'https://help.crmeb.net',
|
||||
blankTarget: true
|
||||
}
|
||||
],
|
||||
copyright: 'Copyright © 2020 西安众邦网络科技有限公司'
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
cachedViews() {
|
||||
return this.$store.state.tagsView.cachedViews
|
||||
@@ -23,6 +52,15 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.footers{
|
||||
text-align: center;
|
||||
font-size: 14px;
|
||||
color: #808695;
|
||||
.title{
|
||||
font-size: 14px;
|
||||
color: #808695;
|
||||
}
|
||||
}
|
||||
.app-main {
|
||||
/* 50= navbar 50 */
|
||||
min-height: calc(100vh - 50px);
|
||||
@@ -46,13 +84,10 @@ export default {
|
||||
padding-top: 84px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="scss">
|
||||
// fix css style bug in open el-dialog
|
||||
.el-popup-parent--hidden {
|
||||
.fixed-header {
|
||||
padding-right: 15px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
@@ -202,9 +202,9 @@ export default {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.tags-view-container {
|
||||
height: 34px;
|
||||
padding: 6px 0;
|
||||
width: 100%;
|
||||
background: #fff;
|
||||
background: #f5f7f9;
|
||||
border-bottom: 1px solid #d8dce5;
|
||||
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04);
|
||||
.tags-view-wrapper {
|
||||
@@ -212,15 +212,14 @@ export default {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
border: 1px solid #d8dce5;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
border: 1px solid #fff;
|
||||
color: #495060;
|
||||
background: #fff;
|
||||
padding: 0 8px;
|
||||
font-size: 12px;
|
||||
margin-left: 5px;
|
||||
margin-top: 4px;
|
||||
&:first-of-type {
|
||||
margin-left: 15px;
|
||||
}
|
||||
@@ -228,9 +227,9 @@ export default {
|
||||
margin-right: 15px;
|
||||
}
|
||||
&.active {
|
||||
background-color: #42b983;
|
||||
color: #fff;
|
||||
border-color: #42b983;
|
||||
background-color: #fff;
|
||||
color: #498ff7;
|
||||
border-color: #fff;
|
||||
&::before {
|
||||
content: '';
|
||||
background: #fff;
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
<settings />
|
||||
</right-panel>
|
||||
</div>
|
||||
<div class="open-image" @click="clear" v-if="openImage"><img src="@/assets/imgs/kefuImg.jpg" alt=""></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -23,6 +24,11 @@ import { mapState } from 'vuex'
|
||||
|
||||
export default {
|
||||
name: 'Layout',
|
||||
data(){
|
||||
return {
|
||||
openImage: true
|
||||
}
|
||||
},
|
||||
components: {
|
||||
AppMain,
|
||||
Navbar,
|
||||
@@ -50,6 +56,9 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
clear () {
|
||||
this.openImage = false;
|
||||
},
|
||||
handleClickOutside() {
|
||||
this.$store.dispatch('app/closeSideBar', { withoutAnimation: false })
|
||||
}
|
||||
@@ -60,7 +69,18 @@ export default {
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/styles/mixin.scss";
|
||||
@import "~@/styles/variables.scss";
|
||||
|
||||
.open-image {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
position: fixed;
|
||||
background-color: rgba(0,0,0,0.6);
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 999999;
|
||||
}
|
||||
.app-wrapper {
|
||||
@include clearfix;
|
||||
position: relative;
|
||||
|
||||
@@ -38,6 +38,7 @@ import scroll from "@/libs/loading";
|
||||
import schema from "async-validator";
|
||||
// 切勿更改 此组件为表单生成中使用的图片上传组件
|
||||
import SelfUpload from '@/components/uploadPicture/forGenrator/index.vue'
|
||||
import util from '@/utils/utils'
|
||||
import modalAttr from '@/libs/modal-attr'
|
||||
import modalIcon from '@/libs/modal-icon'
|
||||
import { modalSure } from '@/libs/public'
|
||||
@@ -49,6 +50,8 @@ import './utils/error-log' // error integralLog
|
||||
import * as filters from './filters' // global filters
|
||||
import { parseQuery } from "@/utils";
|
||||
import * as Auth from '@/libs/wechat';
|
||||
import * as constants from '@/utils/constants.js'
|
||||
|
||||
Vue.use(VueLazyload, {
|
||||
preLoad: 1.3,
|
||||
error: require('./assets/imgs/no.png'),
|
||||
@@ -76,6 +79,8 @@ Vue.prototype.$modalIcon = modalIcon
|
||||
Vue.prototype.$dialog = dialog
|
||||
Vue.prototype.$scroll = scroll;
|
||||
Vue.prototype.$wechat = Auth;
|
||||
Vue.prototype.$util = util;
|
||||
Vue.prototype.$constants = constants;
|
||||
Vue.prototype.$validator = function(rule) {
|
||||
return new schema(rule);
|
||||
};
|
||||
|
||||
@@ -19,6 +19,15 @@ const contentRouter = {
|
||||
icon: 'clipboard'
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'articleCreat/:id?',
|
||||
name: 'articleCreat',
|
||||
component: () => import('@/views/content/article/edit'),
|
||||
meta: {
|
||||
title: '添加文章',
|
||||
noCache: true, activeMenu: `/content/articleManager`
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'classifManager',
|
||||
name: 'classifManager',
|
||||
|
||||
@@ -98,6 +98,20 @@
|
||||
margin-top: 25px;
|
||||
}
|
||||
}
|
||||
.el-dialog{
|
||||
border-radius: 6px;
|
||||
}
|
||||
/* 去掉滚动条 */
|
||||
.scrollbarAll::-webkit-scrollbar {
|
||||
display: none; /* Chrome Safari */
|
||||
}
|
||||
|
||||
.scrollbarAll {
|
||||
scrollbar-width: none; /* firefox */
|
||||
-ms-overflow-style: none; /* IE 10+ */
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.seachTiele{
|
||||
font-size: 12px;
|
||||
line-height: 29px;
|
||||
|
||||
@@ -40,4 +40,42 @@ export function addTreeListLabelForCasCard(treeData, child) {
|
||||
})
|
||||
}
|
||||
|
||||
//加法函数,用来得到精确的加法结果
|
||||
//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
|
||||
//调用:$h.Add(arg1,arg2)
|
||||
//返回值:arg1加上arg2的精确结果
|
||||
export function Add(arg1, arg2) {
|
||||
arg2 = parseFloat(arg2);
|
||||
var r1, r2, m;
|
||||
try {
|
||||
r1 = arg1.toString().split(".")[1].length
|
||||
} catch (e) {
|
||||
r1 = 0
|
||||
}
|
||||
try {
|
||||
r2 = arg2.toString().split(".")[1].length
|
||||
} catch (e) {
|
||||
r2 = 0
|
||||
}
|
||||
m = Math.pow(100, Math.max(r1, r2));
|
||||
return (this.Mul(arg1, m) + this.Mul(arg2, m)) / m;
|
||||
}
|
||||
|
||||
//乘法函数,用来得到精确的乘法结果
|
||||
//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
|
||||
//调用:$h.Mul(arg1,arg2)
|
||||
//返回值:arg1乘以arg2的精确结果
|
||||
export function Mul(arg1, arg2) {
|
||||
arg1 = parseFloat(arg1);
|
||||
arg2 = parseFloat(arg2);
|
||||
var m = 0,
|
||||
s1 = arg1.toString(),
|
||||
s2 = arg2.toString();
|
||||
try {
|
||||
m += s1.split(".")[1].length
|
||||
} catch (e) {}
|
||||
try {
|
||||
m += s2.split(".")[1].length
|
||||
} catch (e) {}
|
||||
return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
|
||||
}
|
||||
|
||||
52
admin/src/utils/utils.js
Normal file
52
admin/src/utils/utils.js
Normal file
@@ -0,0 +1,52 @@
|
||||
export default {// 设置选中的方法
|
||||
// 记忆选择核心方法
|
||||
changePageCoreRecordData: function (multipleSelectionAll, multipleSelection, tableData, successFn) {
|
||||
// 标识当前行的唯一键的名称
|
||||
const idKey = 'uid'
|
||||
const that = this
|
||||
// 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
|
||||
if (multipleSelectionAll.length <= 0) {
|
||||
multipleSelectionAll=multipleSelection
|
||||
console.log(multipleSelectionAll)
|
||||
successFn(multipleSelectionAll)
|
||||
return
|
||||
}
|
||||
// 总选择里面的key集合
|
||||
const selectAllIds = []
|
||||
multipleSelectionAll.forEach(row => {
|
||||
selectAllIds.push(row[idKey])
|
||||
})
|
||||
const selectIds = []
|
||||
// 获取当前页选中的id
|
||||
multipleSelection.forEach(row => {
|
||||
selectIds.push(row[idKey])
|
||||
// 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
|
||||
if (selectAllIds.indexOf(row[idKey]) < 0) {
|
||||
multipleSelectionAll.push(row)
|
||||
console.log(multipleSelectionAll)
|
||||
// successFn(multipleSelectionAll)
|
||||
}
|
||||
})
|
||||
const noSelectIds = []
|
||||
// 得到当前页没有选中的id
|
||||
tableData.forEach(row => {
|
||||
if (selectIds.indexOf(row[idKey]) < 0) {
|
||||
noSelectIds.push(row[idKey])
|
||||
}
|
||||
})
|
||||
noSelectIds.forEach(uid => {
|
||||
if (selectAllIds.indexOf(uid) >= 0) {
|
||||
for (let i = 0; i < multipleSelectionAll.length; i++) {
|
||||
if (multipleSelectionAll[i][idKey] == uid) {
|
||||
// 如果总选择中有未被选中的,那么就删除这条
|
||||
multipleSelectionAll.splice(i, 1)
|
||||
console.log(multipleSelectionAll)
|
||||
//successFn(multipleSelectionAll)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
successFn(multipleSelectionAll)
|
||||
}
|
||||
}
|
||||
@@ -135,7 +135,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import { tempAsyncApi, myTempTypeApi, myTempListApi, wechatTemplateStatusApi, wechatTemplateSaveApi, wechatTemplateUpdateApi, wechatTemplateDeleteApi, myTempStatusApi} from '@/api/wxApi'
|
||||
import zbParser from '@/components/FormGenerator/components/parser/ZBParser'
|
||||
export default {
|
||||
@@ -164,7 +163,7 @@
|
||||
isCreate: 0,
|
||||
editData: {},
|
||||
dialogVisible: false,
|
||||
switchData: constants.switchStatus,
|
||||
switchData: this.$constants.switchStatus,
|
||||
tableFrom: {
|
||||
page: 1,
|
||||
limit: 20,
|
||||
|
||||
@@ -115,7 +115,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import { wechatTemplateListApi, wechatTemplateStatusApi, wechatTemplateSaveApi, wechatTemplateUpdateApi, wechatTemplateDeleteApi} from '@/api/wxApi'
|
||||
import zbParser from '@/components/FormGenerator/components/parser/ZBParser'
|
||||
export default {
|
||||
@@ -127,7 +126,7 @@
|
||||
isCreate: 0,
|
||||
editData: {},
|
||||
dialogVisible: false,
|
||||
switchData: constants.switchStatus,
|
||||
switchData: this.$constants.switchStatus,
|
||||
tableFrom: {
|
||||
page: 1,
|
||||
limit: 20,
|
||||
|
||||
@@ -1,75 +1,78 @@
|
||||
<template>
|
||||
<div class="components-container">
|
||||
<el-form ref="pram" label-width="150px" :model="pram">
|
||||
<el-form-item label="标题" prop="title" :rules="[{required:true, message:'请填写标题', trigger:['blur','change']}]">
|
||||
<el-input v-model="pram.title" placeholder="标题" maxlength="100"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="作者" prop="author" :rules="[{required:true, message:'请填作者', trigger:['blur','change']}]">
|
||||
<el-input v-model="pram.author" placeholder="作者" maxlength="20"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="文章分类">
|
||||
<el-select v-model="pram.cid" placeholder="请选择" style="width:100%;">
|
||||
<el-option
|
||||
v-for="item in categoryTreeData"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="图文封面" prop="imageInput" :rules="[{ required: true, message: '请上传图文封面', trigger: 'change' }]">
|
||||
<div class="upLoadPicBox" @click="modalPicTap('1')">
|
||||
<div v-if="pram.imageInput" class="pictrue"><img :src="pram.imageInput"></div>
|
||||
<div v-else class="upLoad">
|
||||
<i class="el-icon-camera cameraIconfont" />
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<!--<el-form-item label="微信公众号封面" prop="imageInput" :rules="[{ required: true, message: '请上传图文封面', trigger: 'change' }]">-->
|
||||
<!--<div class="upLoadPicBox">-->
|
||||
<div class="divBox">
|
||||
<el-card class="box-card">
|
||||
<div class="components-container">
|
||||
<el-form ref="pram" label-width="150px" :model="pram">
|
||||
<el-form-item label="标题" prop="title" :rules="[{required:true, message:'请填写标题', trigger:['blur','change']}]">
|
||||
<el-input v-model="pram.title" placeholder="标题" maxlength="100"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="作者" prop="author" :rules="[{required:true, message:'请填作者', trigger:['blur','change']}]">
|
||||
<el-input v-model="pram.author" placeholder="作者" maxlength="20"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="文章分类">
|
||||
<el-select v-model="pram.cid" placeholder="请选择" style="width:100%;">
|
||||
<el-option
|
||||
v-for="item in categoryTreeData"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="图文封面" prop="imageInput" :rules="[{ required: true, message: '请上传图文封面', trigger: 'change' }]">
|
||||
<div class="upLoadPicBox" @click="modalPicTap('1')">
|
||||
<div v-if="pram.imageInput" class="pictrue"><img :src="pram.imageInput"></div>
|
||||
<div v-else class="upLoad">
|
||||
<i class="el-icon-camera cameraIconfont" />
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<!--<el-form-item label="微信公众号封面" prop="imageInput" :rules="[{ required: true, message: '请上传图文封面', trigger: 'change' }]">-->
|
||||
<!--<div class="upLoadPicBox">-->
|
||||
<!--<div v-if="pram.imageInput" class="pictrue"><img :src="pram.imageInput"></div>-->
|
||||
<!--<el-upload-->
|
||||
<!--v-else-->
|
||||
<!--class="upload-demo mr10 mb15"-->
|
||||
<!--action-->
|
||||
<!--:http-request="handleUploadForm"-->
|
||||
<!--:headers="myHeaders"-->
|
||||
<!--:show-file-list="false"-->
|
||||
<!--multiple-->
|
||||
<!--v-else-->
|
||||
<!--class="upload-demo mr10 mb15"-->
|
||||
<!--action-->
|
||||
<!--:http-request="handleUploadForm"-->
|
||||
<!--:headers="myHeaders"-->
|
||||
<!--:show-file-list="false"-->
|
||||
<!--multiple-->
|
||||
<!-->-->
|
||||
<!--<div class="upLoad">-->
|
||||
<!--<i class="el-icon-camera cameraIconfont" />-->
|
||||
<!--</div>-->
|
||||
<!--<div class="upLoad">-->
|
||||
<!--<i class="el-icon-camera cameraIconfont" />-->
|
||||
<!--</div>-->
|
||||
<!--</el-upload>-->
|
||||
<!--</div>-->
|
||||
<!--</el-form-item>-->
|
||||
<el-form-item label="文章简介" prop="synopsis" :rules="[{required:true, message:'请填写文章简介', trigger:['blur','change']}]">
|
||||
<el-input v-model="pram.synopsis" maxlength="100" type="textarea" :rows="2" resize="none" placeholder="文章简介" />
|
||||
</el-form-item>
|
||||
<el-form-item label="文章内容" prop="content" :rules="[{required:true, message:'请填写文章内容', trigger:['blur','change']}]">
|
||||
<ueditor-from v-model="pram.content" :content="pram.content" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否Banner">
|
||||
<el-switch v-model="pram.isBanner" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否热门">
|
||||
<el-switch v-model="pram.isHot" />
|
||||
</el-form-item>
|
||||
<!--<el-form-item label="原文链接">-->
|
||||
<!--<p>原文链接选填,填写之后在图文左下方会出现此链接</p>-->
|
||||
<!--<el-input v-model="pram.url" placeholder="原文链接" />-->
|
||||
<!--</el-form-item>-->
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="handerSubmit('pram')">保存</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!--</div>-->
|
||||
<!--</el-form-item>-->
|
||||
<el-form-item label="文章简介" prop="synopsis" :rules="[{required:true, message:'请填写文章简介', trigger:['blur','change']}]">
|
||||
<el-input v-model="pram.synopsis" maxlength="100" type="textarea" :rows="2" resize="none" placeholder="文章简介" />
|
||||
</el-form-item>
|
||||
<el-form-item label="文章内容" prop="content" :rules="[{required:true, message:'请填写文章内容', trigger:['blur','change']}]">
|
||||
<ueditor-from v-model="pram.content" :content="pram.content" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否Banner">
|
||||
<el-switch v-model="pram.isBanner" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否热门">
|
||||
<el-switch v-model="pram.isHot" />
|
||||
</el-form-item>
|
||||
<!--<el-form-item label="原文链接">-->
|
||||
<!--<p>原文链接选填,填写之后在图文左下方会出现此链接</p>-->
|
||||
<!--<el-input v-model="pram.url" placeholder="原文链接" />-->
|
||||
<!--</el-form-item>-->
|
||||
<el-form-item>
|
||||
<el-button type="primary" :loading="loading" @click="handerSubmit('pram')">保存</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Tinymce from '@/components/Tinymce/index'
|
||||
import * as categoryApi from '@/api/categoryApi.js'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import * as articleApi from '@/api/article.js'
|
||||
import * as selfUtil from '@/utils/ZBKJIutil.js'
|
||||
import { fileImageApi } from '@/api/systemSetting'
|
||||
@@ -77,18 +80,10 @@ import { getToken } from '@/utils/auth'
|
||||
export default {
|
||||
// name: "edit",
|
||||
components: { Tinymce },
|
||||
props: {
|
||||
isEdit: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
editData: {
|
||||
type: Object
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
constants,
|
||||
loading:false,
|
||||
constants: this.$constants,
|
||||
categoryTreeData: [],
|
||||
categoryProps: {
|
||||
value: 'id',
|
||||
@@ -114,14 +109,27 @@ export default {
|
||||
id: null
|
||||
// mediaId: null
|
||||
},
|
||||
editData: {},
|
||||
myHeaders: { 'X-Token': getToken() }
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.tempRoute = Object.assign({}, this.$route)
|
||||
},
|
||||
mounted() {
|
||||
if(this.$route.params.id){
|
||||
this.getInfo()
|
||||
this.setTagsViewTitle()
|
||||
}
|
||||
this.handlerGetCategoryTreeData()
|
||||
this.hadlerInitEditData()
|
||||
},
|
||||
methods: {
|
||||
getInfo (){
|
||||
categoryApi.articleInfoApi({ id: this.$route.params.id }).then(data => {
|
||||
this.editData = data
|
||||
this.hadlerInitEditData()
|
||||
})
|
||||
},
|
||||
// 上传
|
||||
handleUploadForm(param){
|
||||
const formData = new FormData()
|
||||
@@ -150,13 +158,13 @@ export default {
|
||||
}, tit, 'content')
|
||||
},
|
||||
hadlerInitEditData() {
|
||||
if (this.isEdit !== 1) return
|
||||
const { author, cid, content, imageInputs,
|
||||
if (!this.$route.params.id) return
|
||||
const { author, cid, content, imageInput,
|
||||
isBanner, isHot, shareSynopsis, shareTitle, sort, synopsis, title, url, id } = this.editData
|
||||
this.pram.author = author
|
||||
this.pram.cid = Number.parseInt(cid)
|
||||
this.pram.content = content
|
||||
this.pram.imageInput = imageInputs
|
||||
this.pram.imageInput = imageInput
|
||||
this.pram.isBanner = isBanner
|
||||
this.pram.isHot = isHot
|
||||
this.pram.shareSynopsis = shareSynopsis
|
||||
@@ -177,7 +185,7 @@ export default {
|
||||
handerSubmit(form) {
|
||||
this.$refs[form].validate(valid => {
|
||||
if (!valid) return
|
||||
if (this.isEdit === 0) {
|
||||
if (!this.$route.params.id) {
|
||||
this.handlerSave()
|
||||
} else {
|
||||
this.handlerUpdate()
|
||||
@@ -185,23 +193,36 @@ export default {
|
||||
})
|
||||
},
|
||||
handlerUpdate() {
|
||||
this.loading = true
|
||||
this.pram.cid = Array.isArray(this.pram.cid) ? this.pram.cid[0] : this.pram.cid
|
||||
this.pram.shareTitle = this.pram.title
|
||||
this.pram.shareSynopsis = this.pram.synopsis
|
||||
articleApi.UpdateArticle(this.pram).then(data => {
|
||||
this.$message.success('编辑文章成功')
|
||||
this.$emit('hideDialog')
|
||||
this.loading = false
|
||||
this.$router.push({ path: '/content/articleManager' });
|
||||
}).catch(()=>{
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
handlerSave() {
|
||||
this.loading = true
|
||||
this.pram.cid = Array.isArray(this.pram.cid) ? this.pram.cid[0] : this.pram.cid
|
||||
this.pram.shareTitle = this.pram.title
|
||||
this.pram.shareSynopsis = this.pram.synopsis
|
||||
articleApi.AddArticle(this.pram).then(data => {
|
||||
this.$message.success('新增文章成功')
|
||||
this.$emit('hideDialog')
|
||||
this.loading = false
|
||||
this.$router.push({ path: '/content/articleManager' });
|
||||
}).catch(()=>{
|
||||
this.loading = false
|
||||
})
|
||||
}
|
||||
},
|
||||
setTagsViewTitle() {
|
||||
const title = '编辑文章'
|
||||
const route = Object.assign({}, this.tempRoute, { title: `${title}-${this.$route.params.id}` })
|
||||
this.$store.dispatch('tagsView/updateVisitedView', route)
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -22,7 +22,10 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<el-button size="mini" type="primary" @click="handlerOpenEdit(0)">添加文章</el-button>
|
||||
<router-link :to=" { path:'/content/articleCreat' } ">
|
||||
<el-button size="small" type="primary" class="mr10">添加文章</el-button>
|
||||
</router-link>
|
||||
<!--<el-button size="mini" type="primary" @click="handlerOpenEdit(0)">添加文章</el-button>-->
|
||||
</div>
|
||||
<el-table :data="listData.list" size="mini"
|
||||
class="table"
|
||||
@@ -60,7 +63,10 @@
|
||||
<el-table-column prop="updateTime" label="更新时间" min-width="180"/>
|
||||
<el-table-column label="操作" min-width="100" fixed="right" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" size="small" @click="handlerOpenEdit(1, scope.row)">编辑</el-button>
|
||||
<router-link :to=" { path:'/content/articleCreat/'+ scope.row.id } ">
|
||||
<el-button size="small" type="text" class="mr10">编辑</el-button>
|
||||
</router-link>
|
||||
<!--<el-button type="text" size="small" @click="handlerOpenEdit(1, scope.row)">编辑</el-button>-->
|
||||
<!--<el-button type="text" size="small" disabled>关联产品</el-button>-->
|
||||
<el-button type="text" size="small" @click="handlerDelete(scope.row)">删除</el-button>
|
||||
</template>
|
||||
@@ -98,7 +104,6 @@
|
||||
<script>
|
||||
import * as articleApi from '@/api/article.js'
|
||||
import * as categoryApi from '@/api/categoryApi.js'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import * as selfUtil from '@/utils/ZBKJIutil.js'
|
||||
import edit from './edit'
|
||||
export default {
|
||||
@@ -106,12 +111,12 @@ export default {
|
||||
components: { edit },
|
||||
data() {
|
||||
return {
|
||||
constants,
|
||||
constants: this.$constants,
|
||||
listPram: {
|
||||
keywords: null,
|
||||
cid: null,
|
||||
page: 1,
|
||||
limit: constants.page.limit[0]
|
||||
limit: this.$constants.page.limit[0]
|
||||
},
|
||||
listData: { list: [], total: 0 },
|
||||
editDialogConfig: {
|
||||
|
||||
@@ -6,13 +6,12 @@
|
||||
|
||||
<script>
|
||||
import categoryList from '@/components/Category/list'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
export default {
|
||||
// name: "list",
|
||||
components: { categoryList },
|
||||
data() {
|
||||
return {
|
||||
constants
|
||||
constants: this.$constants
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
<div class="content" v-if="sales">
|
||||
<span class="content-number spBlock mb15">{{ sales.count }}</span>
|
||||
<div>
|
||||
<span class="content-time mr20">日同比:<i class="content-is" :class="Number(sales.dayRate)>=0?'up':'down'">{{ sales.dayRate }}</i><i :class="Number(sales.dayRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
<span class="content-time">周同比:<i class="content-is" :class="Number(sales.weekRate)>=0?'up':'down'">{{ sales.weekRate }}</i><i :class="Number(sales.weekRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
<span class="content-time mr20">日同比:<i class="content-is" :class="Number(sales.dayRate)>=0?'up':'down'">{{ sales.dayRate }}%</i><i :class="Number(sales.dayRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
<span class="content-time">周同比:<i class="content-is" :class="Number(sales.weekRate)>=0?'up':'down'">{{ sales.weekRate }}%</i><i :class="Number(sales.weekRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
</div>
|
||||
<el-divider></el-divider>
|
||||
<div class="acea-row row-between-wrapper">
|
||||
@@ -30,8 +30,8 @@
|
||||
<div class="content" v-if="views">
|
||||
<span class="content-number spBlock mb15">{{ views.count }}</span>
|
||||
<div>
|
||||
<span class="content-time mr20">日同比:<i class="content-is" :class="Number(views.dayRate)>=0?'up':'down'">{{ views.dayRate }}</i><i :class="Number(views.dayRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
<span class="content-time">周同比:<i class="content-is" :class="Number(views.weekRate)>=0?'up':'down'">{{ views.weekRate }}</i><i :class="Number(views.weekRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
<span class="content-time mr20">日同比:<i class="content-is" :class="Number(views.dayRate)>=0?'up':'down'">{{ views.dayRate }}%</i><i :class="Number(views.dayRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
<span class="content-time">周同比:<i class="content-is" :class="Number(views.weekRate)>=0?'up':'down'">{{ views.weekRate }}%</i><i :class="Number(views.weekRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
</div>
|
||||
<el-divider></el-divider>
|
||||
<div class="acea-row row-between-wrapper">
|
||||
@@ -50,8 +50,8 @@
|
||||
<div class="content" v-if="order">
|
||||
<span class="content-number spBlock mb15">{{ order.count }}</span>
|
||||
<div>
|
||||
<span class="content-time mr20">日同比:<i class="content-is" :class="Number(order.dayRate)>=0?'up':'down'">{{ order.dayRate }}</i><i :class="Number(order.dayRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
<span class="content-time">周同比:<i class="content-is" :class="Number(order.weekRate)>=0?'up':'down'">{{ order.weekRate }}</i><i :class="Number(order.weekRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
<span class="content-time mr20">日同比:<i class="content-is" :class="Number(order.dayRate)>=0?'up':'down'">{{ order.dayRate }}%</i><i :class="Number(order.dayRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
<span class="content-time">周同比:<i class="content-is" :class="Number(order.weekRate)>=0?'up':'down'">{{ order.weekRate }}%</i><i :class="Number(order.weekRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
</div>
|
||||
<el-divider></el-divider>
|
||||
<div class="acea-row row-between-wrapper">
|
||||
@@ -70,8 +70,8 @@
|
||||
<div class="content" v-if="user">
|
||||
<span class="content-number spBlock mb15">{{ user.count }}</span>
|
||||
<div>
|
||||
<span class="content-time mr20">日同比:<i class="content-is" :class="Number(user.dayRate)>=0?'up':'down'">{{ user.dayRate }}</i><i :class="Number(user.dayRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
<span class="content-time">周同比:<i class="content-is" :class="Number(user.weekRate)>=0?'up':'down'">{{ user.weekRate }}</i><i :class="Number(user.weekRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
<span class="content-time mr20">日同比:<i class="content-is" :class="Number(user.dayRate)>=0?'up':'down'">{{ user.dayRate }}%</i><i :class="Number(user.dayRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
<span class="content-time">周同比:<i class="content-is" :class="Number(user.weekRate)>=0?'up':'down'">{{ user.weekRate }}%</i><i :class="Number(user.weekRate)>=0?'el-icon-caret-top':'el-icon-caret-bottom'" /></span>
|
||||
</div>
|
||||
<el-divider></el-divider>
|
||||
<div class="acea-row row-between-wrapper">
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
<el-input-number v-model="promoterForm.storeBrokeragePrice" placeholder="满额分销满足金额开通分销权限" :min="0" :precision="2" :step="0.1" class="selWidth"></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="mini" type="primary" :loading="loading" @click="submitForm('promoterForm')">立即创建</el-button>
|
||||
<el-button size="mini" type="primary" :loading="loading" @click="submitForm('promoterForm')">提交</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
@@ -110,6 +110,7 @@
|
||||
|
||||
<script>
|
||||
import { configApi, configUpdateApi, productCheckApi } from '@/api/distribution'
|
||||
import * as selfUtil from '@/utils/ZBKJIutil.js'
|
||||
export default {
|
||||
name: 'Index',
|
||||
data() {
|
||||
@@ -143,6 +144,7 @@
|
||||
submitForm(formName) {
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
if(selfUtil.Add(this.promoterForm.storeBrokerageRatio,this.promoterForm.storeBrokerageTwo)>100) return this.$message.warning('返佣比例相加不能超过100%')
|
||||
this.loading = true
|
||||
configUpdateApi(this.promoterForm).then(res => {
|
||||
this.loading = false
|
||||
@@ -155,7 +157,6 @@
|
||||
// })
|
||||
// })
|
||||
}).catch((res) => {
|
||||
this.$message.error(res.message)
|
||||
this.loading = false
|
||||
})
|
||||
} else {
|
||||
|
||||
@@ -99,15 +99,15 @@
|
||||
/>
|
||||
<el-table-column label="操作" min-width="150" fixed="right" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" size="small" class="mr10" @click="onSpread(scope.row.uid, 'man')">推广人</el-button>
|
||||
<el-button type="text" size="small" class="mr10" @click="onSpread(scope.row.uid, 'man','推广人')">推广人</el-button>
|
||||
<el-dropdown>
|
||||
<span class="el-dropdown-link">
|
||||
更多<i class="el-icon-arrow-down el-icon--right" />
|
||||
</span>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item @click.native="onSpreadOrder(scope.row.uid, 'order')">推广订单</el-dropdown-item>
|
||||
<el-dropdown-item @click.native="onSpreadOrder(scope.row.uid, 'order','推广订单')">推广订单</el-dropdown-item>
|
||||
<!--<el-dropdown-item @click.native="onSpreadType(scope.row.uid)">推广方式</el-dropdown-item>-->
|
||||
<el-dropdown-item @click.native="clearSpread(scope.row)" v-if="scope.row.spreadNickname">清除上级推广人</el-dropdown-item>
|
||||
<el-dropdown-item @click.native="clearSpread(scope.row)" v-if="scope.row.spreadNickname && scope.row.spreadNickname!=='无'">清除上级推广人</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
@@ -128,7 +128,7 @@
|
||||
|
||||
<!--推广人-->
|
||||
<el-dialog
|
||||
title="提示"
|
||||
:title="titleName+'列表'"
|
||||
:visible.sync="dialogVisible"
|
||||
width="900px"
|
||||
:before-close="handleClose"
|
||||
@@ -143,7 +143,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="用户类型:">
|
||||
<el-radio-group v-model="spreadFrom.type" size="small" @change="onChanges">
|
||||
<el-radio-button label="null">全部</el-radio-button>
|
||||
<el-radio-button label="0">全部</el-radio-button>
|
||||
<el-radio-button label="1">一级推广人</el-radio-button>
|
||||
<el-radio-button label="2">二级推广人</el-radio-button>
|
||||
</el-radio-group>
|
||||
@@ -194,23 +194,23 @@
|
||||
min-width="120"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.is_promoter | filterYesOrNo }}</span>
|
||||
<span>{{ scope.row.isPromoter | filterYesOrNo }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
label="推广人数"
|
||||
min-width="120"
|
||||
prop="spread_count"
|
||||
prop="spreadCount"
|
||||
/>
|
||||
<el-table-column
|
||||
sortable
|
||||
label="订单数"
|
||||
min-width="120"
|
||||
prop="pay_count"
|
||||
prop="payCount"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="create_time"
|
||||
prop="spreadTime"
|
||||
label="关注时间"
|
||||
min-width="150"
|
||||
/>
|
||||
@@ -267,7 +267,6 @@
|
||||
|
||||
<script>
|
||||
import { promoterListApi, spreadStatisticsApi, spreadListApi, spreadOrderListApi, spreadClearApi } from '@/api/distribution'
|
||||
import { fromList } from '@/utils/constants.js'
|
||||
import cardsData from '@/components/cards/index'
|
||||
export default {
|
||||
name: 'AccountsUser',
|
||||
@@ -287,7 +286,7 @@
|
||||
page: 1,
|
||||
limit: 20
|
||||
},
|
||||
fromList: fromList,
|
||||
fromList: this.$constants.fromList,
|
||||
dialogVisible: false,
|
||||
spreadData: {
|
||||
data: [],
|
||||
@@ -297,14 +296,15 @@
|
||||
page: 1,
|
||||
limit: 10,
|
||||
dateLimit: '',
|
||||
type: null,
|
||||
type: 0,
|
||||
nickName: '',
|
||||
uid: ''
|
||||
},
|
||||
timeValSpread: [],
|
||||
spreadLoading: false,
|
||||
uid: '',
|
||||
onName: ''
|
||||
onName: '',
|
||||
titleName: ''
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@@ -318,8 +318,15 @@
|
||||
},
|
||||
// 统计
|
||||
spreadStatistics() {
|
||||
spreadStatisticsApi({ dateLimit: this.tableFrom.dateLimit, nickName: this.tableFrom.nickName}).then((res) => {
|
||||
this.cardLists = res
|
||||
spreadStatisticsApi({ dateLimit: this.tableFrom.dateLimit, keywords: this.tableFrom.nickName}).then((res) => {
|
||||
//this.cardLists = res
|
||||
this.cardLists = [
|
||||
{ name: '分销人员人数', count: res.distributionNum },
|
||||
{ name: '发展会员人数', count: res.developNum },
|
||||
{ name: '订单总数', count: res.orderNum },
|
||||
{ name: '订单金额(元)', count: res.orderPriceCount },
|
||||
{ name: '提现次数', count: res.withdrawCount }
|
||||
]
|
||||
})
|
||||
},
|
||||
// 清除
|
||||
@@ -331,15 +338,16 @@
|
||||
})
|
||||
})
|
||||
},
|
||||
onSpread(uid, n) {
|
||||
onSpread(uid, n, p) {
|
||||
this.onName = n
|
||||
this.titleName = p
|
||||
this.uid = uid
|
||||
this.dialogVisible = true
|
||||
this.spreadFrom = {
|
||||
page: 1,
|
||||
limit: 10,
|
||||
dateLimit: '',
|
||||
type: null,
|
||||
type: 0,
|
||||
nickName: '',
|
||||
uid: uid
|
||||
}
|
||||
@@ -386,15 +394,16 @@
|
||||
this.onName === 'man' ? this.getListSpread(this.uid) : this.getSpreadOrderList(this.uid)
|
||||
},
|
||||
// 推广订单
|
||||
onSpreadOrder(uid, n) {
|
||||
onSpreadOrder(uid, n, p) {
|
||||
this.uid = uid
|
||||
this.onName = n
|
||||
this.titleName = p
|
||||
this.dialogVisible = true
|
||||
this.spreadFrom = {
|
||||
page: 1,
|
||||
limit: 10,
|
||||
dateLimit: '',
|
||||
type: '',
|
||||
type: 0,
|
||||
nickName: '',
|
||||
uid: uid
|
||||
}
|
||||
|
||||
@@ -154,7 +154,6 @@
|
||||
|
||||
<script>
|
||||
import { brokerageListApi, monitorListDetailApi } from '@/api/financial'
|
||||
import { fromList } from '@/utils/constants.js'
|
||||
export default {
|
||||
name: 'AccountsCapital',
|
||||
data() {
|
||||
@@ -181,7 +180,7 @@
|
||||
limit: 10,
|
||||
dateLimit: ''
|
||||
},
|
||||
fromList: fromList,
|
||||
fromList: this.$constants.fromList,
|
||||
options: [],
|
||||
Visible: false,
|
||||
tablistLoading: false,
|
||||
|
||||
@@ -195,7 +195,6 @@
|
||||
|
||||
<script>
|
||||
import { applyListApi, applyBalanceApi, applyUpdateApi, applyStatusApi } from '@/api/financial'
|
||||
import { fromList } from '@/utils/constants.js'
|
||||
import cardsData from '@/components/cards/index'
|
||||
import zbParser from '@/components/FormGenerator/components/parser/ZBParser'
|
||||
export default {
|
||||
@@ -223,7 +222,7 @@
|
||||
page: 1,
|
||||
limit: 20
|
||||
},
|
||||
fromList: fromList,
|
||||
fromList: this.$constants.fromList,
|
||||
cardLists: [],
|
||||
applyId: null,
|
||||
extractType: ''
|
||||
|
||||
@@ -140,7 +140,6 @@
|
||||
<script>
|
||||
import { topUpLogListApi, balanceApi, topUpLogDeleteApi, refundApi } from '@/api/financial'
|
||||
import cardsData from '@/components/cards/index'
|
||||
import { fromList } from '@/utils/constants.js'
|
||||
import zbParser from '@/components/FormGenerator/components/parser/ZBParser'
|
||||
export default {
|
||||
name: 'AccountsBill',
|
||||
@@ -163,7 +162,7 @@
|
||||
page: 1,
|
||||
limit: 20
|
||||
},
|
||||
fromList: fromList,
|
||||
fromList: this.$constants.fromList,
|
||||
dialogVisible: false
|
||||
}
|
||||
},
|
||||
|
||||
@@ -86,7 +86,6 @@
|
||||
|
||||
<script>
|
||||
import { monitorListApi, monitorListOptionApi } from '@/api/financial'
|
||||
import { fromList } from '@/utils/constants.js'
|
||||
export default {
|
||||
name: 'AccountsCapital',
|
||||
data() {
|
||||
@@ -105,7 +104,7 @@
|
||||
limit: 20
|
||||
},
|
||||
categoryId: '',
|
||||
fromList: fromList,
|
||||
fromList: this.$constants.fromList,
|
||||
optionList: []
|
||||
}
|
||||
},
|
||||
|
||||
@@ -82,7 +82,6 @@
|
||||
|
||||
<script>
|
||||
import edit from './combineEdit'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import * as systemGroupDataApi from '@/api/systemGroupData.js'
|
||||
import * as systemFormConfigApi from '@/api/systemFormConfig.js'
|
||||
export default {
|
||||
@@ -96,13 +95,13 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
constants,
|
||||
constants: this.$constants,
|
||||
listPram: {
|
||||
gid: null,
|
||||
keywords: null,
|
||||
status: null, // 1=开启 2=关闭
|
||||
page: 1,
|
||||
pageSize: constants.page.limit[0]
|
||||
pageSize: this.$constants.page.limit[0]
|
||||
},
|
||||
editDataConfig: {
|
||||
visible: false,
|
||||
|
||||
@@ -57,7 +57,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import edit from '@/views/maintain/devconfig/combinedDataEdit'
|
||||
import * as systemGroupApi from '@/api/systemGroup'
|
||||
import cmDataList from './combineDataList'
|
||||
@@ -66,7 +65,7 @@ export default {
|
||||
components: { edit, cmDataList },
|
||||
data() {
|
||||
return {
|
||||
constants,
|
||||
constants: this.$constants,
|
||||
dataList: {
|
||||
list: [],
|
||||
total: 0
|
||||
@@ -74,7 +73,7 @@ export default {
|
||||
listPram: {
|
||||
keywords: null,
|
||||
page: 1,
|
||||
pageSize: constants.page.limit[0]
|
||||
pageSize: this.$constants.page.limit[0]
|
||||
},
|
||||
editDialogConfig: {
|
||||
visible: false,
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import * as categoryApi from '@/api/categoryApi.js'
|
||||
import * as selfUtil from '@/utils/ZBKJIutil.js'
|
||||
export default {
|
||||
@@ -74,14 +73,14 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
constants,
|
||||
constants: this.$constants,
|
||||
editPram: {
|
||||
extra: null, // 关联表单id
|
||||
name: null,
|
||||
pid: null,
|
||||
sort: 0,
|
||||
status: true,
|
||||
type: constants.categoryType[5].value,
|
||||
type: this.$constants.categoryType[5].value,
|
||||
url: null,
|
||||
id: 0
|
||||
},
|
||||
|
||||
@@ -87,7 +87,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import * as categoryApi from '@/api/categoryApi.js'
|
||||
import edit from '@/views/maintain/devconfig/configCategotyEdit.vue'
|
||||
import * as selfUtil from '@/utils/ZBKJIutil.js'
|
||||
@@ -101,7 +100,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
constants,
|
||||
constants: this.$constants,
|
||||
searchPram: {
|
||||
status: null,
|
||||
type: null
|
||||
@@ -115,11 +114,11 @@ export default {
|
||||
treeList: [],
|
||||
listPram: {
|
||||
pid: 0,
|
||||
type: constants.categoryType[5].value,
|
||||
type: this.$constants.categoryType[5].value,
|
||||
status: null,
|
||||
name: null,
|
||||
page: constants.page.page,
|
||||
limit: constants.page.limit[1]
|
||||
page: this.$constants.page.page,
|
||||
limit: this.$constants.page.limit[1]
|
||||
},
|
||||
configFormSelectedDialog: {
|
||||
visible: false,
|
||||
@@ -172,7 +171,7 @@ export default {
|
||||
},
|
||||
handlerGetTreeList() {
|
||||
// status: this.selectModel?1:-1
|
||||
const _pram = { type: constants.categoryType[5].value, status: -1 }
|
||||
const _pram = { type: this.constants.categoryType[5].value, status: -1 }
|
||||
categoryApi.treeCategroy(_pram).then(data => {
|
||||
this.treeList = this.handleAddArrt(data)
|
||||
})
|
||||
|
||||
@@ -63,7 +63,6 @@
|
||||
|
||||
<script>
|
||||
import * as systemFormConfigApi from '@/api/systemFormConfig.js'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import edit from './edit'
|
||||
export default {
|
||||
// name: "index"
|
||||
@@ -76,11 +75,11 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
constants,
|
||||
constants: this.$constants,
|
||||
listPram: {
|
||||
keywords: null,
|
||||
page: 1,
|
||||
limit: constants.page.limit[0]
|
||||
limit: this.$constants.page.limit[0]
|
||||
},
|
||||
editDialogConfig: {
|
||||
visible: false,
|
||||
|
||||
@@ -656,7 +656,7 @@
|
||||
return this.$message.warning("请选择一个商品属性!");
|
||||
}else{
|
||||
if(!this.radio.price) return this.$message.warning("请填写砍价起始金额!");
|
||||
// if(!this.radio.minPrice) return this.$message.warning("请填写砍价最低价!");
|
||||
if(!this.radio.minPrice && this.radio.minPrice!=0) return this.$message.warning("请填写砍价最低价!");
|
||||
if(!this.radio.quota) return this.$message.warning("请填写限量!");
|
||||
}
|
||||
this.currentTab++;
|
||||
|
||||
@@ -158,7 +158,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {fromList} from '@/utils/constants.js';
|
||||
import { bargainListListApi,bargainOrderPinkApi } from '@/api/marketing'
|
||||
export default {
|
||||
name: "index",
|
||||
@@ -180,7 +179,7 @@
|
||||
page: 1,
|
||||
limit: 20
|
||||
},
|
||||
fromList: fromList,
|
||||
fromList: this.$constants.fromList,
|
||||
timeVal: []
|
||||
}
|
||||
},
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="优惠券面值" prop="money">
|
||||
<el-input-number v-model="ruleForm.money" :min="1" :max="10" label="描述文字"></el-input-number>
|
||||
<el-input-number v-model="ruleForm.money" :min="1" label="描述文字"></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="使用门槛">
|
||||
<el-radio-group v-model="threshold">
|
||||
@@ -215,9 +215,9 @@
|
||||
total: info.total,
|
||||
status: info.status,
|
||||
primaryKey: Number(info.primaryKey),
|
||||
checked: res.product
|
||||
checked: res.product || []
|
||||
}
|
||||
info.minPrice === 0 ? this.threshold = false : this.threshold = true
|
||||
info.minPrice == 0 ? this.threshold = false : this.threshold = true
|
||||
info.isForever ? this.isForeverTime = [info.receiveStartTime, info.receiveEndTime] : this.isForeverTime = []
|
||||
info.isFixedTime ? this.termTime = [info.useStartTime, info.useEndTime] : this.termTime = []
|
||||
this.loading = false
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
min-width="100"
|
||||
>
|
||||
<template slot-scope="{ row }">
|
||||
<span>{{row.useType | couponTypeFilter}}</span>
|
||||
<span>{{row.type | couponTypeFilter}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
@@ -224,12 +224,12 @@
|
||||
// 领取记录
|
||||
receive(row) {
|
||||
this.dialogVisible = true
|
||||
this.getIssueList(row)
|
||||
this.tableFromIssue.couponId = row.id
|
||||
this.getIssueList()
|
||||
},
|
||||
// 列表
|
||||
getIssueList(row) {
|
||||
getIssueList() {
|
||||
this.Loading = true
|
||||
this.tableFromIssue.couponId = row.id
|
||||
couponUserListApi(this.tableFromIssue).then(res => {
|
||||
this.issueData.data = res.list
|
||||
this.issueData.total = res.total
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.status === 0" class="el-icon-check" style="font-size: 14px;color: #0092DC;" />
|
||||
<i v-else class="el-icon-download" style="font-size: 14px;color: #ed5565;" />
|
||||
<i v-else class="el-icon-close" style="font-size: 14px;color: #ed5565;" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
style="width: 100%"
|
||||
size="mini"
|
||||
ref="multipleTable"
|
||||
highlight-current-row
|
||||
>
|
||||
<el-table-column
|
||||
prop="id"
|
||||
@@ -143,7 +144,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="金额"
|
||||
prop="price"
|
||||
prop="totalPrice"
|
||||
min-width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
@@ -151,7 +152,8 @@
|
||||
min-width="100"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.status | orderStatusFilter}}</span>
|
||||
<span v-if="scope.row.refundStatus==0">{{scope.row.orderStatus | orderStatusFilter}}</span>
|
||||
<span v-else>{{scope.row.refundStatus | refundStatusFilter}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -160,7 +162,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {fromList} from '@/utils/constants.js';
|
||||
import { combineListApi, combineStatisticsApi,combineOrderPinkApi } from '@/api/marketing'
|
||||
import cardsData from '@/components/cards/index'
|
||||
export default {
|
||||
@@ -186,7 +187,7 @@
|
||||
page: 1,
|
||||
limit: 20
|
||||
},
|
||||
fromList: fromList,
|
||||
fromList: this.$constants.fromList,
|
||||
timeVal: [],
|
||||
cardLists: []
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
},
|
||||
methods: {
|
||||
resetForm(formValue) {
|
||||
this.isShow = false
|
||||
this.editData = {}
|
||||
},
|
||||
handlerSubmit(data) {
|
||||
const tempArr = []
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<div class="container">
|
||||
<el-form size="small" label-width="100px">
|
||||
<el-form size="small" label-width="120px">
|
||||
<el-form-item label="时间选择:" class="width100">
|
||||
<el-radio-group v-model="tableFrom.dateLimit" type="button" class="mr20" size="small"
|
||||
@change="selectChange(tableFrom.dateLimit)">
|
||||
@@ -14,9 +14,9 @@
|
||||
type="daterange" placement="bottom-end" placeholder="自定义时间" style="width: 250px;"
|
||||
@change="onchangeTime"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户搜索:">
|
||||
<el-form-item label="用户微信昵称:">
|
||||
<el-select v-model="tableFrom.userIdList" style="width: 500px" reserve-keyword multiple remote filterable
|
||||
:remote-method="remoteMethod" :loading="loading" placeholder="请输入用户名称" clearable @change="seachList">
|
||||
:remote-method="remoteMethod" :loading="loading" placeholder="请输入用户微信昵称" clearable @change="seachList">
|
||||
<el-option
|
||||
v-for="item in options"
|
||||
:key="item.uid"
|
||||
@@ -52,12 +52,14 @@
|
||||
prop="balance"
|
||||
label="积分余量"
|
||||
min-width="120"
|
||||
:sort-method="(a,b)=>{return a.balance - b.balance}"
|
||||
/>
|
||||
<el-table-column
|
||||
sortable
|
||||
label="明细数字"
|
||||
min-width="120"
|
||||
prop="number"
|
||||
:sort-method="(a,b)=>{return a.number - b.number}"
|
||||
/>
|
||||
<el-table-column
|
||||
label="备注"
|
||||
@@ -91,7 +93,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { fromList } from '@/utils/constants.js'
|
||||
import { integralListApi } from '@/api/marketing'
|
||||
import { userListApi } from '@/api/user'
|
||||
import cardsData from '@/components/cards/index'
|
||||
@@ -101,7 +102,7 @@
|
||||
return {
|
||||
loading: false,
|
||||
options: [],
|
||||
fromList: fromList,
|
||||
fromList: this.$constants.fromList,
|
||||
listLoading: false,
|
||||
tableData: {
|
||||
data: [],
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import zbParser from '@/components/FormGenerator/components/parser/ZBParser'
|
||||
import * as systemGroupDataApi from '@/api/systemGroupData.js'
|
||||
import * as systemFormConfigApi from '@/api/systemFormConfig.js'
|
||||
@@ -35,7 +34,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
constants,
|
||||
constants: this.$constants,
|
||||
formConf: { fields: [] },
|
||||
selfForm: {
|
||||
sort: 0,
|
||||
|
||||
@@ -72,7 +72,6 @@
|
||||
|
||||
<script>
|
||||
import edit from './edit'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import * as systemGroupDataApi from '@/api/systemGroupData.js'
|
||||
import * as systemFormConfigApi from '@/api/systemFormConfig.js'
|
||||
export default {
|
||||
@@ -80,7 +79,7 @@ export default {
|
||||
components: { edit },
|
||||
data() {
|
||||
return {
|
||||
constants,
|
||||
constants: this.$constants,
|
||||
listPram: {
|
||||
gid: null,
|
||||
keywords: null,
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
<template slot-scope="scope">
|
||||
<div v-if=" scope.row.productList && scope.row.productList.length">
|
||||
<div v-for="(val, i ) in scope.row.productList" :key="i" class="tabBox acea-row row-middle" style="flex-wrap: inherit;">
|
||||
<div class="demo-image__preview">
|
||||
<div class="demo-image__preview mr10">
|
||||
<el-image
|
||||
:src="val.info.productInfo.image"
|
||||
:preview-src-list="[val.info.productInfo.image]"
|
||||
@@ -173,8 +173,10 @@
|
||||
<el-dropdown-item @click.native="onOrderLog(scope.row.id)">订单记录</el-dropdown-item>
|
||||
<el-dropdown-item @click.native="onOrderMark(scope.row)">订单备注</el-dropdown-item>
|
||||
<el-dropdown-item v-show="scope.row.statusStr.key === 'refunding'" @click.native="onOrderRefuse(scope.row)">拒绝退款</el-dropdown-item>
|
||||
<el-dropdown-item v-show="scope.row.statusStr.key !== 'refunded' && ((parseFloat(scope.row.payPrice) >= parseFloat(scope.row.refundPrice) || (scope.row.payPrice == 0 && [0,1].indexOf(scope.row.refundStatus) !== -1)))" @click.native="onOrderRefund(scope.row)">立即退款</el-dropdown-item>
|
||||
<el-dropdown-item @click.native="handleDelete(scope.row, scope.$index)">删除订单</el-dropdown-item>
|
||||
<!--(scope.row.payPrice == 0 && [0,1].indexOf(scope.row.refundStatus) !== -1))-->
|
||||
<!--&& (parseFloat(scope.row.payPrice) >= parseFloat(scope.row.refundPrice))-->
|
||||
<el-dropdown-item v-show="((scope.row.statusStr.key !== 'refunded' && scope.row.statusStr.key !== 'unPaid') && (parseFloat(scope.row.payPrice) >= parseFloat(scope.row.refundPrice))) || (scope.row.payPrice == 0 && [0,1].indexOf(scope.row.refundStatus) !== -1)" @click.native="onOrderRefund(scope.row)">立即退款</el-dropdown-item>
|
||||
<el-dropdown-item v-show="scope.row.statusStr.key === 'deleted'" @click.native="handleDelete(scope.row, scope.$index)">删除订单</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
@@ -204,6 +206,7 @@
|
||||
:is-create="isCreate"
|
||||
:edit-data="editData"
|
||||
@submit="handlerSubmit"
|
||||
@resetForm="resetForm"
|
||||
/>
|
||||
</el-dialog>
|
||||
|
||||
@@ -283,6 +286,7 @@
|
||||
:is-create="1"
|
||||
:edit-data="refundData"
|
||||
@submit="refundhandlerSubmit"
|
||||
v-if="refundVisible"
|
||||
@resetForm="resetFormRefundhandler"
|
||||
/>
|
||||
</el-dialog>
|
||||
@@ -297,7 +301,6 @@
|
||||
import orderSend from './orderSend'
|
||||
import { storeStaffListApi } from '@/api/storePoint'
|
||||
import Cookies from 'js-cookie'
|
||||
import { fromList } from '@/utils/constants.js'
|
||||
import { isWriteOff } from "@/utils";
|
||||
export default {
|
||||
name: 'orderlistDetails',
|
||||
@@ -342,7 +345,7 @@
|
||||
},
|
||||
orderChartType: {},
|
||||
timeVal: [],
|
||||
fromList: fromList,
|
||||
fromList: this.$constants.fromList,
|
||||
selectionList: [],
|
||||
ids: '',
|
||||
orderids: '',
|
||||
@@ -368,7 +371,6 @@
|
||||
this.$modalSure('核销订单吗').then(() => {
|
||||
writeUpdateApi(row.verifyCode).then(() => {
|
||||
this.$message.success('核销成功')
|
||||
this.tableFrom.status = 'toBeWrittenOff'
|
||||
this.tableFrom.page = 1
|
||||
this.getList()
|
||||
})
|
||||
@@ -584,11 +586,10 @@
|
||||
font-size: 12px;
|
||||
}
|
||||
.tabBox_tit {
|
||||
/*width: 60%;*/
|
||||
font-size: 12px !important;
|
||||
margin: 0 2px 0 10px;
|
||||
/*margin: 0 2px 0 10px;*/
|
||||
letter-spacing: 1px;
|
||||
padding: 5px 0;
|
||||
/*padding: 5px 0;*/
|
||||
box-sizing: border-box;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -102,50 +102,50 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { orderDetailApi, getLogisticsInfoApi } from '@/api/order'
|
||||
export default {
|
||||
name: 'OrderDetail',
|
||||
props: {
|
||||
orderId: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
import { orderDetailApi, getLogisticsInfoApi } from '@/api/order'
|
||||
export default {
|
||||
name: 'OrderDetail',
|
||||
props: {
|
||||
orderId: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
reverse: true,
|
||||
dialogVisible: false,
|
||||
orderDatalist: null,
|
||||
loading: false,
|
||||
modal2: false,
|
||||
result: []
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {
|
||||
openLogistics () {
|
||||
this.getOrderData()
|
||||
this.modal2 = true;
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
reverse: true,
|
||||
dialogVisible: false,
|
||||
orderDatalist: null,
|
||||
loading: false,
|
||||
modal2: false,
|
||||
result: []
|
||||
}
|
||||
// 获取订单物流信息
|
||||
getOrderData () {
|
||||
getLogisticsInfoApi({id:this.orderId}).then(async res => {
|
||||
this.result = res.list;
|
||||
})
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {
|
||||
openLogistics () {
|
||||
this.getOrderData()
|
||||
this.modal2 = true;
|
||||
},
|
||||
// 获取订单物流信息
|
||||
getOrderData () {
|
||||
getLogisticsInfoApi({id:this.orderId}).then(async res => {
|
||||
this.result = res.list;
|
||||
})
|
||||
},
|
||||
getDetail(id) {
|
||||
this.loading = true
|
||||
orderDetailApi({id: id}).then(res => {
|
||||
this.orderDatalist = res
|
||||
this.loading = false
|
||||
}).catch(() => {
|
||||
this.orderDatalist = null
|
||||
this.loading = false
|
||||
})
|
||||
}
|
||||
getDetail(id) {
|
||||
this.loading = true
|
||||
orderDetailApi({id: id}).then(res => {
|
||||
this.orderDatalist = res
|
||||
this.loading = false
|
||||
}).catch(() => {
|
||||
this.orderDatalist = null
|
||||
this.loading = false
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@@ -1,209 +1,222 @@
|
||||
<template>
|
||||
<el-dialog :visible.sync="modals" title="订单记录" class="order_box" :before-close="handleClose" width="600px">
|
||||
<el-form ref="formItem" :model="formItem" label-width="110px" @submit.native.prevent :rules="rules">
|
||||
<el-form-item label="选择类型:">
|
||||
<el-radio-group v-model="formItem.type" @change="changeRadio(formItem.type)">
|
||||
<el-radio label="1">发货</el-radio>
|
||||
<el-radio label="2">送货</el-radio>
|
||||
<el-radio label="3">虚拟</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<div v-if="formItem.type==='1'">
|
||||
<el-form-item label="发货类型:" prop="expressId">
|
||||
<el-radio-group v-model="formItem.expressRecordType" @change="changeRadio(formItem.expressRecordType)">
|
||||
<el-radio label="1">手动填写</el-radio>
|
||||
<el-radio label="2">电子面单打印</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="快递公司:" prop="expressCode">
|
||||
<el-select v-model="formItem.expressCode" filterable style="width:80%;" @change="onChangeExport(formItem.expressCode)">
|
||||
<el-option v-for="(item,i) in express" :value="item.code" :key="i" :label="item.name"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formItem.expressRecordType === '1'" label="快递单号:" prop="expressNumber">
|
||||
<el-input v-model="formItem.expressNumber" placeholder="请输入快递单号" style="width:80%;"></el-input>
|
||||
</el-form-item>
|
||||
<template v-if="formItem.expressRecordType === '2'">
|
||||
<el-form-item label="电子面单:" class="express_temp_id" prop="expressTempId">
|
||||
<div class="acea-row">
|
||||
<el-select v-model="formItem.expressTempId" placeholder="请选择电子面单" :class="[formItem.expressTempId?'width9':'width8']" @change="onChangeImg">
|
||||
<el-option v-for="(item,i) in exportTempList" :value="item.temp_id" :key="i" :label="item.title"></el-option>
|
||||
</el-select>
|
||||
<div v-if="formItem.expressTempId" style="position: relative;">
|
||||
<!--<span class="tempImg" @click="">预览</span>-->
|
||||
<div class="tempImgList ml10">
|
||||
<div class="demo-image__preview">
|
||||
<el-image
|
||||
style="width: 36px; height: 36px"
|
||||
:src="tempImg"
|
||||
:preview-src-list="[tempImg]"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--<Button v-if="formItem.expressTempId" type="text" @click="preview">预览</Button>-->
|
||||
</div>
|
||||
<el-dialog :visible.sync="modals" title="发送货" class="order_box" :before-close="handleClose" width="600px">
|
||||
<el-form ref="formItem" :model="formItem" label-width="110px" @submit.native.prevent :rules="rules">
|
||||
<el-form-item label="选择类型:">
|
||||
<el-radio-group v-model="formItem.type" @change="changeRadioType(formItem.type)">
|
||||
<el-radio label="1">发货</el-radio>
|
||||
<el-radio label="2">送货</el-radio>
|
||||
<el-radio label="3">虚拟</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<div v-if="formItem.type==='1'">
|
||||
<el-form-item label="发货类型:" prop="expressId">
|
||||
<el-radio-group v-model="formItem.expressRecordType" @change="changeRadio(formItem.expressRecordType)">
|
||||
<el-radio label="1">手动填写</el-radio>
|
||||
<el-radio label="2">电子面单打印</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="快递公司:" prop="expressCode">
|
||||
<el-select v-model="formItem.expressCode" filterable style="width:80%;"
|
||||
@change="onChangeExport(formItem.expressCode)">
|
||||
<el-option v-for="(item,i) in express" :value="item.code" :key="i" :label="item.name"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formItem.expressRecordType === '1'" label="快递单号:" prop="expressNumber">
|
||||
<el-input v-model="formItem.expressNumber" placeholder="请输入快递单号" style="width:80%;"></el-input>
|
||||
</el-form-item>
|
||||
<template v-if="formItem.expressRecordType === '2'">
|
||||
<el-form-item label="电子面单:" class="express_temp_id" prop="expressTempId">
|
||||
<div class="acea-row">
|
||||
<el-select v-model="formItem.expressTempId" placeholder="请选择电子面单"
|
||||
:class="[formItem.expressTempId?'width9':'width8']" @change="onChangeImg">
|
||||
<el-option v-for="(item,i) in exportTempList" :value="item.temp_id" :key="i"
|
||||
:label="item.title"></el-option>
|
||||
</el-select>
|
||||
<div v-if="formItem.expressTempId" style="position: relative;">
|
||||
<!--<span class="tempImg" @click="">预览</span>-->
|
||||
<div class="tempImgList ml10">
|
||||
<div class="demo-image__preview">
|
||||
<el-image
|
||||
style="width: 36px; height: 36px"
|
||||
:src="tempImg"
|
||||
:preview-src-list="[tempImg]"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--<Button v-if="formItem.expressTempId" type="text" @click="preview">预览</Button>-->
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
<el-form-item label="寄件人姓名:" prop="toName">
|
||||
<el-input v-model="formItem.toName" placeholder="请输入寄件人姓名" style="width:80%;"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="寄件人电话:" prop="toTel">
|
||||
<el-input v-model="formItem.toTel" placeholder="请输入寄件人电话" style="width:80%;"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="寄件人地址:" prop="toAddr">
|
||||
<el-input v-model="formItem.toAddr" placeholder="请输入寄件人地址" style="width:80%;"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</div>
|
||||
<div v-if="formItem.type==='2'">
|
||||
<el-form-item label="送货人姓名:" prop="deliveryName">
|
||||
<el-input v-model="formItem.deliveryName" placeholder="请输入送货人姓名" style="width:80%;"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="送货人电话:" prop="deliveryTel">
|
||||
<el-input v-model="formItem.deliveryTel" placeholder="请输入送货人电话" style="width:80%;"></el-input>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
<div slot="footer">
|
||||
<el-button size="mini" type="primary" @click="putSend('formItem')">提交</el-button>
|
||||
<el-button size="mini" @click="cancel('formItem')">取消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</el-form-item>
|
||||
<el-form-item label="寄件人姓名:" prop="toName">
|
||||
<el-input v-model="formItem.toName" placeholder="请输入寄件人姓名" style="width:80%;"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="寄件人电话:" prop="toTel">
|
||||
<el-input v-model="formItem.toTel" placeholder="请输入寄件人电话" style="width:80%;"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="寄件人地址:" prop="toAddr">
|
||||
<el-input v-model="formItem.toAddr" placeholder="请输入寄件人地址" style="width:80%;"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</div>
|
||||
<div v-if="formItem.type==='2'">
|
||||
<el-form-item label="送货人姓名:" prop="deliveryName">
|
||||
<el-input v-model="formItem.deliveryName" placeholder="请输入送货人姓名" style="width:80%;"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="送货人电话:" prop="deliveryTel">
|
||||
<el-input v-model="formItem.deliveryTel" placeholder="请输入送货人电话" style="width:80%;"></el-input>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
<div slot="footer">
|
||||
<el-button size="mini" type="primary" @click="putSend('formItem')">提交</el-button>
|
||||
<el-button size="mini" @click="cancel('formItem')">取消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { orderSendApi, sheetInfoApi } from '@/api/order'
|
||||
import { expressAllApi, exportTempApi } from '@/api/sms'
|
||||
const validatePhone = (rule, value, callback) => {
|
||||
if (!value) {
|
||||
return callback(new Error('请填写手机号'));
|
||||
} else if (!/^1[3456789]\d{9}$/.test(value)) {
|
||||
callback(new Error('手机号格式不正确!'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
export default {
|
||||
name: 'orderSend',
|
||||
props: {
|
||||
orderId: Number
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
formItem: {
|
||||
type: '1',
|
||||
expressRecordType: '1',
|
||||
expressId: '',
|
||||
expressCode: '',
|
||||
id: '',
|
||||
deliveryName: '',
|
||||
deliveryTel: '',
|
||||
// expressName: '',
|
||||
expressNumber:'',
|
||||
expressTempId: '',
|
||||
toAddr: '',
|
||||
toName: '',
|
||||
toTel: '',
|
||||
},
|
||||
modals: false,
|
||||
express: [],
|
||||
exportTempList: [],
|
||||
tempImg: '',
|
||||
rules: {
|
||||
toName: [
|
||||
{ required: true, message: '请输寄件人姓名', trigger: 'blur' }
|
||||
],
|
||||
toTel: [
|
||||
{ required: true, validator: validatePhone, trigger: 'blur' }
|
||||
],
|
||||
toAddr: [
|
||||
{ required: true, message: '请输入寄件人地址', trigger: 'blur' }
|
||||
],
|
||||
expressCode: [
|
||||
{ required: true, message: '请选择快递公司', trigger: 'change' }
|
||||
],
|
||||
expressNumber: [
|
||||
{ required: true, message: '请输入快递单号', trigger: 'blur' }
|
||||
],
|
||||
expressTempId: [
|
||||
{ required: true, message: '请选择电子面单', trigger: 'change' }
|
||||
],
|
||||
deliveryName: [
|
||||
{ required: true, message: '请输入送货人姓名', trigger: 'blur' }
|
||||
],
|
||||
deliveryTel: [
|
||||
{ required: true, validator: validatePhone, trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
},
|
||||
methods: {
|
||||
// 默认信息
|
||||
sheetInfo () {
|
||||
sheetInfoApi().then(async res => {
|
||||
this.formItem.toAddr= res.exportToAddress || '';
|
||||
this.formItem.toName= res.exportToName || '';
|
||||
this.formItem.toTel= res.exportToTel || '';
|
||||
})
|
||||
},
|
||||
// 快递公司选择
|
||||
onChangeExport (val) {
|
||||
this.formItem.expressTempId = '';
|
||||
this.exportTemp(val);
|
||||
},
|
||||
// 电子面单模板
|
||||
exportTemp (val) {
|
||||
exportTempApi({ com: val }).then(async res => {
|
||||
this.exportTempList = res.data.data || [];
|
||||
})
|
||||
},
|
||||
onChangeImg (item) {
|
||||
this.exportTempList.map(i => {
|
||||
if (i.temp_id === item) this.tempImg = i.pic
|
||||
})
|
||||
},
|
||||
changeRadio (o) {
|
||||
if( o === '3'){
|
||||
this.formItem.expressId = ''
|
||||
this.formItem.expressCode = ''
|
||||
}
|
||||
},
|
||||
// 物流公司列表
|
||||
getList () {
|
||||
expressAllApi().then(async res => {
|
||||
this.express = res
|
||||
})
|
||||
},
|
||||
// 提交
|
||||
putSend(name) {
|
||||
this.formItem.id = this.orderId
|
||||
this.$refs[name].validate((valid) => {
|
||||
if (valid) {
|
||||
orderSendApi(this.formItem).then(async => {
|
||||
this.$message.success('发送货成功');
|
||||
this.modals = false;
|
||||
this.$refs[name].resetFields();
|
||||
this.$emit('submitFail')
|
||||
})
|
||||
} else {
|
||||
this.$message.error('请填写信息');
|
||||
}
|
||||
})
|
||||
},
|
||||
handleClose(){
|
||||
this.cancel('formItem');
|
||||
},
|
||||
cancel (name) {
|
||||
this.modals = false;
|
||||
this.$refs[name].resetFields();
|
||||
this.formItem.type = '1';
|
||||
this.formItem.expressRecordType = '1';
|
||||
}
|
||||
}
|
||||
import {orderSendApi, sheetInfoApi} from '@/api/order'
|
||||
import {expressAllApi, exportTempApi} from '@/api/sms'
|
||||
|
||||
const validatePhone = (rule, value, callback) => {
|
||||
if (!value) {
|
||||
return callback(new Error('请填写手机号'));
|
||||
} else if (!/^1[3456789]\d{9}$/.test(value)) {
|
||||
callback(new Error('手机号格式不正确!'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
export default {
|
||||
name: 'orderSend',
|
||||
props: {
|
||||
orderId: Number
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
formItem: {
|
||||
type: '1',
|
||||
expressRecordType: '1',
|
||||
expressId: '',
|
||||
expressCode: '',
|
||||
id: '',
|
||||
deliveryName: '',
|
||||
deliveryTel: '',
|
||||
// expressName: '',
|
||||
expressNumber: '',
|
||||
expressTempId: '',
|
||||
toAddr: '',
|
||||
toName: '',
|
||||
toTel: '',
|
||||
},
|
||||
modals: false,
|
||||
express: [],
|
||||
exportTempList: [],
|
||||
tempImg: '',
|
||||
rules: {
|
||||
toName: [
|
||||
{required: true, message: '请输寄件人姓名', trigger: 'blur'}
|
||||
],
|
||||
toTel: [
|
||||
{required: true, validator: validatePhone, trigger: 'blur'}
|
||||
],
|
||||
toAddr: [
|
||||
{required: true, message: '请输入寄件人地址', trigger: 'blur'}
|
||||
],
|
||||
expressCode: [
|
||||
{required: true, message: '请选择快递公司', trigger: 'change'}
|
||||
],
|
||||
expressNumber: [
|
||||
{required: true, message: '请输入快递单号', trigger: 'blur'}
|
||||
],
|
||||
expressTempId: [
|
||||
{required: true, message: '请选择电子面单', trigger: 'change'}
|
||||
],
|
||||
deliveryName: [
|
||||
{required: true, message: '请输入送货人姓名', trigger: 'blur'}
|
||||
],
|
||||
deliveryTel: [
|
||||
{required: true, validator: validatePhone, trigger: 'blur'}
|
||||
]
|
||||
},
|
||||
expressType: 'normal'
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {
|
||||
// 默认信息
|
||||
sheetInfo() {
|
||||
sheetInfoApi().then(async res => {
|
||||
this.formItem.toAddr = res.exportToAddress || '';
|
||||
this.formItem.toName = res.exportToName || '';
|
||||
this.formItem.toTel = res.exportToTel || '';
|
||||
})
|
||||
},
|
||||
// 快递公司选择
|
||||
onChangeExport(val) {
|
||||
this.formItem.expressTempId = '';
|
||||
if (this.formItem.expressRecordType === '2') this.exportTemp(val);
|
||||
},
|
||||
// 电子面单模板
|
||||
exportTemp(val) {
|
||||
exportTempApi({com: val}).then(async res => {
|
||||
this.exportTempList = res.data.data || [];
|
||||
})
|
||||
},
|
||||
onChangeImg(item) {
|
||||
this.exportTempList.map(i => {
|
||||
if (i.temp_id === item) this.tempImg = i.pic
|
||||
})
|
||||
},
|
||||
changeRadioType() {
|
||||
this.formItem.expressId = ''
|
||||
this.formItem.expressCode = ''
|
||||
},
|
||||
changeRadio(o) {
|
||||
if (o == 2){
|
||||
this.expressType = 'elec'
|
||||
}else{
|
||||
this.expressType = 'normal'
|
||||
}
|
||||
this.formItem.expressId = ''
|
||||
this.formItem.expressCode = ''
|
||||
this.getList();
|
||||
},
|
||||
// 物流公司列表
|
||||
getList() {
|
||||
expressAllApi({type: this.expressType}).then(async res => {
|
||||
this.express = res
|
||||
})
|
||||
},
|
||||
// 提交
|
||||
putSend(name) {
|
||||
this.formItem.id = this.orderId
|
||||
this.$refs[name].validate((valid) => {
|
||||
if (valid) {
|
||||
orderSendApi(this.formItem).then(async => {
|
||||
this.$message.success('发送货成功');
|
||||
this.modals = false;
|
||||
this.$refs[name].resetFields();
|
||||
this.$emit('submitFail')
|
||||
})
|
||||
} else {
|
||||
this.$message.error('请填写信息');
|
||||
}
|
||||
})
|
||||
},
|
||||
handleClose() {
|
||||
this.cancel('formItem');
|
||||
},
|
||||
cancel(name) {
|
||||
this.modals = false;
|
||||
this.$refs[name].resetFields();
|
||||
this.formItem.type = '1';
|
||||
this.formItem.expressRecordType = '1';
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
:label="item.title"
|
||||
:min-width="item.minWidth">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="['content'].indexOf(item.key) > -1" class="demo-image__preview">
|
||||
<div v-if="['content'].indexOf(item.key) > -1 && tableFrom.type==='expr_query'" class="demo-image__preview">
|
||||
<span>{{scope.row[item.key].num}}</span>
|
||||
</div>
|
||||
<span v-else>{{ scope.row[item.key] }}</span>
|
||||
@@ -70,7 +70,7 @@
|
||||
<div class="smsBox" v-if="(isDump && tableFrom.type==='expr_dump') || (isSms && tableFrom.type==='sms')">
|
||||
<div class="index_from page-account-container">
|
||||
<div class="page-account-top">
|
||||
<span class="page-account-top-tit">开通电子面单服务</span>
|
||||
<span class="page-account-top-tit">开通{{tableFrom.type | onePassTypeFilter}}服务</span>
|
||||
</div>
|
||||
<el-form ref="formInlineDump" :model="formInlineDump" :rules="ruleInline" @submit.native.prevent @keyup.enter="handleSubmitDump('formInlineDump')">
|
||||
<el-form-item prop="sign" class="maxInpt" v-if="isSms && tableFrom.type==='sms'" key="1">
|
||||
@@ -316,7 +316,7 @@ export default {
|
||||
this.$refs[name].validate((valid) => {
|
||||
if (valid) {
|
||||
smsSignApi(this.formInline).then(async res => {
|
||||
this.$message.success('修改成功!');
|
||||
this.$message.success('修改签名之后一号通需要审核过后通过!');
|
||||
this.dialogVisible = false;
|
||||
this.$refs[formName].resetFields();
|
||||
})
|
||||
@@ -474,7 +474,7 @@ export default {
|
||||
this.columns2 = [
|
||||
// {
|
||||
// title: '订单号',
|
||||
// slot: 'num',
|
||||
// key: 'order_id',
|
||||
// minWidth: 150
|
||||
// },
|
||||
{
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
:modal="false"
|
||||
class="taoBaoModal"
|
||||
:before-close="handleClose">
|
||||
<tao-bao v-if="dialogVisible" @handleClose="handleClose"></tao-bao>
|
||||
<tao-bao v-if="dialogVisible" @handleCloseMod="handleCloseMod"></tao-bao>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -6,13 +6,12 @@
|
||||
|
||||
<script>
|
||||
import categoryList from '@/components/Category/list'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
export default {
|
||||
// name: "list",
|
||||
components: { categoryList },
|
||||
data() {
|
||||
return {
|
||||
constants
|
||||
constants: this.$constants
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<el-table
|
||||
ref="table"
|
||||
v-loading="listLoading"
|
||||
:data="tableData.data"
|
||||
style="width: 100%"
|
||||
@@ -98,6 +99,9 @@ export default {
|
||||
},
|
||||
listLoading: true,
|
||||
selectionList: [],
|
||||
multipleSelectionAll: [],
|
||||
idKey: 'id',
|
||||
nextPageFlag: false,
|
||||
keyNum: 0
|
||||
}
|
||||
},
|
||||
@@ -111,11 +115,71 @@ export default {
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.selectionList = val
|
||||
const data = []
|
||||
this.selectionList.map((item) => {
|
||||
data.push(item.id)
|
||||
setTimeout(() => {
|
||||
this.changePageCoreRecordData()
|
||||
}, 50)
|
||||
},
|
||||
// 设置选中的方法
|
||||
setSelectRow() {
|
||||
if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
|
||||
return
|
||||
}
|
||||
// 标识当前行的唯一键的名称
|
||||
const idKey = this.idKey
|
||||
const selectAllIds = []
|
||||
this.multipleSelectionAll.forEach(row => {
|
||||
selectAllIds.push(row[idKey])
|
||||
})
|
||||
this.$refs.table.clearSelection()
|
||||
for (var i = 0; i < this.tableData.data.length; i++) {
|
||||
if (selectAllIds.indexOf(this.tableData.data[i][idKey]) >= 0) {
|
||||
// 设置选中,记住table组件需要使用ref="table"
|
||||
this.$refs.table.toggleRowSelection(this.tableData.data[i], true)
|
||||
}
|
||||
}
|
||||
},
|
||||
// 记忆选择核心方法
|
||||
changePageCoreRecordData() {
|
||||
// 标识当前行的唯一键的名称
|
||||
const idKey = this.idKey
|
||||
const that = this
|
||||
// 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
|
||||
if (this.multipleSelectionAll.length <= 0) {
|
||||
this.multipleSelectionAll = this.selectionList
|
||||
return
|
||||
}
|
||||
// 总选择里面的key集合
|
||||
const selectAllIds = []
|
||||
this.multipleSelectionAll.forEach(row => {
|
||||
selectAllIds.push(row[idKey])
|
||||
})
|
||||
const selectIds = []
|
||||
// 获取当前页选中的id
|
||||
this.selectionList.forEach(row => {
|
||||
selectIds.push(row[idKey])
|
||||
// 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
|
||||
if (selectAllIds.indexOf(row[idKey]) < 0) {
|
||||
that.multipleSelectionAll.push(row)
|
||||
}
|
||||
})
|
||||
const noSelectIds = []
|
||||
// 得到当前页没有选中的id
|
||||
this.tableData.data.forEach(row => {
|
||||
if (selectIds.indexOf(row[idKey]) < 0) {
|
||||
noSelectIds.push(row[idKey])
|
||||
}
|
||||
})
|
||||
noSelectIds.forEach(id => {
|
||||
if (selectAllIds.indexOf(id) >= 0) {
|
||||
for (let i = 0; i < that.multipleSelectionAll.length; i++) {
|
||||
if (that.multipleSelectionAll[i][idKey] == id) {
|
||||
// 如果总选择中有未被选中的,那么就删除这条
|
||||
that.multipleSelectionAll.splice(i, 1)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
this.ids = data.join(',')
|
||||
},
|
||||
add() {
|
||||
const _this = this
|
||||
@@ -133,16 +197,21 @@ export default {
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
list[i].ruleValue = JSON.parse(list[i].ruleValue)
|
||||
}
|
||||
this.$nextTick(function() {
|
||||
this.setSelectRow()// 调用跨页选中方法
|
||||
})
|
||||
this.listLoading = false
|
||||
}).catch(() => {
|
||||
this.listLoading = false
|
||||
})
|
||||
},
|
||||
pageChange(page) {
|
||||
this.changePageCoreRecordData()
|
||||
this.tableFrom.page = page
|
||||
this.getList()
|
||||
},
|
||||
handleSizeChange(val) {
|
||||
this.changePageCoreRecordData()
|
||||
this.tableFrom.limit = val
|
||||
this.getList()
|
||||
},
|
||||
@@ -157,7 +226,12 @@ export default {
|
||||
})
|
||||
},
|
||||
handleDeleteAll(){
|
||||
if(!this.selectionList.length) return this.$message.warning('请选择商品规格')
|
||||
if(!this.multipleSelectionAll.length) return this.$message.warning('请选择商品规格')
|
||||
const data = []
|
||||
this.multipleSelectionAll.map((item) => {
|
||||
data.push(item.id)
|
||||
})
|
||||
this.ids = data.join(',')
|
||||
this.$modalSure().then(() => {
|
||||
attrDeleteApi( this.ids ).then(() => {
|
||||
this.$message.success('删除成功')
|
||||
|
||||
@@ -54,8 +54,8 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="mini" type="primary" @click="submitForm('formValidate')">立即创建</el-button>
|
||||
<el-button size="mini" @click="resetForm('formValidate')">取消</el-button>
|
||||
<el-button size="mini" type="primary" @click="submitForm('formValidate')" :loading="loadingbtn">提交</el-button>
|
||||
<el-button size="mini" @click="resetForm('formValidate')">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
@@ -69,7 +69,8 @@
|
||||
pics: '',
|
||||
productId: '',
|
||||
productScore: null,
|
||||
serviceScore: null
|
||||
serviceScore: null,
|
||||
sku: ''
|
||||
}
|
||||
export default {
|
||||
name: "creatComment",
|
||||
@@ -95,6 +96,7 @@
|
||||
}
|
||||
};
|
||||
return {
|
||||
loadingbtn: false,
|
||||
loading: false,
|
||||
pics: [],
|
||||
image: '',
|
||||
@@ -138,6 +140,7 @@
|
||||
this.$modalGoodList(function(row) {
|
||||
_this.image = row.image
|
||||
_this.formValidate.productId = row.id
|
||||
_this.formValidate.sku = row.attrValue[0].suk
|
||||
})
|
||||
},
|
||||
// 点击商品图
|
||||
@@ -153,7 +156,8 @@
|
||||
this.pics.splice(i, 1)
|
||||
},
|
||||
submitForm(formName) {
|
||||
this.formValidate.pics = JSON.stringify(this.pics)
|
||||
this.loadingbtn = true;
|
||||
this.formValidate.pics = this.pics.length>0 ? JSON.stringify(this.pics) : ''
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
replyCreatApi(this.formValidate).then(() => {
|
||||
@@ -162,6 +166,9 @@
|
||||
// this.clear();
|
||||
this.$emit('getList');
|
||||
}, 600);
|
||||
this.loadingbtn = false;
|
||||
}).catch(()=>{
|
||||
this.loadingbtn = false;
|
||||
})
|
||||
} else {
|
||||
return false;
|
||||
@@ -170,7 +177,6 @@
|
||||
},
|
||||
resetForm(formName) {
|
||||
this.$refs[formName].resetFields()
|
||||
this.$msgbox.close()
|
||||
this.pics=[]
|
||||
this.formValidate.pics=''
|
||||
},
|
||||
|
||||
@@ -166,19 +166,7 @@ export default {
|
||||
value: 'id',
|
||||
emitPath: false
|
||||
},
|
||||
fromList: {
|
||||
title: '选择时间',
|
||||
custom: true,
|
||||
fromTxt: [
|
||||
{ text: '全部', val: '' },
|
||||
{ text: '今天', val: 'today' },
|
||||
{ text: '昨天', val: 'yesterday' },
|
||||
{ text: '最近7天', val: 'lately7' },
|
||||
{ text: '最近30天', val: 'lately30' },
|
||||
{ text: '本月', val: 'month' },
|
||||
{ text: '本年', val: 'year' }
|
||||
]
|
||||
},
|
||||
fromList: this.$constants.fromList,
|
||||
tableData: {
|
||||
data: [],
|
||||
total: 0
|
||||
@@ -202,6 +190,12 @@ export default {
|
||||
timer: ''
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route(to, from) {
|
||||
this.getList()
|
||||
this.getCategorySelect()
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
// this.getLstFilterApi()
|
||||
this.getList()
|
||||
|
||||
@@ -477,6 +477,7 @@
|
||||
ficti: res.ficti
|
||||
}
|
||||
if(this.formValidate.attr.length){
|
||||
this.oneFormBatch[0].image = res.image
|
||||
for (var i = 0; i < this.formValidate.attr.length; i++) {
|
||||
this.formValidate.attr[i].attrValue = JSON.parse(this.formValidate.attr[i].attrValues)
|
||||
}
|
||||
|
||||
@@ -41,7 +41,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import * as roleApi from '@/api/role.js'
|
||||
import * as systemAdminApi from '@/api/systemadmin.js'
|
||||
export default {
|
||||
@@ -70,7 +69,7 @@ export default {
|
||||
}
|
||||
}
|
||||
return {
|
||||
constants,
|
||||
constants:this.$constants,
|
||||
pram: {
|
||||
account: null,
|
||||
level: null,
|
||||
@@ -103,7 +102,7 @@ export default {
|
||||
handleGetRoleList() {
|
||||
const _pram = {
|
||||
page: 1,
|
||||
limit: constants.page.limit[4],
|
||||
limit: this.constants.page.limit[4],
|
||||
status: 1
|
||||
}
|
||||
roleApi.getRoleList(_pram).then(data => {
|
||||
|
||||
@@ -107,14 +107,13 @@
|
||||
<script>
|
||||
import * as systemAdminApi from '@/api/systemadmin.js'
|
||||
import * as roleApi from '@/api/role.js'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import edit from './edit'
|
||||
export default {
|
||||
// name: "index"
|
||||
components: { edit },
|
||||
data() {
|
||||
return {
|
||||
constants,
|
||||
constants:this.$constants,
|
||||
listData: { list: [] },
|
||||
listPram: {
|
||||
account: null,
|
||||
@@ -127,7 +126,7 @@ export default {
|
||||
roles: null,
|
||||
status: null,
|
||||
page: 1,
|
||||
limit: constants.page.limit[0]
|
||||
limit: this.$constants.page.limit[0]
|
||||
},
|
||||
roleList: [],
|
||||
menuList: [],
|
||||
@@ -160,7 +159,7 @@ export default {
|
||||
handleGetRoleList() {
|
||||
const _pram = {
|
||||
page: 1,
|
||||
limit: constants.page.limit[4]
|
||||
limit: this.constants.page.limit[4]
|
||||
}
|
||||
roleApi.getRoleList(_pram).then(data => {
|
||||
this.roleList = data
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
|
||||
<script>
|
||||
import categoryList from '@/components/Category/list'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import * as roleApi from '@/api/role.js'
|
||||
export default {
|
||||
// name: "edit"
|
||||
@@ -43,7 +42,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
constants,
|
||||
constants:this.$constants,
|
||||
pram: {
|
||||
level: 1,
|
||||
roleName: null,
|
||||
|
||||
@@ -74,21 +74,20 @@
|
||||
<script>
|
||||
import * as roleApi from '@/api/role.js'
|
||||
import * as categroyApi from '@/api/categoryApi.js'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import edit from './edit'
|
||||
export default {
|
||||
// name: "index"
|
||||
components: { edit },
|
||||
data() {
|
||||
return {
|
||||
constants,
|
||||
constants:this.$constants,
|
||||
listData: { list: [] },
|
||||
listPram: {
|
||||
createTime: null,
|
||||
updateTime: null,
|
||||
level: null,
|
||||
page: 1,
|
||||
limit: constants.page.limit[0],
|
||||
limit: this.$constants.page.limit[0],
|
||||
roleName: null,
|
||||
rules: null,
|
||||
status: null
|
||||
|
||||
@@ -8,14 +8,13 @@
|
||||
import { asyncRoutes, constantRoutes } from '@/router'
|
||||
import * as categoryApi from '@/api/categoryApi.js'
|
||||
import categoryList from '@/components/Category/list'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
export default {
|
||||
// name: "index"
|
||||
components: { categoryList },
|
||||
data() {
|
||||
return {
|
||||
asyncRoutes,
|
||||
constants
|
||||
constants: this.$constants
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
||||
@@ -115,143 +115,143 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import parser from '@/components/FormGenerator/components/parser/Parser'
|
||||
import * as systemFormConfigApi from '@/api/systemFormConfig.js'
|
||||
import * as logistics from '@/api/logistics.js'
|
||||
export default {
|
||||
name: 'CompanyList',
|
||||
components: { parser },
|
||||
data() {
|
||||
return {
|
||||
constants:this.$constants,
|
||||
// 表单
|
||||
formConf: { fields: [] },
|
||||
form: {
|
||||
keywords: ''
|
||||
},
|
||||
tableData: {},
|
||||
page: 1,
|
||||
limit: 20,
|
||||
loading: false,
|
||||
dialogVisible: false,
|
||||
fromType: 'add',
|
||||
formData: {
|
||||
status: false
|
||||
},
|
||||
isCreate: 0,
|
||||
formShow: false,
|
||||
editId: 0,
|
||||
rules: {
|
||||
sort: [
|
||||
{ required: true, message: '请输入排序', trigger: 'blur' },
|
||||
],
|
||||
account: [
|
||||
{ required: true, message: '请输入月结账号', trigger: 'blur' },
|
||||
],
|
||||
password: [
|
||||
{ required: true, message: '请输入月结密码', trigger: 'blur' },
|
||||
],
|
||||
netName: [
|
||||
{ required: true, message: '请输入网点名称', trigger: 'blur' },
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getExpressList()
|
||||
},
|
||||
methods: {
|
||||
handlerSearch() {
|
||||
this.page = 1
|
||||
this.getExpressList()
|
||||
import parser from '@/components/FormGenerator/components/parser/Parser'
|
||||
import * as systemFormConfigApi from '@/api/systemFormConfig.js'
|
||||
import * as logistics from '@/api/logistics.js'
|
||||
export default {
|
||||
name: 'CompanyList',
|
||||
components: { parser },
|
||||
data() {
|
||||
return {
|
||||
constants:this.$constants,
|
||||
// 表单
|
||||
formConf: { fields: [] },
|
||||
form: {
|
||||
keywords: ''
|
||||
},
|
||||
// 获取物流公司列表
|
||||
getExpressList() {
|
||||
this.loading = true
|
||||
logistics.expressList({
|
||||
page: this.page,
|
||||
limit: this.limit,
|
||||
keywords: this.form.keywords
|
||||
}).then(res => {
|
||||
this.loading = false
|
||||
this.tableData = res
|
||||
}).catch(()=>{
|
||||
this.loading = false
|
||||
})
|
||||
tableData: {},
|
||||
page: 1,
|
||||
limit: 20,
|
||||
loading: false,
|
||||
dialogVisible: false,
|
||||
fromType: 'add',
|
||||
formData: {
|
||||
status: false
|
||||
},
|
||||
// 物流开关
|
||||
bindStatus(item) {
|
||||
logistics.expressUpdateShow({
|
||||
account: item.account,
|
||||
code: item.code,
|
||||
id: item.id,
|
||||
isShow: item.isShow,
|
||||
name: item.name,
|
||||
sort: item.sort
|
||||
}).then(res => {
|
||||
this.$message.success('操作成功')
|
||||
this.getExpressList()
|
||||
}).catch(() => {
|
||||
item.isShow = !item.isShow
|
||||
})
|
||||
},
|
||||
// 分页
|
||||
pageChange(e) {
|
||||
this.page = e
|
||||
this.getExpressList()
|
||||
},
|
||||
handleSizeChange(e) {
|
||||
this.limit = e
|
||||
this.getExpressList()
|
||||
},
|
||||
// 添加物流公司
|
||||
addExpress() {
|
||||
logistics.expressSyncApi().then(data => {
|
||||
this.page = 1
|
||||
this.getExpressList()
|
||||
})
|
||||
},
|
||||
// 删除物流公司
|
||||
bindDelete(item) {
|
||||
this.$modalSure().then(() => {
|
||||
logistics.expressDelete({ id: item.id }).then(res => {
|
||||
this.$message.success('删除成功')
|
||||
this.getExpressList()
|
||||
})
|
||||
})
|
||||
},
|
||||
// 表单提交
|
||||
submit(formName) {
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
logistics.expressUpdate(this.formData).then(res => {
|
||||
this.$message.success('操作成功')
|
||||
this.handleClose()
|
||||
this.getExpressList()
|
||||
})
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},
|
||||
// 关闭模态框
|
||||
handleClose(done) {
|
||||
this.formShow = false
|
||||
// this.formData = {}
|
||||
this.formConf.fields = []
|
||||
this.dialogVisible = false
|
||||
this.isCreate = 0
|
||||
},
|
||||
// 编辑
|
||||
bindEdit(item) {
|
||||
this.dialogVisible = true
|
||||
this.editId = item.id
|
||||
logistics.expressInfo({ id: item.id }).then(res => {
|
||||
this.formData = res
|
||||
})
|
||||
isCreate: 0,
|
||||
formShow: false,
|
||||
editId: 0,
|
||||
rules: {
|
||||
sort: [
|
||||
{ required: true, message: '请输入排序', trigger: 'blur' },
|
||||
],
|
||||
account: [
|
||||
{ required: true, message: '请输入月结账号', trigger: 'blur' },
|
||||
],
|
||||
password: [
|
||||
{ required: true, message: '请输入月结密码', trigger: 'blur' },
|
||||
],
|
||||
netName: [
|
||||
{ required: true, message: '请输入网点名称', trigger: 'blur' },
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getExpressList()
|
||||
},
|
||||
methods: {
|
||||
handlerSearch() {
|
||||
this.page = 1
|
||||
this.getExpressList()
|
||||
},
|
||||
// 获取物流公司列表
|
||||
getExpressList() {
|
||||
this.loading = true
|
||||
logistics.expressList({
|
||||
page: this.page,
|
||||
limit: this.limit,
|
||||
keywords: this.form.keywords
|
||||
}).then(res => {
|
||||
this.loading = false
|
||||
this.tableData = res
|
||||
}).catch(()=>{
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 物流开关
|
||||
bindStatus(item) {
|
||||
logistics.expressUpdateShow({
|
||||
account: item.account,
|
||||
code: item.code,
|
||||
id: item.id,
|
||||
isShow: item.isShow,
|
||||
name: item.name,
|
||||
sort: item.sort
|
||||
}).then(res => {
|
||||
this.$message.success('操作成功')
|
||||
this.getExpressList()
|
||||
}).catch(() => {
|
||||
item.isShow = !item.isShow
|
||||
})
|
||||
},
|
||||
// 分页
|
||||
pageChange(e) {
|
||||
this.page = e
|
||||
this.getExpressList()
|
||||
},
|
||||
handleSizeChange(e) {
|
||||
this.limit = e
|
||||
this.getExpressList()
|
||||
},
|
||||
// 添加物流公司
|
||||
addExpress() {
|
||||
logistics.expressSyncApi().then(data => {
|
||||
this.page = 1
|
||||
this.getExpressList()
|
||||
})
|
||||
},
|
||||
// 删除物流公司
|
||||
bindDelete(item) {
|
||||
this.$modalSure().then(() => {
|
||||
logistics.expressDelete({ id: item.id }).then(res => {
|
||||
this.$message.success('删除成功')
|
||||
this.getExpressList()
|
||||
})
|
||||
})
|
||||
},
|
||||
// 表单提交
|
||||
submit(formName) {
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
logistics.expressUpdate(this.formData).then(res => {
|
||||
this.$message.success('操作成功')
|
||||
this.handleClose()
|
||||
this.getExpressList()
|
||||
})
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},
|
||||
// 关闭模态框
|
||||
handleClose(done) {
|
||||
this.formShow = false
|
||||
// this.formData = {}
|
||||
this.formConf.fields = []
|
||||
this.dialogVisible = false
|
||||
this.isCreate = 0
|
||||
},
|
||||
// 编辑
|
||||
bindEdit(item) {
|
||||
this.dialogVisible = true
|
||||
this.editId = item.id
|
||||
logistics.expressInfo({ id: item.id }).then(res => {
|
||||
this.formData = res
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@@ -60,7 +60,6 @@
|
||||
|
||||
<script>
|
||||
import parser from '@/components/FormGenerator/components/parser/Parser'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
import * as categoryApi from '@/api/categoryApi.js'
|
||||
import * as selfUtil from '@/utils/ZBKJIutil.js'
|
||||
import * as systemFormConfigApi from '@/api/systemFormConfig.js'
|
||||
@@ -189,28 +188,10 @@ export default {
|
||||
let _formId = 0
|
||||
systemSettingApi.systemConfigSave(_pram).then(data => {
|
||||
this.$message.success('添加数据成功')
|
||||
// 81 82 83
|
||||
// 针对云存储配置特殊处理 切勿随意改动
|
||||
// _formId = parseInt(_pram.id)
|
||||
// if(_formId === 108 || _formId === 81 || _formId === 82 || _formId === 83){
|
||||
// let _value
|
||||
// switch (_formId) {
|
||||
// case 108: _value = 1
|
||||
// break;
|
||||
// case 81: _value = 2
|
||||
// break;
|
||||
// case 82: _value = 3
|
||||
// break;
|
||||
// case 83: _value = 4
|
||||
// break;
|
||||
// }
|
||||
// const _pram = { key:"uploadType",value:_value }
|
||||
// systemConfigApi.configSaveUniq(_pram)
|
||||
// }
|
||||
})
|
||||
},
|
||||
handlerGetTreeList() {
|
||||
const _pram = { type: constants.categoryType[5].value, status: 1 }
|
||||
const _pram = { type: this.$constants.categoryType[5].value, status: 1 }
|
||||
this.loading = true
|
||||
categoryApi.treeCategroy(_pram).then(data => {
|
||||
this.treeList = this.handleAddArrt(data)
|
||||
|
||||
@@ -129,7 +129,6 @@
|
||||
<script>
|
||||
import { orderListApi, storeListApi } from '@/api/storePoint'
|
||||
import cardsData from '@/components/cards/index'
|
||||
import { fromList } from '@/utils/constants.js'
|
||||
export default {
|
||||
components: { cardsData },
|
||||
data() {
|
||||
@@ -149,7 +148,7 @@
|
||||
limit: 20
|
||||
},
|
||||
timeVal: [],
|
||||
fromList: fromList,
|
||||
fromList: this.$constants.fromList,
|
||||
ids: '',
|
||||
cardLists: [],
|
||||
}
|
||||
|
||||
@@ -11,13 +11,13 @@
|
||||
<el-form-item label="等级" prop="grade">
|
||||
<el-input v-model.number="formValidate.grade" placeholder="请输入等级"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="享受折扣" prop="discount">
|
||||
<el-input v-model="formValidate.discount" placeholder="请输入享受折扣"></el-input>
|
||||
<el-form-item label="享受折扣(%)" prop="discount">
|
||||
<el-input-number :min="0" :max="100" step-strictly v-model="formValidate.discount" placeholder="请输入享受折扣"></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="经验" prop="experience">
|
||||
<el-input v-model.number="formValidate.experience" placeholder="请输入经验"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="图标:" prop="icon">
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<div class="upLoadPicBox" @click="modalPicTap('1', 'icon')">
|
||||
<div v-if="formValidate.icon" class="pictrue"><img :src="formValidate.icon"></div>
|
||||
<div v-else class="upLoad">
|
||||
@@ -25,7 +25,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户背景:" required prop="image">
|
||||
<el-form-item label="用户背景" required prop="image">
|
||||
<div class="upLoadPicBox" @click="modalPicTap('1', 'image')">
|
||||
<div v-if="formValidate.image" class="pictrue"><img :src="formValidate.image"></div>
|
||||
<div v-else class="upLoad">
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
prop="discount"
|
||||
label="享受折扣"
|
||||
label="享受折扣(%)"
|
||||
min-width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="divBox">
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<el-tabs v-model="loginType" @tab-click="getList">
|
||||
<el-tabs v-model="loginType" @tab-click="getList(1)">
|
||||
<el-tab-pane :label="item.name" :name="item.type.toString()" v-for="(item,index) in headeNum" :key="index"/>
|
||||
</el-tabs>
|
||||
<div class="container">
|
||||
@@ -94,7 +94,7 @@
|
||||
<span>推广员</span>
|
||||
</el-radio-button>
|
||||
<el-radio-button label="0">
|
||||
<span>普通会员</span>
|
||||
<span>普通用户</span>
|
||||
</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
@@ -169,6 +169,7 @@
|
||||
<el-button class="mr10" size="small" @click="setBatch('label')">批量设置标签</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
ref="table"
|
||||
v-loading="listLoading"
|
||||
:data="tableData.data"
|
||||
style="width: 100%"
|
||||
@@ -179,6 +180,9 @@
|
||||
<el-table-column type="expand">
|
||||
<template slot-scope="props">
|
||||
<el-form label-position="left" inline class="demo-table-expand">
|
||||
<el-form-item label="身份:">
|
||||
<span>{{ props.row.isPromoter | filterIsPromoter }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="首次访问:">
|
||||
<span>{{ props.row.createTime | filterEmpty }}</span>
|
||||
</el-form-item>
|
||||
@@ -203,7 +207,7 @@
|
||||
<el-form-item label="地址:">
|
||||
<span>{{ props.row.addres | filterEmpty }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注:">
|
||||
<el-form-item label="备注:" style="width: 100%;display: flex;margin-right: 10px;">
|
||||
<span>{{ props.row.mark | filterEmpty}}</span>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@@ -231,18 +235,10 @@
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="姓名"
|
||||
min-width="150"
|
||||
min-width="130"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.nickname | filterEmpty}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="性别"
|
||||
min-width="60"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.sex | sexFilter}}</span>
|
||||
<span>{{scope.row.nickname | filterEmpty }} | {{scope.row.sex | sexFilter}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
@@ -250,7 +246,7 @@
|
||||
min-width="100"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!--<span>{{scope.row.level | levelFilter | filterEmpty}}</span>-->
|
||||
<span>{{scope.row.level | levelFilter | filterEmpty}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
@@ -302,7 +298,7 @@
|
||||
</el-table>
|
||||
<div class="block">
|
||||
<el-pagination
|
||||
:page-sizes="[20, 40, 60, 80]"
|
||||
:page-sizes="[15, 30, 45, 60]"
|
||||
:page-size="userFrom.limit"
|
||||
:current-page="userFrom.page"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
@@ -629,7 +625,9 @@
|
||||
uid: 0,
|
||||
Visible: false,
|
||||
keyNum: 0,
|
||||
address: []
|
||||
address: [],
|
||||
multipleSelectionAll: [],
|
||||
idKey:'uid'
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@@ -786,6 +784,13 @@
|
||||
this.visible = true
|
||||
},
|
||||
submitForm(formName) {
|
||||
let data = [];
|
||||
if(this.multipleSelectionAll.length){
|
||||
this.multipleSelectionAll.map((item) => {
|
||||
data.push(item.uid)
|
||||
});
|
||||
this.userIds = data.join(',');
|
||||
}
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
@@ -811,29 +816,21 @@
|
||||
},
|
||||
setBatch(name, row){
|
||||
this.batchName = name
|
||||
if(row){
|
||||
this.selectionList = [row]
|
||||
this.userIds = row.uid
|
||||
}else{
|
||||
this.selectionList=[]
|
||||
}
|
||||
// row?this.selectionList = [row]:this.selectionList=[]
|
||||
|
||||
if (this.selectionList.length === 0) return this.$message.warning('请选择要设置的用户')
|
||||
if(row) this.userIds = row.uid
|
||||
if (this.multipleSelectionAll.length === 0 && !row) return this.$message.warning('请选择要设置的用户')
|
||||
this.dialogVisible = true
|
||||
},
|
||||
handleClose(){
|
||||
this.dialogVisible = false
|
||||
this.multipleSelectionAll = [];
|
||||
this.$refs['dynamicValidateForm'].resetFields();
|
||||
},
|
||||
// 全选
|
||||
onSelectTab (selection) {
|
||||
this.selectionList = selection;
|
||||
let data = [];
|
||||
this.selectionList.map((item) => {
|
||||
data.push(item.uid)
|
||||
});
|
||||
this.userIds = data.join(',');
|
||||
setTimeout(() => {
|
||||
this.changePageCoreRecordData()
|
||||
}, 50)
|
||||
},
|
||||
// 搜索
|
||||
userSearchs () {
|
||||
@@ -879,8 +876,9 @@
|
||||
})
|
||||
},
|
||||
// 列表
|
||||
getList() {
|
||||
getList(num) {
|
||||
this.listLoading = true
|
||||
this.userFrom.page = num ? num : this.userFrom.page;
|
||||
this.userFrom.userType = this.loginType
|
||||
if(this.loginType == 0) this.userFrom.userType =''
|
||||
this.userFrom.level = this.levelData.join(',')
|
||||
@@ -889,16 +887,83 @@
|
||||
userListApi(this.userFrom).then(res => {
|
||||
this.tableData.data = res.list
|
||||
this.tableData.total = res.total
|
||||
this.$nextTick(function() {
|
||||
this.setSelectRow()// 调用跨页选中方法
|
||||
})
|
||||
this.listLoading = false
|
||||
}).catch(() => {
|
||||
this.listLoading = false
|
||||
})
|
||||
},
|
||||
// 设置选中的方法
|
||||
setSelectRow() {
|
||||
if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
|
||||
return
|
||||
}
|
||||
// 标识当前行的唯一键的名称
|
||||
const idKey = this.idKey
|
||||
const selectAllIds = []
|
||||
this.multipleSelectionAll.forEach(row => {
|
||||
selectAllIds.push(row[idKey])
|
||||
})
|
||||
this.$refs.table.clearSelection()
|
||||
for (var i = 0; i < this.tableData.data.length; i++) {
|
||||
if (selectAllIds.indexOf(this.tableData.data[i][idKey]) >= 0) {
|
||||
// 设置选中,记住table组件需要使用ref="table"
|
||||
this.$refs.table.toggleRowSelection(this.tableData.data[i], true)
|
||||
}
|
||||
}
|
||||
},
|
||||
// 记忆选择核心方法
|
||||
changePageCoreRecordData() {
|
||||
// 标识当前行的唯一键的名称
|
||||
const idKey = this.idKey
|
||||
const that = this
|
||||
// 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
|
||||
if (this.multipleSelectionAll.length <= 0) {
|
||||
this.multipleSelectionAll = this.selectionList
|
||||
return
|
||||
}
|
||||
// 总选择里面的key集合
|
||||
const selectAllIds = []
|
||||
this.multipleSelectionAll.forEach(row => {
|
||||
selectAllIds.push(row[idKey])
|
||||
})
|
||||
const selectIds = []
|
||||
// 获取当前页选中的id
|
||||
this.selectionList.forEach(row => {
|
||||
selectIds.push(row[idKey])
|
||||
// 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
|
||||
if (selectAllIds.indexOf(row[idKey]) < 0) {
|
||||
that.multipleSelectionAll.push(row)
|
||||
}
|
||||
})
|
||||
const noSelectIds = []
|
||||
// 得到当前页没有选中的id
|
||||
this.tableData.data.forEach(row => {
|
||||
if (selectIds.indexOf(row[idKey]) < 0) {
|
||||
noSelectIds.push(row[idKey])
|
||||
}
|
||||
})
|
||||
noSelectIds.forEach(uid => {
|
||||
if (selectAllIds.indexOf(uid) >= 0) {
|
||||
for (let i = 0; i < that.multipleSelectionAll.length; i++) {
|
||||
if (that.multipleSelectionAll[i][idKey] == uid) {
|
||||
// 如果总选择中有未被选中的,那么就删除这条
|
||||
that.multipleSelectionAll.splice(i, 1)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
pageChange(page) {
|
||||
this.changePageCoreRecordData()
|
||||
this.userFrom.page = page
|
||||
this.getList()
|
||||
},
|
||||
handleSizeChange(val) {
|
||||
this.changePageCoreRecordData()
|
||||
this.userFrom.limit = val
|
||||
this.getList()
|
||||
},
|
||||
|
||||
@@ -125,7 +125,7 @@ export function getOrderDetail(uni) {
|
||||
*/
|
||||
export function orderAgain(uni) {
|
||||
return request.post('order/again', {
|
||||
nui: uni
|
||||
orderNo: uni
|
||||
});
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ export function ordeRefundReason() {
|
||||
* @param object data
|
||||
*/
|
||||
export function orderRefundVerify(data) {
|
||||
return request.post('order/refund/verify', data);
|
||||
return request.post('order/refund', data);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -176,7 +176,7 @@ export function orderConfirm(cartId, isNew, addAgain,secKill,combination,bargain
|
||||
secKill: secKill,
|
||||
combination:combination,
|
||||
bargain:bargain
|
||||
}, {}, 1);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -214,4 +214,20 @@ export function postOrderComputed(key, data) {
|
||||
*/
|
||||
export function qrcodeApi(data) {
|
||||
return request.post('qrcode/str2base64', data, {}, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信订单支付
|
||||
* @param object data
|
||||
*/
|
||||
export function wechatOrderPay(data) {
|
||||
return request.post('pay/payment', data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信查询支付结果
|
||||
* @param object data
|
||||
*/
|
||||
export function wechatQueryPayResult(data) {
|
||||
return request.get('pay/queryPayResult', data);
|
||||
}
|
||||
@@ -78,3 +78,10 @@ export function copyWords() {
|
||||
return request.get("copy_words", {}, { noAuth: true });
|
||||
}
|
||||
|
||||
/**
|
||||
* 首页 获取客服地址
|
||||
* @returns {*}
|
||||
*/
|
||||
export function kefuConfig() {
|
||||
return request.get("config", {}, { noAuth: true });
|
||||
}
|
||||
@@ -390,9 +390,9 @@ export function getlevelInfo()
|
||||
* 经验值明细;
|
||||
*
|
||||
*/
|
||||
export function getlevelExpList()
|
||||
export function getlevelExpList(data)
|
||||
{
|
||||
return request.get("user/expList");
|
||||
return request.get("user/expList",data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,154 +0,0 @@
|
||||
<template>
|
||||
<view>
|
||||
<view class='Popup' v-if='isShowAuth'>
|
||||
<image :src='logoUrl'></image>
|
||||
<view class='title'>授权提醒</view>
|
||||
<view class='tip'>请授权头像等信息,以便为您提供更好的服务</view>
|
||||
<view class='bottom flex'>
|
||||
<view class='item' @click='close'>随便逛逛</view>
|
||||
<!-- #ifdef APP-PLUS -->
|
||||
<button class='item grant' @click="setUserInfo">去授权</button>
|
||||
<!-- #endif -->
|
||||
<!-- #ifdef MP -->
|
||||
<button class='item grant' type="primary" open-type="getPhoneNumber" lang="zh_CN" @getphonenumber="setUserInfo">去授权</button>
|
||||
<!-- #endif -->
|
||||
</view>
|
||||
</view>
|
||||
<view class='mask' v-if='isShowAuth' @click='close'></view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const app = getApp();
|
||||
import Cache from '../utils/cache';
|
||||
import { getLogo } from '../api/public';
|
||||
import { LOGO_URL } from '../config/cache';
|
||||
import { mapGetters } from 'vuex';
|
||||
import Routine from '../libs/routine';
|
||||
|
||||
export default {
|
||||
name:'Authorize',
|
||||
props:{
|
||||
isAuto:{
|
||||
type:Boolean,
|
||||
default:true
|
||||
},
|
||||
isGoIndex:{
|
||||
type:Boolean,
|
||||
default:true
|
||||
},
|
||||
isShowAuth:{
|
||||
type:Boolean,
|
||||
default:false
|
||||
}
|
||||
},
|
||||
data(){
|
||||
return {
|
||||
logoUrl:''
|
||||
}
|
||||
},
|
||||
computed:mapGetters(['isLogin','userInfo']),
|
||||
watch:{
|
||||
isLogin(n){
|
||||
n === true && this.$emit('onLoadFun',this.userInfo);
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getLogoUrl();
|
||||
this.setAuthStatus();
|
||||
},
|
||||
methods:{
|
||||
setAuthStatus(){
|
||||
Routine.authorize().then(res=>{
|
||||
if(res.islogin === false)
|
||||
this.setUserInfo();
|
||||
else
|
||||
this.$emit('onLoadFun',this.userInfo);
|
||||
}).catch(res=>{
|
||||
if (this.isAuto)
|
||||
this.$emit('authColse',true);
|
||||
})
|
||||
},
|
||||
getUserInfo(code){
|
||||
console.log(456);
|
||||
Routine.getUserInfo().then(res=>{
|
||||
console.log(123);
|
||||
console.log(res);
|
||||
let userInfo = res.userInfo
|
||||
userInfo.code = code;
|
||||
userInfo.spread_spid = app.globalData.spid;//获取推广人ID
|
||||
userInfo.spread_code = app.globalData.code;//获取推广人分享二维码ID
|
||||
userInfo.avatar = userInfo.userInfo.avatarUrl;
|
||||
userInfo.city = userInfo.userInfo.city;
|
||||
userInfo.country = userInfo.userInfo.country;
|
||||
userInfo.nickName = userInfo.userInfo.nickName;
|
||||
userInfo.province = userInfo.userInfo.province;
|
||||
userInfo.sex = userInfo.userInfo.gender;
|
||||
Routine.authUserInfo(code,userInfo).then(res=>{
|
||||
uni.hideLoading();
|
||||
this.$emit('authColse',false);
|
||||
this.$emit('onLoadFun',this.userInfo);
|
||||
}).catch(res=>{
|
||||
uni.hideLoading();
|
||||
uni.showToast({
|
||||
title:res.msg,
|
||||
icon:'none',
|
||||
duration:2000
|
||||
});
|
||||
})
|
||||
}).catch(res =>{
|
||||
uni.hideLoading();
|
||||
})
|
||||
},
|
||||
setUserInfo(e){
|
||||
console.log('78878787');
|
||||
console.log(e);
|
||||
uni.showLoading({title:'正在登录中'});
|
||||
if(e.detail.errMsg == "getPhoneNumber:ok"){
|
||||
console.log('授权成功');
|
||||
Routine.getCode().then(code=>{
|
||||
console.log(code);
|
||||
this.getUserInfo(code);
|
||||
}).catch(res=>{
|
||||
uni.hideLoading();
|
||||
})
|
||||
}
|
||||
},
|
||||
getLogoUrl(){
|
||||
let that = this;
|
||||
if (Cache.has(LOGO_URL)) {
|
||||
this.logoUrl = Cache.get(LOGO_URL);
|
||||
return;
|
||||
}
|
||||
getLogo().then(res=>{
|
||||
that.logoUrl = res.data.logo_url
|
||||
Cache.set(LOGO_URL,that.logoUrl);
|
||||
})
|
||||
},
|
||||
close(){
|
||||
let pages = getCurrentPages(), currPage = pages[pages.length - 1];
|
||||
if(this.isGoIndex){
|
||||
uni.switchTab({url:'/pages/index/index'});
|
||||
} else {
|
||||
this.$emit('authColse',false);
|
||||
}
|
||||
// if (currPage && currPage.isShowAuth != undefined){
|
||||
// currPage.isShowAuth = true;
|
||||
// }
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang='scss'>
|
||||
.Popup{width:500rpx;background-color:#fff;position:fixed;top:50%;left:50%;margin-left:-250rpx;transform:translateY(-50%);z-index:320;}
|
||||
.Popup image{width:150rpx;height:150rpx;margin:-67rpx auto 0 auto;display:block;border: 8rpx solid #fff;border-radius: 50%}
|
||||
.Popup .title{font-size:28rpx;color:#000;text-align:center;margin-top: 30rpx}
|
||||
.Popup .tip{font-size:22rpx;color:#555;padding:0 24rpx;margin-top:25rpx;}
|
||||
.Popup .bottom .item{width:50%;height:80rpx;background-color:#eeeeee;text-align:center;line-height:80rpx;font-size:24rpx;color:#666;margin-top:54rpx;}
|
||||
.Popup .bottom .item.on{width: 100%}
|
||||
.flex{display:flex;}
|
||||
.Popup .bottom .item.grant{font-size:28rpx;color:#fff;font-weight:bold;background-color:#e93323;border-radius:0;padding:0;}
|
||||
.mask{position:fixed;top:0;right:0;left:0;bottom:0;background-color:rgba(0,0,0,0.65);z-index:310;}
|
||||
|
||||
</style>
|
||||
@@ -9,16 +9,17 @@
|
||||
<view class="pic-num">满{{item.minPrice}}元可用</view>
|
||||
</view>
|
||||
<view class='text'>
|
||||
<view class='condition line1'>
|
||||
<span class='line-title' :class='item.isUse?"gray":""' v-if='item.type===0'>通用劵</span>
|
||||
<span class='line-title' :class='item.isUse?"gray":""' v-else-if='item.type===1'>品类券</span>
|
||||
<span class='line-title' :class='item.isUse?"gray":""' v-else>商品券</span>
|
||||
<view class='condition line2'>
|
||||
<span class='line-title' :class='item.isUse?"gray":""' v-if='item.useType===1'>通用</span>
|
||||
<span class='line-title' :class='item.isUse?"gray":""' v-else-if='item.useType===3'>品类</span>
|
||||
<span class='line-title' :class='item.isUse?"gray":""' v-else>商品</span>
|
||||
<span>{{item.name}}</span>
|
||||
</view>
|
||||
<view class='data acea-row row-between-wrapper'>
|
||||
<view>{{ item.receiveStartTime ? item.receiveStartTime + " ~ " : ""}}{{ item.receiveEndTime }}</view>
|
||||
<view class='bnt gray' v-if="item.isUse">{{item.use_title || '已领取'}}</view>
|
||||
<view class='bnt bg-color' v-else>{{coupon.statusTile || '立即领取'}}</view>
|
||||
<view v-if="item.day>0">领取后{{item.day}}天内可用</view>
|
||||
<view v-else>{{ item.useStartTimeStr&& item.useEndTimeStr ? item.useStartTimeStr + " - " + item.useEndTimeStr : ""}}</view>
|
||||
<view class='bnt gray' v-if="item.isUse">{{item.use_title || '已领取'}}</view>
|
||||
<view class='bnt bg-color' v-else>{{coupon.statusTile || '立即领取'}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -1,173 +0,0 @@
|
||||
<template>
|
||||
<view>
|
||||
<view class='coupon-list-window' :class='coupon.coupon==true?"on":""'>
|
||||
<view class='title'>优惠券<text class='iconfont icon-guanbi' @click='close'></text></view>
|
||||
<view class='coupon-list' v-if="coupon.list.length">
|
||||
<view class='item acea-row row-center-wrapper' v-for="(item,index) in coupon.list" @click="getCouponUser(index,item)"
|
||||
:key='index'>
|
||||
<view class='money'>
|
||||
<div>
|
||||
¥<span class="num">{{ item.coupon_price }}</span>
|
||||
</div>
|
||||
<div class="pic-num">满{{ item.use_min_price }}元可用</div>
|
||||
</view>
|
||||
<view class='text'>
|
||||
<view class='condition line1'>
|
||||
<span class="line-title" v-if="item.type === 0">通用劵</span>
|
||||
<span class="line-title" v-else-if="item.type === 1">品类券</span>
|
||||
<span class="line-title" v-else>商品券</span>
|
||||
<span>{{ item.title }}</span>
|
||||
</view>
|
||||
<view class='data acea-row row-between-wrapper'>
|
||||
<view>{{ item.start_time ? item.start_time + "-" : ""}}{{ item.end_time }}</view>
|
||||
<view class="iconfont icon-xuanzhong1 font-color-red" v-if="checked.id === item.id"></view>
|
||||
<view v-else class="iconfont icon-weixuanzhong"></view v-else>
|
||||
<!-- <view class='bnt gray' v-if="item.is_use">{{item.use_title || '已领取'}}</view>
|
||||
<view class='bnt bg-color' v-else>{{coupon.statusTile || '立即领取'}}</view> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 无优惠券 -->
|
||||
<view class='pictrue' v-else>
|
||||
<image src='../../static/images/noCoupon.png'></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class='mask' catchtouchmove="true" :hidden='coupon.coupon==false' @click='close'></view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
setCouponReceive
|
||||
} from '@/api/api.js';
|
||||
export default {
|
||||
props: {
|
||||
//打开状态 0=领取优惠券,1=使用优惠券
|
||||
openType: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
},
|
||||
coupon: {
|
||||
type: Object,
|
||||
default: function() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
checked:{
|
||||
type: Object,
|
||||
default: function() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
},
|
||||
|
||||
methods: {
|
||||
close: function() {
|
||||
this.$emit('ChangCouponsClone');
|
||||
},
|
||||
getCouponUser: function(index, item) {
|
||||
let that = this;
|
||||
let list = that.coupon.list;
|
||||
that.$emit('ChangCoupons', item);
|
||||
// if (list[index].is_use == true && this.openType == 0) return true;
|
||||
// switch (this.openType) {
|
||||
// case 0:
|
||||
// //领取优惠券
|
||||
// setCouponReceive(id).then(res => {
|
||||
// that.$emit('ChangCouponsUseState', index);
|
||||
// that.$util.Tips({
|
||||
// title: "领取成功"
|
||||
// });
|
||||
// that.$emit('ChangCoupons', list[index]);
|
||||
// })
|
||||
// break;
|
||||
// case 1:
|
||||
// that.$emit('ChangCoupons', index);
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.coupon-list-window {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background-color: #f5f5f5;
|
||||
border-radius: 16rpx 16rpx 0 0;
|
||||
z-index: 555;
|
||||
transform: translate3d(0, 100%, 0);
|
||||
transition: all .3s cubic-bezier(.25, .5, .5, .9);
|
||||
}
|
||||
|
||||
.coupon-list-window.on {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.coupon-list-window .title {
|
||||
height: 124rpx;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
line-height: 124rpx;
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.coupon-list-window .title .iconfont {
|
||||
position: absolute;
|
||||
right: 30rpx;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
font-size: 35rpx;
|
||||
color: #8a8a8a;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.coupon-list-window .coupon-list {
|
||||
margin: 0 0 50rpx 0;
|
||||
height: 550rpx;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.coupon-list-window .pictrue {
|
||||
width: 414rpx;
|
||||
height: 336rpx;
|
||||
margin: 0 auto 50rpx auto;
|
||||
}
|
||||
|
||||
.coupon-list-window .pictrue image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.coupon-list .item .money{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
.pic-num{
|
||||
color: #ffffff;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
}
|
||||
.condition .line-title{
|
||||
width: 90rpx;
|
||||
padding: 0 10rpx;
|
||||
box-sizing: border-box;
|
||||
background: rgba(255, 247, 247, 1);
|
||||
border: 1px solid rgba(232, 51, 35, 1);
|
||||
opacity: 1;
|
||||
border-radius: 22rpx;
|
||||
font-size: 20rpx;
|
||||
color: #e83323;
|
||||
margin-right: 12rpx;
|
||||
}
|
||||
</style>
|
||||
@@ -6,7 +6,8 @@
|
||||
<view class='money font-color'>¥<text class='num'>{{item.money}}</text></view>
|
||||
<view class='text'>
|
||||
<view class='name'>购物买{{item.minPrice}}减{{item.money}}</view>
|
||||
<view>{{item.receiveStartTime ? item.receiveStartTime+'~' : ''}}{{item.receiveEndTime}}</view>
|
||||
<view v-if="item.day>0">领取后{{item.day}}天内可用</view>
|
||||
<view v-else>{{item.useStartTimeStr&&item.useEndTimeStr ? item.useStartTimeStr+'~'+item.useEndTimeStr : ''}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
|
||||
<script>
|
||||
import {
|
||||
orderPay
|
||||
orderPay,
|
||||
wechatOrderPay
|
||||
} from '@/api/order.js';
|
||||
export default {
|
||||
props: {
|
||||
@@ -69,36 +70,23 @@
|
||||
});
|
||||
uni.showLoading({
|
||||
title: '支付中'
|
||||
});
|
||||
orderPay({
|
||||
uni: that.order_id,
|
||||
paytype: paytype,
|
||||
// #ifdef MP
|
||||
'from': 'routine',
|
||||
// #endif
|
||||
// #ifdef H5 || APP-PLUS
|
||||
'from': this.$wechat.isWeixin() ? 'public' : 'weixinh5'
|
||||
// #endif
|
||||
// // #ifdef H5
|
||||
// quitUrl: location.port ? location.protocol + '//' + location.hostname + ':' + location.port + '/pages/users/order_details/index?order_id=' + this.order_id : location.protocol + '//' + location.hostname +
|
||||
// '/pages/users/order_details/index?order_id=' + that.order_id
|
||||
// // #endif
|
||||
});
|
||||
wechatOrderPay({
|
||||
orderNo: that.order_id,
|
||||
payChannel: this.$wechat.isWeixin() ? 'public' : 'weixinh5',
|
||||
payType: paytype
|
||||
}).then(res => {
|
||||
switch (paytype) {
|
||||
let jsConfig = res.data.jsConfig;
|
||||
switch (res.data.payType) {
|
||||
case 'weixin':
|
||||
if (res.data.result === undefined) return that.$util.Tips({
|
||||
title: '缺少支付参数'
|
||||
});
|
||||
// #ifdef MP || APP-PLUS
|
||||
let jsConfig = res.data.jsConfig;
|
||||
// let packages = 'prepay_id=' + jsConfig.prepayId;
|
||||
// #ifdef MP
|
||||
uni.requestPayment({
|
||||
timeStamp: jsConfig.timeStamp.toString(),
|
||||
timeStamp: jsConfig.timeStamp,
|
||||
nonceStr: jsConfig.nonceStr,
|
||||
package: jsConfig.package,
|
||||
package: jsConfig.packages,
|
||||
signType: jsConfig.signType,
|
||||
paySign: jsConfig.paySign,
|
||||
success: function(res) {
|
||||
success: function(ress) {
|
||||
uni.hideLoading();
|
||||
return that.$util.Tips({
|
||||
title: '支付成功',
|
||||
@@ -129,21 +117,25 @@
|
||||
});
|
||||
});
|
||||
},
|
||||
});
|
||||
})
|
||||
// #endif
|
||||
// #ifdef H5
|
||||
if (res.data.status === "WECHAT_PAY") {
|
||||
let jsConfig = res.data.jsConfig;
|
||||
//let packages = 'prepay_id=' + jsConfig.prepayId;
|
||||
let datas = {
|
||||
timestamp:jsConfig.timeStamp,
|
||||
nonceStr:jsConfig.nonceStr,
|
||||
package:jsConfig.package,
|
||||
signType:jsConfig.signType,
|
||||
paySign:jsConfig.paySign
|
||||
};
|
||||
that.$wechat.pay(datas)
|
||||
.then(() => {
|
||||
let datas = {
|
||||
timestamp: jsConfig.timeStamp,
|
||||
nonceStr: jsConfig.nonceStr,
|
||||
package: jsConfig.packages,
|
||||
signType: jsConfig.signType,
|
||||
paySign: jsConfig.paySign
|
||||
};
|
||||
that.$wechat.pay(datas).then(res => {
|
||||
if (res.errMsg == 'chooseWXPay:cancel') {
|
||||
return that.$util.Tips({
|
||||
title: '支付失败'
|
||||
});
|
||||
} else {
|
||||
wechatQueryPayResult({
|
||||
orderNo: that.order_id
|
||||
}).then(res => {
|
||||
return that.$util.Tips({
|
||||
title: "支付成功",
|
||||
icon: 'success'
|
||||
@@ -152,24 +144,14 @@
|
||||
action: 'pay_complete'
|
||||
});
|
||||
});
|
||||
})
|
||||
.catch(function() {
|
||||
}).cache(errW => {
|
||||
return that.$util.Tips({
|
||||
title: '支付失败'
|
||||
title: errW
|
||||
});
|
||||
});
|
||||
} else {
|
||||
uni.hideLoading();
|
||||
location.replace(res.data.jsConfig.h5PayUrl);
|
||||
return that.$util.Tips({
|
||||
title: "支付成功",
|
||||
icon: 'success'
|
||||
}, () => {
|
||||
that.$emit('onChangeFun', {
|
||||
action: 'pay_complete'
|
||||
});
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
})
|
||||
// #endif
|
||||
break;
|
||||
case 'yue':
|
||||
@@ -183,18 +165,132 @@
|
||||
});
|
||||
});
|
||||
break;
|
||||
case 'offline':
|
||||
uni.hideLoading();
|
||||
return that.$util.Tips({
|
||||
title: '线下支付成功',
|
||||
icon: 'success'
|
||||
}, () => {
|
||||
that.$emit('onChangeFun', {
|
||||
action: 'pay_complete'
|
||||
});
|
||||
});
|
||||
break;
|
||||
case 'weixinh5':
|
||||
uni.hideLoading();
|
||||
location.replace(jsConfig.mwebUrl);
|
||||
return that.$util.Tips({
|
||||
title: "支付成功",
|
||||
icon: 'success'
|
||||
}, () => {
|
||||
that.$emit('onChangeFun', {
|
||||
action: 'pay_complete'
|
||||
});
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// switch (paytype) {
|
||||
// case 'weixin':
|
||||
// if (res.data.result === undefined) return that.$util.Tips({
|
||||
// title: '缺少支付参数'
|
||||
// });
|
||||
// // #ifdef MP || APP-PLUS
|
||||
// let jsConfig = res.data.jsConfig;
|
||||
// uni.requestPayment({
|
||||
// timeStamp: jsConfig.timeStamp.toString(),
|
||||
// nonceStr: jsConfig.nonceStr,
|
||||
// package: jsConfig.package,
|
||||
// signType: jsConfig.signType,
|
||||
// paySign: jsConfig.paySign,
|
||||
// success: function(res) {
|
||||
// uni.hideLoading();
|
||||
// return that.$util.Tips({
|
||||
// title: '支付成功',
|
||||
// icon: 'success'
|
||||
// }, () => {
|
||||
// that.$emit('onChangeFun', {
|
||||
// action: 'pay_complete'
|
||||
// });
|
||||
// });
|
||||
// },
|
||||
// fail: function(e) {
|
||||
// uni.hideLoading();
|
||||
// return that.$util.Tips({
|
||||
// title: '取消支付'
|
||||
// }, () => {
|
||||
// that.$emit('onChangeFun', {
|
||||
// action: 'pay_fail'
|
||||
// });
|
||||
// });
|
||||
// },
|
||||
// complete: function(e) {
|
||||
// uni.hideLoading();
|
||||
// if (e.errMsg == 'requestPayment:cancel') return that.$util.Tips({
|
||||
// title: '取消支付'
|
||||
// }, () => {
|
||||
// that.$emit('onChangeFun', {
|
||||
// action: 'pay_fail'
|
||||
// });
|
||||
// });
|
||||
// },
|
||||
// });
|
||||
// // #endif
|
||||
// // #ifdef H5
|
||||
// if (res.data.status === "WECHAT_PAY") {
|
||||
// let jsConfig = res.data.jsConfig;
|
||||
// //let packages = 'prepay_id=' + jsConfig.prepayId;
|
||||
// let datas = {
|
||||
// timestamp:jsConfig.timeStamp,
|
||||
// nonceStr:jsConfig.nonceStr,
|
||||
// package:jsConfig.package,
|
||||
// signType:jsConfig.signType,
|
||||
// paySign:jsConfig.paySign
|
||||
// };
|
||||
// that.$wechat.pay(datas)
|
||||
// .then(() => {
|
||||
// return that.$util.Tips({
|
||||
// title: "支付成功",
|
||||
// icon: 'success'
|
||||
// }, () => {
|
||||
// that.$emit('onChangeFun', {
|
||||
// action: 'pay_complete'
|
||||
// });
|
||||
// });
|
||||
// })
|
||||
// .catch(function() {
|
||||
// return that.$util.Tips({
|
||||
// title: '支付失败'
|
||||
// });
|
||||
// });
|
||||
// } else {
|
||||
// uni.hideLoading();
|
||||
// location.replace(res.data.jsConfig.h5PayUrl);
|
||||
// return that.$util.Tips({
|
||||
// title: "支付成功",
|
||||
// icon: 'success'
|
||||
// }, () => {
|
||||
// that.$emit('onChangeFun', {
|
||||
// action: 'pay_complete'
|
||||
// });
|
||||
// });
|
||||
// }
|
||||
// // #endif
|
||||
// break;
|
||||
// case 'yue':
|
||||
// uni.hideLoading();
|
||||
// return that.$util.Tips({
|
||||
// title: '余额支付成功',
|
||||
// icon: 'success'
|
||||
// }, () => {
|
||||
// that.$emit('onChangeFun', {
|
||||
// action: 'pay_complete'
|
||||
// });
|
||||
// });
|
||||
// break;
|
||||
// case 'offline':
|
||||
// uni.hideLoading();
|
||||
// return that.$util.Tips({
|
||||
// title: '线下支付成功',
|
||||
// icon: 'success'
|
||||
// }, () => {
|
||||
// that.$emit('onChangeFun', {
|
||||
// action: 'pay_complete'
|
||||
// });
|
||||
// });
|
||||
// break;
|
||||
// }
|
||||
}).catch(err => {
|
||||
uni.hideLoading();
|
||||
return that.$util.Tips({
|
||||
|
||||
@@ -93,7 +93,6 @@
|
||||
return {};
|
||||
},
|
||||
mounted() {
|
||||
console.log(this.attr)
|
||||
},
|
||||
methods: {
|
||||
goCat:function(){
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<scroll-view scroll-x="true" style="white-space: nowrap; display: flex;align-items: center; height: 100%;" scroll-with-animation :scroll-left="tabLeft" show-scrollbar="false">
|
||||
<view class="wrapper">
|
||||
<view v-for="(item,index) in tabTitle[tabClick].child?tabTitle[tabClick].child:[]" :key="index" class="child-item" :class="{on:index == childIndex}" @click="childTab(tabClick,index)">
|
||||
<image :src="item.extra" mode=""></image>
|
||||
<image :src="item.extra" mode="" :style="{'background-color':item.extra?'none':'#f7f7f7'}"></image>
|
||||
<view class="txt line1">{{item.name}}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -11,10 +11,12 @@
|
||||
<view class="start" :class="'star' + item.productScore"></view>
|
||||
</view>
|
||||
<view class="time">{{ item.createTime }}</view>
|
||||
<!-- <view class="time">{{ item.createTime }} {{ item.suk }}</view> -->
|
||||
<!-- <view class="time">{{ item.createTime }}</view>
|
||||
<view class="time">{{ item.suk }}</view> -->
|
||||
<!-- <view class="time">{{ item.createTime }} {{ item.sku }}</view> -->
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<view class="time">规格:{{ item.sku?item.sku:'无' }}</view>
|
||||
<view class="evaluate-infor">{{ item.comment }}</view>
|
||||
<view class="imgList acea-row" v-if="item.pics.length && item.pics[0]">
|
||||
<view class="pictrue" v-for="(itemn, indexn) in item.pics" :key="indexn">
|
||||
|
||||
@@ -648,7 +648,6 @@ const initPicker={
|
||||
let bDate=new Date(tYear,curMonth,curDate).getTime();
|
||||
let months=[];
|
||||
if(bDate-aDate>0){
|
||||
console.log(1)
|
||||
for(let m=1;m<=12;m++){
|
||||
months.push(forMatNum(m));
|
||||
};
|
||||
|
||||
@@ -312,7 +312,6 @@
|
||||
},
|
||||
defaultVal(val){
|
||||
this.initData();
|
||||
console.log(val)
|
||||
},
|
||||
areaCode(){
|
||||
this.initData();
|
||||
|
||||
@@ -51,16 +51,13 @@ class AuthWechat {
|
||||
// if (this.status && !this.isAndroid()) return resolve(this.instance);
|
||||
getWechatConfig()
|
||||
.then(res => {
|
||||
let data = res.data;
|
||||
// delete data.jsApiTicket;
|
||||
this.instance.config(data);
|
||||
this.initConfig = data;
|
||||
this.instance.config(res.data);
|
||||
this.initConfig = res.data;
|
||||
this.status = true;
|
||||
this.instance.ready(() => {
|
||||
resolve(this.instance);
|
||||
})
|
||||
}).catch(err => {
|
||||
console.log(err);
|
||||
this.status = false;
|
||||
reject(err);
|
||||
});
|
||||
@@ -124,14 +121,15 @@ class AuthWechat {
|
||||
this.toPromise(wx.chooseWXPay, config).then(res => {
|
||||
resolve(res);
|
||||
}).catch(res => {
|
||||
reject(res);
|
||||
console.log('js中的错误',res)
|
||||
resolve(res);
|
||||
});
|
||||
}).catch(res => {
|
||||
reject(res);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
toPromise(fn, config = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
fn({
|
||||
@@ -174,7 +172,6 @@ class AuthWechat {
|
||||
auth(code) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let loginType = Cache.get(LOGINTYPE);
|
||||
console.log('spread', Cache.get("spread"))
|
||||
wechatAuth(code, Cache.get("spread"), loginType)
|
||||
.then(({
|
||||
data
|
||||
@@ -252,7 +249,6 @@ class AuthWechat {
|
||||
})
|
||||
},
|
||||
success(res) {
|
||||
console.log(res);
|
||||
return resolve(res,2222);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -359,7 +359,6 @@
|
||||
}
|
||||
|
||||
if (this.isLogin) {
|
||||
console.log(that.bargainUid,'that.bargainUid')
|
||||
if(that.bargainUid == 'undefined'){
|
||||
that.bargainUid = that.$store.state.app.uid
|
||||
}
|
||||
|
||||
@@ -314,7 +314,9 @@
|
||||
isState: true, //默认不显示
|
||||
},
|
||||
tagStyle: {
|
||||
img: 'width:100%;'
|
||||
img: 'width:100%;display:block;',
|
||||
table: 'width:100%',
|
||||
video: 'width:100%'
|
||||
},
|
||||
posters: false,
|
||||
weixinStatus: false,
|
||||
@@ -531,53 +533,6 @@
|
||||
});
|
||||
},
|
||||
//#endif
|
||||
// setTime: function() { //到期时间戳
|
||||
// var that = this;
|
||||
// var endTimeList = that.pink;
|
||||
// that.pink.map(item => {
|
||||
// item.time = {
|
||||
// day: '00',
|
||||
// hou: '00',
|
||||
// min: '00',
|
||||
// sec: '00'
|
||||
// };
|
||||
// });
|
||||
// var countDownArr = [];
|
||||
// var timeer = setInterval(function() {
|
||||
// var newTime = new Date().getTime() / 1000;
|
||||
// for (var i in endTimeList) {
|
||||
// var endTime = endTimeList[i].stop_time;
|
||||
// var obj = [];
|
||||
// if (endTime - newTime > 0) {
|
||||
// var time = endTime - newTime;
|
||||
// var day = parseInt(time / (60 * 60 * 24));
|
||||
// var hou = parseInt(time % (60 * 60 * 24) / 3600);
|
||||
// var min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
|
||||
// var sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
|
||||
// hou = parseInt(hou) + parseInt(day * 24);
|
||||
// obj = {
|
||||
// day: that.timeFormat(day),
|
||||
// hou: that.timeFormat(hou),
|
||||
// min: that.timeFormat(min),
|
||||
// sec: that.timeFormat(sec)
|
||||
// }
|
||||
// } else {
|
||||
// obj = {
|
||||
// day: '00',
|
||||
// hou: '00',
|
||||
// min: '00',
|
||||
// sec: '00'
|
||||
// }
|
||||
// }
|
||||
// endTimeList[i].time = obj;
|
||||
// }
|
||||
// that.pink = endTimeList
|
||||
// }, 1000);
|
||||
// that.timeer = timeer
|
||||
// },
|
||||
// timeFormat(param) { //小于10的格式化函数
|
||||
// return param < 10 ? '0' + param : param;
|
||||
// },
|
||||
/**
|
||||
* 默认选中属性
|
||||
*
|
||||
@@ -936,7 +891,7 @@
|
||||
let storeName = that.storeInfo.title;
|
||||
let price = that.storeInfo.price;
|
||||
setTimeout(() => {
|
||||
that.$util.PosterCanvas(arrImages, storeName, price, function(tempFilePath) {
|
||||
that.$util.PosterCanvas(arrImages, storeName, price, that.storeInfo.otPrice, function(tempFilePath) {
|
||||
that.posterImage = tempFilePath;
|
||||
that.canvasStatus = true;
|
||||
});
|
||||
|
||||
@@ -425,13 +425,6 @@ export default {
|
||||
that.isOpen = true;
|
||||
},
|
||||
goPay() {
|
||||
// productId: that.storeInfo.productId,
|
||||
// combinationId:parseFloat(that.id),
|
||||
// cartNum: that.cart_num ? this.cart_num : this.attribute.productSelect.cart_num,
|
||||
// productAttrUnique: productSelect !== undefined ? productSelect.id : '',
|
||||
// isNew: true,
|
||||
|
||||
|
||||
var that = this;
|
||||
var data = {};
|
||||
// that.attr.cartAttr = res;
|
||||
@@ -441,7 +434,6 @@ export default {
|
||||
data.productAttrUnique = that.attr.productSelect.unique;
|
||||
data.combinationId = that.storeCombination.id;
|
||||
data.isNew = true;
|
||||
console.log(that.pinkId);
|
||||
postCartAdd(data)
|
||||
.then(res => {
|
||||
uni.navigateTo({
|
||||
|
||||
@@ -245,7 +245,9 @@
|
||||
lock: false,
|
||||
scrollTop: 0,
|
||||
tagStyle: {
|
||||
img: 'width:100%;'
|
||||
img: 'width:100%;display:block;',
|
||||
table: 'width:100%',
|
||||
video: 'width:100%'
|
||||
},
|
||||
datatime: '',
|
||||
navActive: 0,
|
||||
@@ -581,50 +583,6 @@
|
||||
this.$set(this.attribute.productSelect, "cart_num", num.cart_num);
|
||||
}
|
||||
},
|
||||
// ChangeCartNum: function(changeValue) {
|
||||
// //changeValue:是否 加|减
|
||||
// //获取当前变动属性
|
||||
// let productSelect = this.productValue[this.attrValue];
|
||||
// if (this.cart_num) {
|
||||
// productSelect.cart_num = this.cart_num;
|
||||
// this.attribute.productSelect.cart_num = this.cart_num;
|
||||
// }
|
||||
// //如果没有属性,赋值给商品默认库存
|
||||
// if (productSelect === undefined && !this.attribute.productAttr.length)
|
||||
// productSelect = this.attribute.productSelect;
|
||||
// //无属性值即库存为0;不存在加减;
|
||||
// if (productSelect === undefined) return;
|
||||
// let stock = productSelect.stock || 0;
|
||||
// let num = this.attribute.productSelect;
|
||||
// let quota = productSelect.quota || 0;
|
||||
// //设置默认数据
|
||||
// if (productSelect.cart_num == undefined) productSelect.cart_num = 1;
|
||||
// if (changeValue) {
|
||||
// num.cart_num ++;
|
||||
// if(quota >= stock){
|
||||
// if (num.cart_num > stock) {
|
||||
// this.$set(this.attribute.productSelect, "cart_num", stock);
|
||||
// this.$set(this, "cart_num", stock);
|
||||
// }
|
||||
// }else{
|
||||
// if (num.cart_num > quota) {
|
||||
// this.$set(this.attribute.productSelect, "cart_num", quota);
|
||||
// this.$set(this, "cart_num", quota);
|
||||
// }
|
||||
// }
|
||||
// this.$set(this, "cart_num", num.cart_num);
|
||||
// this.$set(this.attribute.productSelect, "cart_num", num.cart_num);
|
||||
|
||||
// } else {
|
||||
// num.cart_num--;
|
||||
// if (num.cart_num < 1) {
|
||||
// this.$set(this.attribute.productSelect, "cart_num", 1);
|
||||
// this.$set(this, "cart_num", 1);
|
||||
// }
|
||||
// this.$set(this, "cart_num", num.cart_num);
|
||||
// this.$set(this.attribute.productSelect, "cart_num", num.cart_num);
|
||||
// }
|
||||
// },
|
||||
attrVal(val) {
|
||||
this.attribute.productAttr[val.indexw].index = this.attribute.productAttr[val.indexw].attrValues[val.indexn];
|
||||
},
|
||||
@@ -882,20 +840,13 @@
|
||||
let storeName = that.storeInfo.storeName;
|
||||
let price = that.storeInfo.price;
|
||||
setTimeout(() => {
|
||||
that.$util.PosterCanvas(arrImages, storeName, price, function(tempFilePath) {
|
||||
that.$util.PosterCanvas(arrImages, storeName, price, that.storeInfo.otPrice,function(tempFilePath) {
|
||||
that.posterImage = tempFilePath;
|
||||
that.canvasStatus = true;
|
||||
});
|
||||
}, 200);
|
||||
}
|
||||
});
|
||||
// let arrImages = [that.posterbackgd, that.imgTop, that.PromotionCode];
|
||||
// let storeName = that.storeInfo.storeName;
|
||||
// let price = that.storeInfo.price;
|
||||
// that.$util.PosterCanvas(arrImages, storeName, price, function(tempFilePath) {
|
||||
// that.posterImage = tempFilePath;
|
||||
// that.canvasStatus = true;
|
||||
// });
|
||||
},
|
||||
// 小程序二维码
|
||||
getQrcode(){
|
||||
|
||||
@@ -158,7 +158,6 @@
|
||||
uni.getImageInfo({
|
||||
src: arrImages[0],
|
||||
success: function (image) {
|
||||
console.log('啦啦', image)
|
||||
context.drawImage(arrImages[0], 0, 0, 750, 1190);
|
||||
context.setFontSize(36);
|
||||
context.setTextAlign('center');
|
||||
@@ -210,19 +209,15 @@
|
||||
canvasId: 'firstCanvas',
|
||||
fileType: 'jpg',
|
||||
success: function(res) {
|
||||
console.log('啦啦222', res)
|
||||
// 在H5平台下,tempFilePath 为 base64
|
||||
uni.hideLoading();
|
||||
//successFn && successFn(res.tempFilePath);
|
||||
that.imagePath = res.tempFilePath;
|
||||
console.log(that.imagePath)
|
||||
that.canvasStatus = true;
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
fail: function(err) {
|
||||
console.log(err)
|
||||
uni.hideLoading();
|
||||
that.$util.Tips({
|
||||
title: '无法获取图片信息'
|
||||
|
||||
@@ -179,7 +179,6 @@
|
||||
},
|
||||
setInfo: function(item) {
|
||||
let that = this;
|
||||
console.log(item);
|
||||
setAdminOrderDelivery(item).then(
|
||||
res => {
|
||||
that.$util.Tips({
|
||||
@@ -197,7 +196,6 @@
|
||||
);
|
||||
},
|
||||
bindPickerChange(e){
|
||||
console.log(e,'tar')
|
||||
this.seIndex = e.detail.value
|
||||
}
|
||||
}
|
||||
|
||||
@@ -301,7 +301,6 @@
|
||||
that.getIndex();
|
||||
},
|
||||
err => {
|
||||
console.log(err, 'err')
|
||||
that.change = false;
|
||||
that.$util.Tips({
|
||||
title: err
|
||||
@@ -364,13 +363,11 @@
|
||||
// #endif
|
||||
// #ifdef H5
|
||||
webCopy(item, index) {
|
||||
console.log('yunxingle')
|
||||
let items = item
|
||||
let indexs = index
|
||||
let self = this
|
||||
|
||||
if (self.clickNum == 1) {
|
||||
console.log('22')
|
||||
self.clickNum += 1
|
||||
self.webCopy(items, indexs)
|
||||
}
|
||||
|
||||
@@ -228,7 +228,6 @@
|
||||
that.init();
|
||||
},
|
||||
err => {
|
||||
console.log(err,'err')
|
||||
that.change = false;
|
||||
that.$util.Tips({title: err});
|
||||
}
|
||||
|
||||
@@ -25,11 +25,6 @@
|
||||
wechat.auth(code, state)
|
||||
.then(() => {
|
||||
getUserInfo().then(res => {
|
||||
console.log(res);
|
||||
console.log(option.back_url);
|
||||
console.log(decodeURIComponent(
|
||||
decodeURIComponent(option.back_url)
|
||||
));
|
||||
that.$store.commit("SETUID", res.data.uid);
|
||||
location.href = decodeURIComponent(
|
||||
decodeURIComponent(option.back_url)
|
||||
|
||||
@@ -382,7 +382,6 @@
|
||||
})
|
||||
},
|
||||
onReady: function() {
|
||||
console.log(this.emojiGroup);
|
||||
this.height();
|
||||
this.getHistory();
|
||||
this.getproductInfo();
|
||||
@@ -417,7 +416,6 @@
|
||||
},
|
||||
methods: {
|
||||
uploadImg() {
|
||||
console.log(this.$store.state.app.token)
|
||||
let self = this
|
||||
uni.chooseImage({
|
||||
count: 1, //默认1
|
||||
@@ -460,7 +458,6 @@
|
||||
getOrderInfo() {
|
||||
if (!this.orderId) return;
|
||||
getOrderDetail(this.orderId).then(res => {
|
||||
console.log(res)
|
||||
this.orderInfo = res.data;
|
||||
if (this.orderInfo.add_time_h) {
|
||||
this.orderInfo.add_time_h = this.orderInfo.add_time_h.substring(
|
||||
@@ -511,7 +508,6 @@
|
||||
this.loaded = data.length < this.limit;
|
||||
})
|
||||
.catch(err => {
|
||||
console.log(err);
|
||||
this.$dialog.error(err || "加载失败");
|
||||
});
|
||||
},
|
||||
@@ -588,7 +584,6 @@
|
||||
if (this.timeOutEvent !== 0 && this.longClick === 0) {
|
||||
//点击
|
||||
//此处为点击事件----在此处添加跳转详情页
|
||||
console.log("这是点击");
|
||||
}
|
||||
this.speak = "按住 说话";
|
||||
this.recording = false;
|
||||
@@ -643,10 +638,9 @@
|
||||
setTimeout(res=>{
|
||||
let info = uni.createSelectorQuery().select(".chat");
|
||||
info.boundingClientRect(function(data) { //data - 各种参数
|
||||
console.log(data.height) // 获取元素宽度
|
||||
// 获取元素宽度
|
||||
scrollTop = data.height
|
||||
}).exec()
|
||||
console.log(scrollTop,'scrollTop')
|
||||
if(this.active){
|
||||
this.scrollTop = scrollTop+500
|
||||
}else{
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<view class='list acea-row'>
|
||||
<block v-for="(itemn,indexn) in item.child" :key="indexn">
|
||||
<navigator hover-class='none' :url='"/pages/goods_list/index?cid="+itemn.id+"&title="+itemn.name' class='item acea-row row-column row-middle'>
|
||||
<view class='picture'>
|
||||
<view class='picture' :style="{'background-color':itemn.extra?'none':'#f7f7f7'}">
|
||||
<image :src='itemn.extra'></image>
|
||||
</view>
|
||||
<view class='name line1'>{{itemn.name}}</view>
|
||||
@@ -241,6 +241,9 @@
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 50%;
|
||||
div{
|
||||
background-color: #f7f7f7;
|
||||
}
|
||||
}
|
||||
|
||||
.productSort .conter .list .item .name {
|
||||
|
||||
@@ -29,9 +29,9 @@
|
||||
</view>
|
||||
<view class='introduce'>{{storeInfo.storeName}}</view>
|
||||
<view class='label acea-row row-between-wrapper'>
|
||||
<view>原价:¥{{storeInfo.otPrice}}</view>
|
||||
<view>库存:{{storeInfo.stock}}{{storeInfo.unitName}}</view>
|
||||
<view>销量:{{Number(storeInfo.sales) + Number(storeInfo.ficti) || 0}}{{storeInfo.unitName}}</view>
|
||||
<view>原价:¥{{storeInfo.otPrice || 0}}</view>
|
||||
<view>库存:{{storeInfo.stock || 0}}{{storeInfo.unitName || ''}}</view>
|
||||
<view>销量:{{Math.floor(storeInfo.sales) + Math.floor(storeInfo.ficti) || 0}}{{storeInfo.unitName || ''}}</view>
|
||||
</view>
|
||||
<!-- <view class='coupon acea-row row-between-wrapper' v-if="storeInfo.give_integral > 0">
|
||||
<view class='hide line1 acea-row'>
|
||||
@@ -148,7 +148,7 @@
|
||||
<navigator open-type='switchTab' class="animated item" :class="animated==true?'bounceIn':''" url='/pages/order_addcart/order_addcart'
|
||||
hover-class="none">
|
||||
<view class='iconfont icon-gouwuche1'>
|
||||
<text class='num bg-color'>{{CartCount || 0}}</text>
|
||||
<text v-if="Math.floor(CartCount)>0" class='num bg-color'>{{CartCount}}</text>
|
||||
</view>
|
||||
<view>购物车</view>
|
||||
</navigator>
|
||||
@@ -340,7 +340,9 @@
|
||||
lock: false,
|
||||
scrollTop: 0,
|
||||
tagStyle: {
|
||||
img: 'width:100%;'
|
||||
img: 'width:100%;display:block;',
|
||||
table: 'width:100%',
|
||||
video: 'width:100%'
|
||||
},
|
||||
sliderImage: [],
|
||||
qrcodeSize: 600,
|
||||
@@ -419,7 +421,6 @@
|
||||
// #endif
|
||||
methods: {
|
||||
getChat(uid){
|
||||
console.log(this.uid)
|
||||
window.yzf && window.yzf.init({
|
||||
sign: '37ef9b97872756ce2a1596ec4fe9b66b0b4cbeec7b36239a65924fa6cbd5c29ac6b013c274511b2eee929e72312baeeeb97aae86',
|
||||
token: '', //非必填
|
||||
@@ -786,7 +787,6 @@
|
||||
*/
|
||||
DefaultSelect: function() {
|
||||
let productAttr = this.attr.productAttr;
|
||||
let value = [];
|
||||
let value = [];
|
||||
for (let key in this.productValue) {
|
||||
if (this.productValue[key].stock > 0) {
|
||||
@@ -1040,7 +1040,6 @@
|
||||
}
|
||||
},
|
||||
// 授权关闭
|
||||
authColse: function(e) {
|
||||
authColse: function(e) {
|
||||
this.isShowAuth = e
|
||||
},
|
||||
@@ -1116,16 +1115,18 @@
|
||||
getQrcode(data).then(res=>{
|
||||
//that.PromotionCode = res.data.code;
|
||||
base64src(res.data.code, res => {
|
||||
that.PromotionCode = res;
|
||||
that.PromotionCode = res;
|
||||
});
|
||||
});
|
||||
}).catch(err => {
|
||||
that.$util.Tips({
|
||||
title: err
|
||||
});
|
||||
});
|
||||
},
|
||||
// 生成二维码;
|
||||
make(uid) {
|
||||
let that = this;
|
||||
let href = location.href;
|
||||
href = href.indexOf("?") === -1 ? href + "?spread=" + uid : href + "&spread=" + uid;
|
||||
href = href.indexOf("?") === -1 ? href + "?spread=" + uid : href + "&spread=" + uid;
|
||||
uQRCode.make({
|
||||
canvasId: 'qrcode',
|
||||
@@ -1180,45 +1181,6 @@
|
||||
},
|
||||
/**
|
||||
* 生成海报
|
||||
*/
|
||||
// goPoster: function() {
|
||||
// debugger
|
||||
// let that = this;
|
||||
// that.posters = false;
|
||||
|
||||
// that.$set(that, 'canvasStatus', true);
|
||||
// let arr2 = [that.posterbackgd, that.storeImage, that.PromotionCode];
|
||||
|
||||
// // // #ifndef H5
|
||||
// if (that.isDown)
|
||||
// return that.$util.Tips({
|
||||
// title: '正在下载海报,请稍后再试!'
|
||||
// });
|
||||
// // // #endif
|
||||
// uni.getImageInfo({
|
||||
// src: that.PromotionCode,
|
||||
// fail: function(res) {
|
||||
// console.log(res)
|
||||
// // #ifdef H5
|
||||
// return that.$util.Tips({
|
||||
// title: res
|
||||
// });
|
||||
// // #endif
|
||||
// // #ifdef MP
|
||||
// return that.$util.Tips({
|
||||
// title: '小程序二维码需要发布正式版后才能获取到'
|
||||
// });
|
||||
// // #endif
|
||||
// },
|
||||
// success(res) {
|
||||
// console.log('成功',res)
|
||||
// //生成推广海报
|
||||
// that.$util.PosterCanvas(arr2, that.storeInfo.storeName, that.storeInfo.price, function(tempFilePath) {
|
||||
// that.imagePath = tempFilePath;
|
||||
// that.canvasStatus = true;
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
*/
|
||||
goPoster: function() {
|
||||
let that = this;
|
||||
@@ -1232,14 +1194,13 @@
|
||||
let arrImages = [that.posterbackgd, arrImagesUrlTop, that.PromotionCode];
|
||||
let storeName = that.storeInfo.storeName;
|
||||
let price = that.storeInfo.price;
|
||||
setTimeout(() => {
|
||||
setTimeout(() => {
|
||||
that.$util.PosterCanvas(arrImages, storeName, price, that.storeInfo.otPrice,function(tempFilePath) {
|
||||
that.imagePath = tempFilePath;
|
||||
that.canvasStatus = true;
|
||||
});
|
||||
}, 200);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
/*
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user