初始上传
13
addon/pc/source/os/.editorconfig
Executable file
@@ -0,0 +1,13 @@
|
||||
# editorconfig.org
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
90
addon/pc/source/os/.gitignore
vendored
Executable file
@@ -0,0 +1,90 @@
|
||||
# Created by .ignore support plugin (hsz.mobi)
|
||||
### Node template
|
||||
# Logs
|
||||
/logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# TypeScript v1 declaration files
|
||||
typings/
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variables file
|
||||
.env
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
|
||||
# next.js build output
|
||||
.next
|
||||
|
||||
# nuxt.js build output
|
||||
.nuxt
|
||||
|
||||
# Nuxt generate
|
||||
dist
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# Serverless directories
|
||||
.serverless
|
||||
|
||||
# IDE / Editor
|
||||
.idea
|
||||
|
||||
# Service worker
|
||||
sw.*
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
# Vim swap files
|
||||
*.swp
|
||||
69
addon/pc/source/os/README.md
Executable file
@@ -0,0 +1,69 @@
|
||||
# nuxt
|
||||
|
||||
## Build Setup
|
||||
|
||||
```bash
|
||||
# install dependencies
|
||||
$ npm install
|
||||
|
||||
# serve with hot reload at localhost:3000
|
||||
$ npm run dev
|
||||
|
||||
# build for production and launch server
|
||||
$ npm run build
|
||||
$ npm run start
|
||||
|
||||
# generate static project
|
||||
$ npm run generate
|
||||
```
|
||||
|
||||
For detailed explanation on how things work, check out the [documentation](https://nuxtjs.org).
|
||||
|
||||
## Special Directories
|
||||
|
||||
You can create the following extra directories, some of which have special behaviors. Only `pages` is required; you can delete them if you don't want to use their functionality.
|
||||
|
||||
### `assets`
|
||||
|
||||
The assets directory contains your uncompiled assets such as Stylus or Sass files, images, or fonts.
|
||||
|
||||
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/assets).
|
||||
|
||||
### `components`
|
||||
|
||||
The components directory contains your Vue.js components. Components make up the different parts of your page and can be reused and imported into your pages, layouts and even other components.
|
||||
|
||||
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/components).
|
||||
|
||||
### `layouts`
|
||||
|
||||
Layouts are a great help when you want to change the look and feel of your Nuxt app, whether you want to include a sidebar or have distinct layouts for mobile and desktop.
|
||||
|
||||
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/layouts).
|
||||
|
||||
|
||||
### `pages`
|
||||
|
||||
This directory contains your application views and routes. Nuxt will read all the `*.vue` files inside this directory and setup Vue Router automatically.
|
||||
|
||||
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/get-started/routing).
|
||||
|
||||
### `plugins`
|
||||
|
||||
The plugins directory contains JavaScript plugins that you want to run before instantiating the root Vue.js Application. This is the place to add Vue plugins and to inject functions or constants. Every time you need to use `Vue.use()`, you should create a file in `plugins/` and add its path to plugins in `nuxt.config.js`.
|
||||
|
||||
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/plugins).
|
||||
|
||||
### `static`
|
||||
|
||||
This directory contains your static files. Each file inside this directory is mapped to `/`.
|
||||
|
||||
Example: `/static/robots.txt` is mapped as `/robots.txt`.
|
||||
|
||||
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/static).
|
||||
|
||||
### `store`
|
||||
|
||||
This directory contains your Vuex store files. Creating a file in this directory automatically activates Vuex.
|
||||
|
||||
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/store).
|
||||
12
addon/pc/source/os/api/addon.js
Executable file
@@ -0,0 +1,12 @@
|
||||
import http from "../utils/http"
|
||||
|
||||
/**
|
||||
* 插件是否存在
|
||||
* @param {object} params
|
||||
*/
|
||||
export function addonisexit(params) {
|
||||
return http({
|
||||
url: "/api/addon/addonisexit",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
22
addon/pc/source/os/api/address.js
Executable file
@@ -0,0 +1,22 @@
|
||||
import http from "../utils/http"
|
||||
|
||||
/**
|
||||
* 地址
|
||||
* @param {object} params
|
||||
*/
|
||||
export function getArea(params) {
|
||||
return http({
|
||||
url: "/api/address/lists",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地区
|
||||
*/
|
||||
export function getCity(params) {
|
||||
return http({
|
||||
url: "/api/address/city",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
86
addon/pc/source/os/api/auth/login.js
Executable file
@@ -0,0 +1,86 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 登录
|
||||
*/
|
||||
export function login(params) {
|
||||
return http({
|
||||
url: "/api/login/login",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机号登录
|
||||
* @param params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function mobile_login(params) {
|
||||
return http({
|
||||
url: "/api/login/mobile",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取短信动态码
|
||||
*/
|
||||
export function mobileCode(params) {
|
||||
return http({
|
||||
url: "/api/login/mobileCode",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置密码
|
||||
*/
|
||||
export function rePass(params) {
|
||||
return http({
|
||||
url: "/api/findpassword/mobile",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 下一步
|
||||
*/
|
||||
export function nextStep(params) {
|
||||
return http(
|
||||
{
|
||||
url: "/api/member/checkmobile",
|
||||
data: params
|
||||
},
|
||||
-1
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取短信动态码
|
||||
*/
|
||||
export function smsCode(params) {
|
||||
return http({
|
||||
url: "/api/findpassword/mobilecode",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取注册配置
|
||||
*/
|
||||
export function registerConfig(params) {
|
||||
return http({
|
||||
url: "/api/register/config",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取微信绑定手机短信动态码
|
||||
*/
|
||||
export function wechatMobileCode(params) {
|
||||
return http({
|
||||
url: "/api/login/getMobileCode",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
61
addon/pc/source/os/api/auth/register.js
Executable file
@@ -0,0 +1,61 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 获取注册协议
|
||||
*/
|
||||
export function getRegisterAgreement(params) {
|
||||
return http({
|
||||
url: "/api/register/aggrement",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取新人福利
|
||||
*/
|
||||
export function getRegisterReward(params) {
|
||||
return http({
|
||||
url: "/memberregister/api/Config/Config",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 账号密码注册
|
||||
*/
|
||||
export function register(params) {
|
||||
return http({
|
||||
url: "/api/register/username",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机号注册
|
||||
*/
|
||||
export function registerMobile(params) {
|
||||
return http({
|
||||
url: "/api/register/mobile",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取注册短信动态码
|
||||
*/
|
||||
export function registerMobileCode(params) {
|
||||
return http({
|
||||
url: "/api/register/mobileCode",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册配置
|
||||
*/
|
||||
export function registerConfig(params) {
|
||||
return http({
|
||||
url: "/api/register/config",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
12
addon/pc/source/os/api/bundling.js
Executable file
@@ -0,0 +1,12 @@
|
||||
import http from "../utils/http"
|
||||
|
||||
/**
|
||||
* 组合套餐列表
|
||||
* @param {object} params
|
||||
*/
|
||||
export function bundlingList(params) {
|
||||
return http({
|
||||
url: "/bundling/api/bundling/lists",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
31
addon/pc/source/os/api/cms/article.js
Executable file
@@ -0,0 +1,31 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 获取文章列表
|
||||
*/
|
||||
export function getArticleList(params) {
|
||||
return http({
|
||||
url: "/api/article/page",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文章分类列表
|
||||
*/
|
||||
export function articleCategoryList(params) {
|
||||
return http({
|
||||
url: "/api/article/category",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文章详情
|
||||
*/
|
||||
export function articleDetail(params) {
|
||||
return http({
|
||||
url: "/api/article/info",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
31
addon/pc/source/os/api/cms/help.js
Executable file
@@ -0,0 +1,31 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 获取帮助列表
|
||||
*/
|
||||
export function helpList(params) {
|
||||
return http({
|
||||
url: "/api/helpclass/lists",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取帮助详情
|
||||
*/
|
||||
export function helpDetail(params) {
|
||||
return http({
|
||||
url: "/api/help/info",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取帮助详情
|
||||
*/
|
||||
export function helpOther(params) {
|
||||
return http({
|
||||
url: "/api/help/page",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
21
addon/pc/source/os/api/cms/notice.js
Executable file
@@ -0,0 +1,21 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 获取公告列表
|
||||
*/
|
||||
export function noticesList(params) {
|
||||
return http({
|
||||
url: "/api/notice/page",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取公告详情
|
||||
*/
|
||||
export function noticeDetail(params) {
|
||||
return http({
|
||||
url: "/api/notice/info",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
48
addon/pc/source/os/api/combo.js
Executable file
@@ -0,0 +1,48 @@
|
||||
import http from "../utils/http"
|
||||
|
||||
/**
|
||||
* 获取订单初始化数据
|
||||
* @param {object} params
|
||||
*/
|
||||
export function payment(params) {
|
||||
return http({
|
||||
url: "/bundling/api/ordercreate/payment",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单初始化数据
|
||||
* @param {object} params
|
||||
*/
|
||||
export function calculate(params) {
|
||||
return http({
|
||||
url: "/bundling/api/ordercreate/calculate",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单创建
|
||||
* @param {object} params
|
||||
*/
|
||||
export function orderCreate(params) {
|
||||
return http({
|
||||
url: "/bundling/api/ordercreate/create",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取套餐列表
|
||||
* @param {object} params
|
||||
*/
|
||||
export function detail(params) {
|
||||
return http({
|
||||
url: "/bundling/api/bundling/detail",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
31
addon/pc/source/os/api/coupon.js
Executable file
@@ -0,0 +1,31 @@
|
||||
import http from "../utils/http"
|
||||
|
||||
/**
|
||||
* 优惠券类型列表
|
||||
* @param {object} params
|
||||
*/
|
||||
export function couponTypeList(params) {
|
||||
return http({
|
||||
url: "/coupon/api/coupon/typepagelists",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 领取优惠券
|
||||
* @param {object} params
|
||||
*/
|
||||
export function couponReceive(params) {
|
||||
return http({
|
||||
url: "/coupon/api/coupon/receive",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
export function goodsCoupon(params) {
|
||||
return http({
|
||||
url: "/coupon/api/coupon/goodsCoupon",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
59
addon/pc/source/os/api/goods/cart.js
Executable file
@@ -0,0 +1,59 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 加入购物车
|
||||
* @param {array} params
|
||||
*/
|
||||
export function addToCart(params) {
|
||||
return http({
|
||||
data: params,
|
||||
url: "/api/cart/add",
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 购物车列表
|
||||
* @param {array} params
|
||||
*/
|
||||
export function cartList(params) {
|
||||
return http({
|
||||
data: params,
|
||||
url: "/api/cart/goodslists"
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除购物车
|
||||
* @param {array} params
|
||||
*/
|
||||
export function deleteCart(params) {
|
||||
return http({
|
||||
data: params,
|
||||
url: "/api/cart/delete",
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改购物车数量
|
||||
* @param {array} params
|
||||
*/
|
||||
export function editCartNum(params) {
|
||||
return http({
|
||||
data: params,
|
||||
url: "/api/cart/edit",
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取购物车数量
|
||||
* @param {array} params
|
||||
*/
|
||||
export function getCartCount(params) {
|
||||
return http({
|
||||
data: params,
|
||||
url: "/api/cart/count"
|
||||
})
|
||||
}
|
||||
23
addon/pc/source/os/api/goods/evaluate.js
Executable file
@@ -0,0 +1,23 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 商品评价列表
|
||||
* @param {object} params
|
||||
*/
|
||||
export function goodsEvaluateList(params) {
|
||||
return http({
|
||||
url: "/api/goodsevaluate/page",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品评价数量
|
||||
* @param {object} params
|
||||
*/
|
||||
export function goodsEvaluateCount(params) {
|
||||
return http({
|
||||
url: "/api/goodsevaluate/getgoodsevaluate",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
128
addon/pc/source/os/api/goods/goods.js
Executable file
@@ -0,0 +1,128 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 商品列表
|
||||
* @param {object} params
|
||||
*/
|
||||
export function goodsSkuPage(params) {
|
||||
return http({
|
||||
url: "/api/goodssku/page",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
export function goodsSkuList(params) {
|
||||
return http({
|
||||
url: "/api/goodssku/lists",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品详情
|
||||
* @param {Object} params
|
||||
*/
|
||||
export function goodsSkuDetail(params) {
|
||||
return http({
|
||||
url: "/api/goodssku/detail",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品详情评价权限
|
||||
*/
|
||||
export function evaluateConfig() {
|
||||
return http({
|
||||
url: "/api/goodsevaluate/config",
|
||||
data: {},
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品信息
|
||||
* @param { Object } params
|
||||
*/
|
||||
export function goodsSkuInfo(params) {
|
||||
return http({
|
||||
url: "/api/goodssku/info",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品信息
|
||||
* @param { Object } params
|
||||
*/
|
||||
export function goodsQrcode(params) {
|
||||
return http({
|
||||
url: "/api/goodssku/goodsqrcode",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取满减信息
|
||||
* @param {Object} params
|
||||
*/
|
||||
export function manjian(params) {
|
||||
return http({
|
||||
url: "/manjian/api/manjian/info",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取售后服务
|
||||
* @param {Object} params
|
||||
*/
|
||||
export function aftersale(params) {
|
||||
return http({
|
||||
url: "/api/goods/aftersale",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新商品点击量
|
||||
* @param {Object} params
|
||||
*/
|
||||
export function modifyClicks(params) {
|
||||
return http({
|
||||
url: "/api/goods/modifyclicks",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加商品足迹
|
||||
* @param {Object} params
|
||||
*/
|
||||
export function addGoodsbrowse(params) {
|
||||
return http({
|
||||
url: "/api/goodsbrowse/add",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品推荐列表
|
||||
* @param {object} params
|
||||
*/
|
||||
export function goodsRecommend(params) {
|
||||
return http({
|
||||
url: "/api/goodssku/recommend",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 品牌列表
|
||||
*/
|
||||
export function brandPage(params) {
|
||||
return http({
|
||||
url: "/api/goodsbrand/page",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
37
addon/pc/source/os/api/goods/goods_collect.js
Executable file
@@ -0,0 +1,37 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 是否关注该商品
|
||||
* @param {object} params
|
||||
*/
|
||||
export function isCollect(params) {
|
||||
return http({
|
||||
url: "/api/goodscollect/iscollect",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加商品关注
|
||||
* @param {Object} params
|
||||
*/
|
||||
export function addCollect(params) {
|
||||
return http({
|
||||
url: "/api/goodscollect/add",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品关注
|
||||
* @param {Object} params
|
||||
*/
|
||||
export function deleteCollect(params) {
|
||||
return http({
|
||||
url: "/api/goodscollect/delete",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
43
addon/pc/source/os/api/goods/goodscategory.js
Executable file
@@ -0,0 +1,43 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 获取商品分类树结构
|
||||
*/
|
||||
export function tree(params) {
|
||||
return http({
|
||||
url: "/api/goodscategory/tree",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类信息
|
||||
* @param {Object} params 参数 category_id:1
|
||||
*/
|
||||
export function goodsCategoryInfo(params) {
|
||||
return http({
|
||||
url: "/api/goodscategory/info",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取分类配置
|
||||
*/
|
||||
export function categoryConfig(params) {
|
||||
return http({
|
||||
url: "/api/config/categoryconfig",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类列表
|
||||
* @param {Object} params 参数 level:1
|
||||
*/
|
||||
export function goodsCategoryList(params) {
|
||||
return http({
|
||||
url: "/api/goodscategory/lists",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
84
addon/pc/source/os/api/groupbuy.js
Executable file
@@ -0,0 +1,84 @@
|
||||
import http from "../utils/http"
|
||||
|
||||
/**
|
||||
* 获取订单初始化数据
|
||||
* @param {object} params
|
||||
*/
|
||||
export function payment(params) {
|
||||
return http({
|
||||
url: "/groupbuy/api/ordercreate/payment",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取团购商品详情评价权限
|
||||
*/
|
||||
export function evaluateConfig() {
|
||||
return http({
|
||||
url: "/api/goodsevaluate/config",
|
||||
data: {},
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单初始化数据
|
||||
* @param {object} params
|
||||
*/
|
||||
export function calculate(params) {
|
||||
return http({
|
||||
url: "/groupbuy/api/ordercreate/calculate",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单创建
|
||||
* @param {object} params
|
||||
*/
|
||||
export function orderCreate(params) {
|
||||
return http({
|
||||
url: "/groupbuy/api/ordercreate/create",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品列表
|
||||
* @param {object} params
|
||||
*/
|
||||
export function goodsPage(params) {
|
||||
return http({
|
||||
url: "/groupbuy/api/goods/page",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品详情
|
||||
* @param {object} params
|
||||
*/
|
||||
export function goodsSkuDetail(params) {
|
||||
return http({
|
||||
url: "/groupbuy/api/goods/detail",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品信息
|
||||
* @param {object} params
|
||||
*/
|
||||
export function goodsSkuInfo(params) {
|
||||
return http({
|
||||
url: "/groupbuy/api/goods/info",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
124
addon/pc/source/os/api/member/account.js
Executable file
@@ -0,0 +1,124 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 获取余额基础信息
|
||||
*/
|
||||
export function balance(params) {
|
||||
return http({
|
||||
url: "/api/memberaccount/info",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取提现配置
|
||||
*/
|
||||
export function withdrawConfig(params) {
|
||||
return http({
|
||||
url: "/api/memberwithdraw/config",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取余额明细
|
||||
*/
|
||||
export function balanceDetail(params) {
|
||||
return http({
|
||||
url: "/api/memberaccount/page",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取提现信息
|
||||
*/
|
||||
export function withdrawInfo(params) {
|
||||
return http({
|
||||
url: "/api/memberwithdraw/info",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取银行账号信息
|
||||
*/
|
||||
export function accountInfo(params) {
|
||||
return http({
|
||||
url: "/api/memberbankaccount/defaultinfo",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 提现
|
||||
*/
|
||||
export function withdraw(params) {
|
||||
return http({
|
||||
url: "/api/memberwithdraw/apply",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 提现记录
|
||||
*/
|
||||
export function withdrawList(params) {
|
||||
return http({
|
||||
url: "/api/memberwithdraw/page",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 提现详情
|
||||
*/
|
||||
export function withdrawDetail(params) {
|
||||
return http({
|
||||
url: "/api/memberwithdraw/detail",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值套餐列表
|
||||
*/
|
||||
export function rechargeList(params) {
|
||||
return http({
|
||||
url: "/memberrecharge/api/memberrecharge/page",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值套餐详情
|
||||
*/
|
||||
export function rechargeDetail(params) {
|
||||
return http({
|
||||
url: "/memberrecharge/api/memberrecharge/info",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值
|
||||
*/
|
||||
export function recharge(params) {
|
||||
return http({
|
||||
url: "/memberrecharge/api/ordercreate/create",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值记录
|
||||
*/
|
||||
export function rechargeOrder(params) {
|
||||
return http({
|
||||
url: "/memberrecharge/api/order/page",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
23
addon/pc/source/os/api/member/collection.js
Executable file
@@ -0,0 +1,23 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 我的商品收藏
|
||||
*/
|
||||
export function goodsCollect(params) {
|
||||
return http({
|
||||
url: "/api/goodscollect/page",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消商品收藏
|
||||
*/
|
||||
export function deleteGoods(params) {
|
||||
return http({
|
||||
url: "/api/goodscollect/delete",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
56
addon/pc/source/os/api/member/index.js
Executable file
@@ -0,0 +1,56 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 获取会员基础信息
|
||||
*/
|
||||
export function memberInfo(params) {
|
||||
return http({
|
||||
url: "/api/member/info",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单数量
|
||||
*/
|
||||
export function orderNum(params) {
|
||||
return http({
|
||||
url: "/api/order/num",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 优惠券数量
|
||||
*/
|
||||
export function couponNum(params) {
|
||||
return http({
|
||||
url: "/coupon/api/coupon/num",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 我的足迹
|
||||
*/
|
||||
export function footprint(params) {
|
||||
return http({
|
||||
url: "/api/goodsbrowse/page",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员等级列表
|
||||
*/
|
||||
export function levelList(params) {
|
||||
return http({
|
||||
url: "/api/memberlevel/lists",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
37
addon/pc/source/os/api/member/info.js
Executable file
@@ -0,0 +1,37 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
* @param {object} params
|
||||
*/
|
||||
export function info(params) {
|
||||
return http({
|
||||
url: "/api/member/info",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改昵称
|
||||
* @param {object} params
|
||||
*/
|
||||
export function nickName(params) {
|
||||
return http({
|
||||
url: "/api/member/modifynickname",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改头像
|
||||
* @param {object} params
|
||||
*/
|
||||
export function headImg(params) {
|
||||
return http({
|
||||
url: "/api/member/modifyheadimg",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
159
addon/pc/source/os/api/member/member.js
Executable file
@@ -0,0 +1,159 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 获取会员信息【进入首页调用了,不能控制登录】
|
||||
*/
|
||||
export function memberDetail(params) {
|
||||
return http({
|
||||
url: "/api/member/info",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地址列表
|
||||
*/
|
||||
export function addressList(params) {
|
||||
return http({
|
||||
url: "/api/memberaddress/page",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 设为默认
|
||||
*/
|
||||
export function setDefault(params) {
|
||||
return http({
|
||||
url: "/api/memberaddress/setdefault",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除地址
|
||||
*/
|
||||
export function deleteAddress(params) {
|
||||
return http({
|
||||
url: "/api/memberaddress/delete",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 地址信息
|
||||
*/
|
||||
export function addressInfo(params) {
|
||||
return http({
|
||||
url: "/api/memberaddress/info",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加地址
|
||||
*/
|
||||
export function saveAddress(params) {
|
||||
return http({
|
||||
url: "/api/memberaddress/" + params.url,
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取优惠券列表
|
||||
*/
|
||||
export function couponList(params) {
|
||||
return http({
|
||||
url: "/coupon/api/coupon/memberpage",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 我的足迹
|
||||
*/
|
||||
export function footPrint(params) {
|
||||
return http({
|
||||
url: "/api/goodsbrowse/page",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除时间线
|
||||
*/
|
||||
export function delFootprint(params) {
|
||||
return http({
|
||||
url: "/api/goodsbrowse/delete",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 账户列表
|
||||
*/
|
||||
export function accountList(params) {
|
||||
return http({
|
||||
url: "/api/memberbankaccount/page",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置默认账户
|
||||
*/
|
||||
export function accountDefault(params) {
|
||||
return http({
|
||||
url: "/api/memberbankaccount/setdefault",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除账户
|
||||
*/
|
||||
export function delAccount(params) {
|
||||
return http({
|
||||
url: "/api/memberbankaccount/delete",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取转账方式
|
||||
*/
|
||||
export function transferType(params) {
|
||||
return http({
|
||||
url: "/api/memberwithdraw/transferType",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账户详情
|
||||
*/
|
||||
export function accountDetail(params) {
|
||||
return http({
|
||||
url: "/api/memberbankaccount/info",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存
|
||||
*/
|
||||
export function saveAccount(params) {
|
||||
return http({
|
||||
url: "/api/memberbankaccount/" + params.url,
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
23
addon/pc/source/os/api/member/my_point.js
Executable file
@@ -0,0 +1,23 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 获取积分基础信息
|
||||
*/
|
||||
export function pointInfo(params) {
|
||||
return http({
|
||||
url: "/api/memberaccount/info",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取积分列表
|
||||
*/
|
||||
export function pointList(params) {
|
||||
return http({
|
||||
url: "/api/memberaccount/page",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
122
addon/pc/source/os/api/member/security.js
Executable file
@@ -0,0 +1,122 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
* @param {object} params
|
||||
*/
|
||||
export function passWord(params) {
|
||||
return http({
|
||||
url: "/api/member/modifypassword",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信动态码
|
||||
* @param {object} params
|
||||
*/
|
||||
export function tellCode(params) {
|
||||
return http({
|
||||
url: "/api/member/bindmobliecode",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定手机号
|
||||
* @param {object} params
|
||||
*/
|
||||
export function tell(params) {
|
||||
return http({
|
||||
url: "/api/member/modifymobile",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测邮箱是否存在
|
||||
* @param {object} params
|
||||
*/
|
||||
export function checkEmail(params) {
|
||||
return http({
|
||||
url: "/api/member/checkemail",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送邮箱动态码
|
||||
* @param {object} params
|
||||
*/
|
||||
export function emailCode(params) {
|
||||
return http({
|
||||
url: "/api/member/bingemailcode",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定邮箱
|
||||
* @param {object} params
|
||||
*/
|
||||
export function email(params) {
|
||||
return http({
|
||||
url: "/api/member/modifyemail",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证码验证
|
||||
* @param {object} params
|
||||
*/
|
||||
export function verifyPayPwdCode(params) {
|
||||
return http({
|
||||
url: "/api/member/verifypaypwdcode",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取之前密码
|
||||
* @param {object} params
|
||||
*/
|
||||
export function modifyPayPassword(params) {
|
||||
return http({
|
||||
url: "/api/member/modifypaypassword",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机动态码
|
||||
* @param {object} params
|
||||
*/
|
||||
export function payPwdCode(params) {
|
||||
return http({
|
||||
url: "/api/member/paypwdcode",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机密码动态码
|
||||
* @param {object} params
|
||||
*/
|
||||
export function pwdMoblieCode(params) {
|
||||
return http({
|
||||
url: '/api/member/pwdmobliecode',
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
112
addon/pc/source/os/api/message.js
Executable file
@@ -0,0 +1,112 @@
|
||||
import http from "../utils/http"
|
||||
|
||||
/**
|
||||
* 发送消息
|
||||
* @param {object} params
|
||||
*/
|
||||
export function sendMessage(params) {
|
||||
return http({
|
||||
url: "/servicer/api/chat/say",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送图片
|
||||
* @param {object} params
|
||||
*/
|
||||
export function sendImg(params) {
|
||||
return http({
|
||||
url: "/api/upload/chatimg",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 标识消息已读
|
||||
* @param {object} params
|
||||
*/
|
||||
export function readMessage(params) {
|
||||
return http({
|
||||
url: "/servicer/api/chat/setRead",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
// 绑定客服(客服id,店铺id)client_id,site_id
|
||||
export function bindServicer(params) {
|
||||
return http({
|
||||
url: '/servicer/api/chat/bind',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
// 获取聊天记录
|
||||
export function messageList(params) {
|
||||
return http({
|
||||
url: '/servicer/api/chat/dialogs',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
// 是否在线
|
||||
export function hasServicers(params) {
|
||||
return http({
|
||||
url: '/servicer/api/chat/hasServicers',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
// 获取联系人
|
||||
export function sessionList(params) {
|
||||
return http({
|
||||
url: '/servicer/api/chat/chatList',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
// 获取联系人
|
||||
export function currStore(params) {
|
||||
return http({
|
||||
url: '/api/shop/info',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
// 获取联系人servicer_site_id
|
||||
export function groupList(params) {
|
||||
return http({
|
||||
url: '/servicer/api/servicer/getGroupList',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
// 客服是否在线
|
||||
export function isHaveServicers(params) {
|
||||
return http({
|
||||
url: '/servicer/api/chat/hasServicers',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
//关闭客服
|
||||
export function closeMessage(params) {
|
||||
return http({
|
||||
url: '/servicer/api/chat/bye',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
// 获取关键词
|
||||
export function getKeywords() {
|
||||
return http({
|
||||
url: '/servicer/api/chat/keyword',
|
||||
})
|
||||
}
|
||||
|
||||
// 获取关键词
|
||||
export function getSiteInfo() {
|
||||
return http({
|
||||
url: '/api/site/info',
|
||||
})
|
||||
}
|
||||
126
addon/pc/source/os/api/order/order.js
Executable file
@@ -0,0 +1,126 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 订单列表
|
||||
* @param {object} params
|
||||
*/
|
||||
export function apiOrderList(params) {
|
||||
return http({
|
||||
url: "/api/order/lists",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单支付
|
||||
* @param {object} params
|
||||
*/
|
||||
export function apiOrderPay(params) {
|
||||
return http({
|
||||
url: "/api/order/pay",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单关闭
|
||||
* @param {object} params
|
||||
*/
|
||||
export function apiOrderClose(params) {
|
||||
return http({
|
||||
url: "/api/order/close",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单收货(收到所有货物)
|
||||
* @param {object} params
|
||||
*/
|
||||
export function apiOrderTakedelivery(params) {
|
||||
return http({
|
||||
url: "/api/order/takedelivery",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单详情
|
||||
* @param {object} params
|
||||
*/
|
||||
export function apiOrderDetail(params) {
|
||||
return http({
|
||||
url: "/api/order/detail",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单包裹信息
|
||||
* @param {object} params
|
||||
*/
|
||||
export function apiOrderPackageInfo(params) {
|
||||
return http({
|
||||
url: "/api/order/package",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单评价获取订单信息
|
||||
*/
|
||||
export function orderInfo(params) {
|
||||
return http({
|
||||
url: "/api/order/evluateinfo",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交评价
|
||||
*/
|
||||
export function save(params) {
|
||||
var url = ""
|
||||
if (params.isEvaluate) {
|
||||
url = "/api/goodsevaluate/again"
|
||||
} else {
|
||||
url = "/api/goodsevaluate/add"
|
||||
}
|
||||
|
||||
return http({
|
||||
url: url,
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单收货(收到所有货物)
|
||||
* @param {object} params
|
||||
*/
|
||||
export function apiMemberVirtualTakeDelivery(params) {
|
||||
return http({
|
||||
url: "/api/order/membervirtualtakedelivery",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单删除
|
||||
* @param {object} params
|
||||
*/
|
||||
export function apiOrderDelete(params) {
|
||||
return http({
|
||||
url: "/api/order/delete",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
71
addon/pc/source/os/api/order/payment.js
Executable file
@@ -0,0 +1,71 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 获取订单初始化数据
|
||||
* @param {object} params
|
||||
*/
|
||||
export function payment(params) {
|
||||
return http({
|
||||
url: "/api/ordercreate/payment",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单初始化数据
|
||||
* @param {object} params
|
||||
*/
|
||||
export function calculate(params) {
|
||||
return http({
|
||||
url: "/api/ordercreate/calculate",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单创建
|
||||
* @param {object} params
|
||||
*/
|
||||
export function orderCreate(params) {
|
||||
return http({
|
||||
url: "/api/ordercreate/create",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证支付密码
|
||||
* @param {object} params
|
||||
*/
|
||||
export function checkPayPassword(params) {
|
||||
return http({
|
||||
url: "/api/member/checkpaypassword",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取余额支付配置
|
||||
*/
|
||||
export function balanceConfig() {
|
||||
return http({
|
||||
url: "/api/pay/getBalanceConfig",
|
||||
data: "",
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取优惠券
|
||||
*/
|
||||
export function getCouponList(params) {
|
||||
return http({
|
||||
url: "/api/ordercreate/getcouponlist",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
121
addon/pc/source/os/api/order/refund.js
Executable file
@@ -0,0 +1,121 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 退款数据
|
||||
* @param {object} params
|
||||
*/
|
||||
export function refundData(params) {
|
||||
return http({
|
||||
url: "/api/orderrefund/refundData",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量退款数据
|
||||
* @param {object} params
|
||||
*/
|
||||
export function refundDataBatch(params) {
|
||||
return http({
|
||||
url: "/api/orderrefund/refundDataBatch",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款
|
||||
* @param {object} params
|
||||
*/
|
||||
export function refund(params) {
|
||||
return http({
|
||||
url: "/api/orderrefund/refund",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款详情
|
||||
* @param {object} params
|
||||
*/
|
||||
export function detail(params) {
|
||||
return http({
|
||||
url: "/api/orderrefund/detail",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 退货物流
|
||||
* @param {object} params
|
||||
*/
|
||||
export function delivery(params) {
|
||||
return http({
|
||||
url: "/api/orderrefund/delivery",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 撤销维权
|
||||
* @param {object} params
|
||||
*/
|
||||
export function cancleRefund(params) {
|
||||
return http({
|
||||
url: "/api/orderrefund/cancel",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 平台维权数据
|
||||
* @param {object} params
|
||||
*/
|
||||
export function complainData(params) {
|
||||
return http({
|
||||
url: "/api/ordercomplain/detail",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 平台维权申请
|
||||
* @param {object} params
|
||||
*/
|
||||
export function complain(params) {
|
||||
return http({
|
||||
url: "/api/ordercomplain/complain",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 平台维权撤销
|
||||
* @param {object} params
|
||||
*/
|
||||
export function complainCancel(params) {
|
||||
return http({
|
||||
url: "/api/ordercomplain/cancel",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款列表
|
||||
* @param {object} params
|
||||
*/
|
||||
export function refundList(params) {
|
||||
return http({
|
||||
url: "/api/orderrefund/lists",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
60
addon/pc/source/os/api/order/verification.js
Executable file
@@ -0,0 +1,60 @@
|
||||
import http from "../../utils/http"
|
||||
|
||||
/**
|
||||
* 核销权限
|
||||
* @param {object} params
|
||||
*/
|
||||
export function checkIsVerifier(params) {
|
||||
return http({
|
||||
url: "/api/verify/checkisverifier",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销
|
||||
* @param {object} params
|
||||
*/
|
||||
export function verifyInfo(params) {
|
||||
return http({
|
||||
url: "/api/verify/verifyInfo",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销验证
|
||||
* @param {object} params
|
||||
*/
|
||||
export function verify(params) {
|
||||
return http({
|
||||
url: "/api/verify/verify",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销类型
|
||||
* @param {object} params
|
||||
*/
|
||||
export function getVerifyType(params) {
|
||||
return http({
|
||||
url: "/api/verify/getVerifyType",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销记录
|
||||
* @param {object} params
|
||||
*/
|
||||
export function verifyList(params) {
|
||||
return http({
|
||||
url: "/api/verify/lists",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
84
addon/pc/source/os/api/pay.js
Executable file
@@ -0,0 +1,84 @@
|
||||
import http from "../utils/http"
|
||||
|
||||
/**
|
||||
* 支付详情
|
||||
* @param {object} params
|
||||
*/
|
||||
export function getPayInfo(params) {
|
||||
return http({
|
||||
url: "/api/pay/info",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
* @param {object} params
|
||||
*/
|
||||
export function getPayType(params) {
|
||||
return http({
|
||||
url: "/api/pay/type",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付状态
|
||||
* @param {object} params
|
||||
*/
|
||||
export function checkPayStatus(params) {
|
||||
return http({
|
||||
url: "/api/pay/status",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付状态
|
||||
* @param {object} params
|
||||
*/
|
||||
export function pay(params) {
|
||||
return http({
|
||||
url: "/api/pay/pay",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取线下支付配置
|
||||
*/
|
||||
export function getOfflinepayConfig() {
|
||||
return http({
|
||||
url: "/offlinepay/api/pay/config",
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 线下支付信息
|
||||
* @param {object} params
|
||||
*/
|
||||
export function getOfflinepayPayInfo(params) {
|
||||
return http({
|
||||
url: "/offlinepay/api/pay/info",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 线下支付
|
||||
* @param {object} params
|
||||
*/
|
||||
export function offlinepay(params) {
|
||||
return http({
|
||||
url: "/offlinepay/api/pay/pay",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
42
addon/pc/source/os/api/pc.js
Executable file
@@ -0,0 +1,42 @@
|
||||
import http from "../utils/http"
|
||||
|
||||
/**
|
||||
* 楼层
|
||||
* @param {object} params
|
||||
*/
|
||||
export function floors(params) {
|
||||
return http({
|
||||
url: "/api/pc/floors",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取热门搜索关键词
|
||||
*/
|
||||
export function apiHotSearchWords(params) {
|
||||
return http({
|
||||
url: "/api/goods/hotSearchWords",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取默认搜索关键词
|
||||
*/
|
||||
export function apiDefaultSearchWords(params) {
|
||||
return http({
|
||||
url: "/api/goods/defaultSearchWords",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取首页浮层
|
||||
*/
|
||||
export function floatLayer(params) {
|
||||
return http({
|
||||
url: "/api/pc/floatLayer",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
92
addon/pc/source/os/api/seckill.js
Executable file
@@ -0,0 +1,92 @@
|
||||
import http from "../utils/http"
|
||||
|
||||
/**
|
||||
* 商品列表
|
||||
* @param {object} params
|
||||
*/
|
||||
export function goodsPage(params) {
|
||||
return http({
|
||||
url: "/seckill/api/seckillgoods/page",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品详情
|
||||
* @param {object} params
|
||||
*/
|
||||
export function goodsSkuDetail(params) {
|
||||
return http({
|
||||
url: "/seckill/api/seckillgoods/detail",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 秒杀时间段
|
||||
* @param {object} params
|
||||
*/
|
||||
export function timeList(params) {
|
||||
return http({
|
||||
url: "/seckill/api/seckill/lists",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 秒杀商品信息
|
||||
* @param { Object } params
|
||||
*/
|
||||
export function seckillGoodsInfo(params) {
|
||||
return http({
|
||||
url: "/seckill/api/seckillgoods/info",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单初始化数据
|
||||
* @param {object} params
|
||||
*/
|
||||
export function payment(params) {
|
||||
return http({
|
||||
url: "/seckill/api/ordercreate/payment",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单初始化数据
|
||||
* @param {object} params
|
||||
*/
|
||||
export function calculate(params) {
|
||||
return http({
|
||||
url: "/seckill/api/ordercreate/calculate",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取秒杀商品详情评价权限
|
||||
*/
|
||||
export function evaluateConfig() {
|
||||
return http({
|
||||
url: "/api/goodsevaluate/config",
|
||||
data: {},
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单创建
|
||||
* @param {object} params
|
||||
*/
|
||||
export function orderCreate(params) {
|
||||
return http({
|
||||
url: "/seckill/api/ordercreate/create",
|
||||
data: params,
|
||||
forceLogin: true
|
||||
})
|
||||
}
|
||||
115
addon/pc/source/os/api/website.js
Executable file
@@ -0,0 +1,115 @@
|
||||
import http from "../utils/http"
|
||||
|
||||
/**
|
||||
* 获取网站信息
|
||||
*/
|
||||
export function websiteInfo(params) {
|
||||
return http({
|
||||
url: "/api/site/info",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取版权信息
|
||||
*/
|
||||
export function copyRight(params) {
|
||||
return http({
|
||||
url: "/api/config/copyright",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取wap端二维码
|
||||
*/
|
||||
export function wapQrcode(params) {
|
||||
return http({
|
||||
url: "/api/site/wapqrcode",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
export function siteDefaultFiles(params) {
|
||||
return http({
|
||||
url: "/api/config/defaultimg",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取首页小程序二维码
|
||||
*/
|
||||
export function weQrcode(params) {
|
||||
return http({
|
||||
url: "weapp/api/weapp/qrcode",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 广告图
|
||||
* @param {Object} params 参数
|
||||
*/
|
||||
export function adList(params) {
|
||||
return http({
|
||||
url: "/api/adv/detail",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商家服务
|
||||
*/
|
||||
export function shopServiceLists(params) {
|
||||
return http({
|
||||
url: "/api/goods/service",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 友情链接
|
||||
* @param {Object} params 参数
|
||||
*/
|
||||
export function friendlyLink(params) {
|
||||
return http({
|
||||
url: "/api/pc/friendlyLink",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 导航
|
||||
* @param {Object} params 参数
|
||||
*/
|
||||
export function navList(params) {
|
||||
return http({
|
||||
url: "/api/pc/navList",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取验证码
|
||||
*/
|
||||
export function captcha(params) {
|
||||
return http({
|
||||
url: "/api/captcha/captcha",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
export function getSiteStatus() {
|
||||
return http({
|
||||
url: "/api/site/status"
|
||||
})
|
||||
}
|
||||
|
||||
// 客服打开方式
|
||||
export function shopServiceOpen(params) {
|
||||
return http({
|
||||
url: "/api/config/servicer",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
41
addon/pc/source/os/api/wechat.js
Executable file
@@ -0,0 +1,41 @@
|
||||
import http from "../utils/http"
|
||||
|
||||
/**
|
||||
* 获取微信二维码
|
||||
*/
|
||||
export function loginCode(params) {
|
||||
return http({
|
||||
url: "/wechat/api/wechat/logincode",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测是否扫码
|
||||
*/
|
||||
export function checkLogin(params) {
|
||||
return http({
|
||||
url: "/api/login/checklogin",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信登录绑定手机号
|
||||
*/
|
||||
export function wechatLogin(params) {
|
||||
return http({
|
||||
url: "/api/login/wechatLogin",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测是否可以微信扫码登录
|
||||
*/
|
||||
export function isWechatLogin(params) {
|
||||
return http({
|
||||
url: "/api/config/init",
|
||||
data: params
|
||||
})
|
||||
}
|
||||
23
addon/pc/source/os/assets/css/common/element-variables.scss
Executable file
@@ -0,0 +1,23 @@
|
||||
@import "main.scss";
|
||||
|
||||
/* 改变主题色变量 */
|
||||
$--color-white:#fff;
|
||||
$--color-primary: $base-color !default;
|
||||
$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */
|
||||
$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */
|
||||
$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */
|
||||
$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */
|
||||
$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */
|
||||
$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */
|
||||
$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */
|
||||
$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */
|
||||
$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */
|
||||
$--color-success: $base-color-success !default;
|
||||
$--color-warning: $base-color-warning !default;
|
||||
$--color-danger: $base-color-danger !default;
|
||||
$--color-info: $base-color-info !default;
|
||||
|
||||
/* 改变 icon 字体路径变量,必需 */
|
||||
$--font-path: '~element-ui/lib/theme-chalk/fonts';
|
||||
|
||||
@import "~element-ui/packages/theme-chalk/src/index";
|
||||
5520
addon/pc/source/os/assets/css/common/icondiy.css
Executable file
243
addon/pc/source/os/assets/css/common/iconfont.css
Executable file
@@ -0,0 +1,243 @@
|
||||
@font-face {
|
||||
font-family: "iconfont";
|
||||
src: url('https://cdn3.codesign.qq.com/icons/LOD8r0BMER9RXkg/latest/iconfont.eot?t=1056907098f9743c59852ca6f44325b5'); /* IE9 */
|
||||
src: url('https://cdn3.codesign.qq.com/icons/LOD8r0BMER9RXkg/latest/iconfont.eot?t=1056907098f9743c59852ca6f44325b5#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
||||
url('https://cdn3.codesign.qq.com/icons/LOD8r0BMER9RXkg/latest/iconfont.woff?t=1056907098f9743c59852ca6f44325b5') format('woff2'),
|
||||
url('https://cdn3.codesign.qq.com/icons/LOD8r0BMER9RXkg/latest/iconfont.woff?t=1056907098f9743c59852ca6f44325b5') format('woff'), /* chromeã€firefox */
|
||||
url('https://cdn3.codesign.qq.com/icons/LOD8r0BMER9RXkg/latest/iconfont.ttf?t=1056907098f9743c59852ca6f44325b5') format('truetype'), /* chromeã€firefoxã€operaã€Safari, Android, iOS 4.2+*/
|
||||
url('https://cdn3.codesign.qq.com/icons/LOD8r0BMER9RXkg/latest/iconfont.svg?t=1056907098f9743c59852ca6f44325b5#iconfont') format('svg'); /* iOS 4.1- */
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
font-family: "iconfont" !important;
|
||||
font-size: 16px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-xiaoxi:before {
|
||||
content: "\e048";
|
||||
}
|
||||
.icon-xiaosuo:before {
|
||||
content: "\e049";
|
||||
}
|
||||
.icon-shouzang:before {
|
||||
content: "\e04a";
|
||||
}
|
||||
.icon-_shouzang2:before {
|
||||
content: "\e04b";
|
||||
}
|
||||
.icon-arrow-right:before {
|
||||
content: "\e600";
|
||||
}
|
||||
.icon-icon-test:before {
|
||||
content: "\e601";
|
||||
}
|
||||
.icon-ziyuan:before {
|
||||
content: "\e602";
|
||||
}
|
||||
.icon-arrow-left-copy:before {
|
||||
content: "\e603";
|
||||
}
|
||||
.icon-shangjiazhongxin-:before {
|
||||
content: "\e604";
|
||||
}
|
||||
.icon-404:before {
|
||||
content: "\e605";
|
||||
}
|
||||
.icon-shang:before {
|
||||
content: "\e606";
|
||||
}
|
||||
.icon-daifahuo:before {
|
||||
content: "\e60a";
|
||||
}
|
||||
.icon-icon_naozhong:before {
|
||||
content: "\e60b";
|
||||
}
|
||||
.icon-jiang-copy:before {
|
||||
content: "\e60c";
|
||||
}
|
||||
.icon-tubiaolunkuo-:before {
|
||||
content: "\e60d";
|
||||
}
|
||||
.icon-youxiang1:before {
|
||||
content: "\e610";
|
||||
}
|
||||
.icon-gouwuche:before {
|
||||
content: "\e611";
|
||||
}
|
||||
.icon-shanchu:before {
|
||||
content: "\e612";
|
||||
}
|
||||
.icon-yue:before {
|
||||
content: "\e615";
|
||||
}
|
||||
.icon-chengnuotuihuo1:before {
|
||||
content: "\e616";
|
||||
}
|
||||
.icon-7tiantuihuan:before {
|
||||
content: "\e617";
|
||||
}
|
||||
.icon-xiaoxiebaozheng1:before {
|
||||
content: "\e618";
|
||||
}
|
||||
.icon-fahuo:before {
|
||||
content: "\e619";
|
||||
}
|
||||
.icon-tuangou:before {
|
||||
content: "\e61a";
|
||||
}
|
||||
.icon-shiyanzhongxin:before {
|
||||
content: "\e61b";
|
||||
}
|
||||
.icon-liangxiaoshifahuo:before {
|
||||
content: "\e61c";
|
||||
}
|
||||
.icon-zhengpinbaozheng:before {
|
||||
content: "\e61d";
|
||||
}
|
||||
.icon-shitiyanzheng1:before {
|
||||
content: "\e61e";
|
||||
}
|
||||
.icon-mendian:before {
|
||||
content: "\e628";
|
||||
}
|
||||
.icon-xuanze:before {
|
||||
content: "\e62c";
|
||||
}
|
||||
.icon-dianhua:before {
|
||||
content: "\e62e";
|
||||
}
|
||||
.icon-yewutubiaoqi:before {
|
||||
content: "\e633";
|
||||
}
|
||||
.icon-zhongchaping:before {
|
||||
content: "\e634";
|
||||
}
|
||||
.icon-weibiaoti35:before {
|
||||
content: "\e635";
|
||||
}
|
||||
.icon-dizhi:before {
|
||||
content: "\e636";
|
||||
}
|
||||
.icon-shouji:before {
|
||||
content: "\e638";
|
||||
}
|
||||
.icon-dongtaima:before {
|
||||
content: "\e639";
|
||||
}
|
||||
.icon-shouhou:before {
|
||||
content: "\e63c";
|
||||
}
|
||||
.icon-daifukuan:before {
|
||||
content: "\e63d";
|
||||
}
|
||||
.icon-zhongxinguanli:before {
|
||||
content: "\e63e";
|
||||
}
|
||||
.icon-youxiang:before {
|
||||
content: "\e645";
|
||||
}
|
||||
.icon-daipingjia:before {
|
||||
content: "\e646";
|
||||
}
|
||||
.icon-zhanghuzhuangtai:before {
|
||||
content: "\e64a";
|
||||
}
|
||||
.icon-haoping1:before {
|
||||
content: "\e64c";
|
||||
}
|
||||
.icon-duigou1:before {
|
||||
content: "\e64f";
|
||||
}
|
||||
.icon-hexiao:before {
|
||||
content: "\e650";
|
||||
}
|
||||
.icon-yanzhengma:before {
|
||||
content: "\e651";
|
||||
}
|
||||
.icon-weixin-copy:before {
|
||||
content: "\e65b";
|
||||
}
|
||||
.icon-anquan:before {
|
||||
content: "\e65c";
|
||||
}
|
||||
.icon-arrowLeft:before {
|
||||
content: "\e65d";
|
||||
}
|
||||
.icon-xuanze-duoxuan:before {
|
||||
content: "\e660";
|
||||
}
|
||||
.icon-zheng:before {
|
||||
content: "\e667";
|
||||
}
|
||||
.icon-likefill:before {
|
||||
content: "\e668";
|
||||
}
|
||||
.icon-shouye:before {
|
||||
content: "\e669";
|
||||
}
|
||||
.icon-shoujiyanzheng:before {
|
||||
content: "\e66a";
|
||||
}
|
||||
.icon-like:before {
|
||||
content: "\e66b";
|
||||
}
|
||||
.icon-mima:before {
|
||||
content: "\e66c";
|
||||
}
|
||||
.icon-miaosha1:before {
|
||||
content: "\e66d";
|
||||
}
|
||||
.icon-yanzheng:before {
|
||||
content: "\e678";
|
||||
}
|
||||
.icon-jiazaizhong:before {
|
||||
content: "\e681";
|
||||
}
|
||||
.icon-zhaoshangguanli:before {
|
||||
content: "\e686";
|
||||
}
|
||||
.icon-H:before {
|
||||
content: "\e68f";
|
||||
}
|
||||
.icon-shangjiazhongxin:before {
|
||||
content: "\e690";
|
||||
}
|
||||
.icon-shouji-copy:before {
|
||||
content: "\e694";
|
||||
}
|
||||
.icon-shurutianxiebi:before {
|
||||
content: "\e69f";
|
||||
}
|
||||
.icon-zhanghao:before {
|
||||
content: "\e6b8";
|
||||
}
|
||||
.icon-xiugaidenglumima:before {
|
||||
content: "\e6b9";
|
||||
}
|
||||
.icon-guanbi:before {
|
||||
content: "\e6ba";
|
||||
}
|
||||
.icon-shiyong:before {
|
||||
content: "\e711";
|
||||
}
|
||||
.icon-zhengpinbaozhang2:before {
|
||||
content: "\e722";
|
||||
}
|
||||
.icon-tui1:before {
|
||||
content: "\e738";
|
||||
}
|
||||
.icon-zuji:before {
|
||||
content: "\e755";
|
||||
}
|
||||
.icon-youhuiquan:before {
|
||||
content: "\e8c0";
|
||||
}
|
||||
.icon-hedui:before {
|
||||
content: "\ea53";
|
||||
}
|
||||
.icon-dian:before {
|
||||
content: "\ec1e";
|
||||
}
|
||||
270
addon/pc/source/os/assets/css/common/main.scss
Executable file
@@ -0,0 +1,270 @@
|
||||
// 参考文档:https://element.faas.ele.me/#/zh-CN/component/color#fu-zhu-se
|
||||
|
||||
//主色调,红色:#FF0036,绿色 #4CAF50,蓝色:#03A9F4,黄色:#FF9800,粉色:#FF547B,棕色:#C3A769,浅绿色:#65C4AA,黑色:#333333,紫色:#B323B4,淡粉色:#FF8B8B,element UI:#409eff
|
||||
$base-color: #ff547b;
|
||||
$base-color-success: #4caf50;
|
||||
$base-color-warning: #e6a23c;
|
||||
$base-color-danger: #f56c6c;
|
||||
$base-color-info: #909399;
|
||||
|
||||
/* 文字基本颜色 */
|
||||
$ns-text-color-black: #303133; //基本色
|
||||
|
||||
/* 文字尺寸 */
|
||||
$ns-font-size-sm: 12px;
|
||||
$ns-font-size-base: 14px;
|
||||
$ns-font-size-lg: 16px;
|
||||
|
||||
$width: 1210px;
|
||||
|
||||
// 小
|
||||
.ns-font-size-sm {
|
||||
font-size: $ns-font-size-sm;
|
||||
}
|
||||
|
||||
// 标准
|
||||
.ns-font-size-base {
|
||||
font-size: $ns-font-size-base;
|
||||
}
|
||||
|
||||
// 标准
|
||||
.ns-font-size-lg {
|
||||
font-size: $ns-font-size-lg;
|
||||
}
|
||||
|
||||
//文字颜色
|
||||
.ns-text-color {
|
||||
color: $base-color !important;
|
||||
}
|
||||
|
||||
.ns-text-color-black {
|
||||
color: $ns-text-color-black !important;
|
||||
}
|
||||
|
||||
//边框
|
||||
.ns-border-color {
|
||||
border-color: $base-color !important;
|
||||
}
|
||||
|
||||
//背景色
|
||||
.ns-bg-color {
|
||||
background-color: $base-color !important;
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 1.8;
|
||||
font-family: 'Helvetica Neue', Helvetica, 'Microsoft Yahei', 'PingFang SC', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', sans-serif;
|
||||
background-color: #f9f9f9;
|
||||
font-size: $ns-font-size-base;
|
||||
color: $ns-text-color-black;
|
||||
}
|
||||
|
||||
#__nuxt {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
|
||||
#nprogress .bar {
|
||||
background: $base-color !important; //自定义颜色
|
||||
}
|
||||
|
||||
html,
|
||||
body,
|
||||
dl,
|
||||
dt,
|
||||
dd,
|
||||
ol,
|
||||
ul,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
nav,
|
||||
section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
i,
|
||||
em {
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
// 去掉a标签的默认样式
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: $ns-text-color-black;
|
||||
|
||||
&:hover {
|
||||
color: $base-color;
|
||||
}
|
||||
}
|
||||
|
||||
.el-main {
|
||||
border-top: solid 1px #f2f2f2;
|
||||
overflow: initial;
|
||||
// width: $width;
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.el-button:focus,
|
||||
.el-button:hover {
|
||||
color: $base-color;
|
||||
border-color: lighten($base-color, 20%);
|
||||
background-color: lighten($base-color, 30%);
|
||||
}
|
||||
|
||||
// 改变按钮默认样式
|
||||
.el-button--primary,
|
||||
.el-button--primary:focus,
|
||||
.el-button--primary:hover,
|
||||
.el-button--primary.is-plain:focus,
|
||||
.el-button--primary.is-plain:hover {
|
||||
background-color: $base-color;
|
||||
border-color: $base-color;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.el-button--primary.is-plain {
|
||||
color: $base-color;
|
||||
background-color: transparent;
|
||||
border-color: $base-color;
|
||||
}
|
||||
|
||||
img {
|
||||
border-style: none;
|
||||
max-width: 100%;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
// 居中
|
||||
.ns-text-align {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
// 分页
|
||||
.el-pagination {
|
||||
text-align: right;
|
||||
|
||||
.el-pagination__rightwrapper {
|
||||
margin-left: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 单行超出隐藏 */
|
||||
.using-hidden {
|
||||
word-break: break-all;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 1;
|
||||
-webkit-box-orient: vertical;
|
||||
white-space: break-spaces;
|
||||
}
|
||||
|
||||
/* 多行超出隐藏 */
|
||||
.multi-hidden {
|
||||
word-break: break-all;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
.el-breadcrumb__inner a:hover,
|
||||
.el-breadcrumb__inner.is-link:hover {
|
||||
color: $base-color;
|
||||
}
|
||||
|
||||
.el-tabs__item:hover,
|
||||
.el-tabs__item.is-active {
|
||||
color: $base-color;
|
||||
}
|
||||
|
||||
.el-tabs__active-bar {
|
||||
background-color: $base-color;
|
||||
}
|
||||
|
||||
.el-pager li.active {
|
||||
color: $base-color;
|
||||
}
|
||||
|
||||
.el-pagination.is-background .el-pager li:not(.disabled):hover {
|
||||
color: $base-color;
|
||||
}
|
||||
|
||||
.el-pagination.is-background .el-pager li:not(.disabled).active {
|
||||
background-color: $base-color;
|
||||
}
|
||||
|
||||
.el-menu-item.is-active {
|
||||
color: $base-color;
|
||||
}
|
||||
|
||||
.el-progress-bar__inner {
|
||||
background-color: $base-color;
|
||||
}
|
||||
|
||||
.el-link.el-link--default:hover {
|
||||
color: $base-color;
|
||||
}
|
||||
|
||||
.el-button--text {
|
||||
color: $base-color;
|
||||
}
|
||||
|
||||
.el-input.is-active .el-input__inner,
|
||||
.el-input__inner:focus {
|
||||
border-color: $base-color;
|
||||
}
|
||||
|
||||
.el-loading-spinner .path {
|
||||
stroke: $base-color;
|
||||
}
|
||||
|
||||
.el-loading-spinner i {
|
||||
color: $base-color;
|
||||
}
|
||||
|
||||
.el-loading-spinner .el-loading-text {
|
||||
color: $base-color;
|
||||
}
|
||||
|
||||
.el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner {
|
||||
background-color: $base-color;
|
||||
border-color: $base-color;
|
||||
}
|
||||
|
||||
.el-checkbox__input.is-checked + .el-checkbox__label {
|
||||
color: $base-color;
|
||||
}
|
||||
|
||||
.el-radio__input.is-checked .el-radio__inner {
|
||||
border-color: $base-color;
|
||||
background: $base-color;
|
||||
}
|
||||
.el-textarea__inner:focus{
|
||||
border-color: $base-color;
|
||||
}
|
||||
239
addon/pc/source/os/assets/css/goods/cart.scss
Executable file
@@ -0,0 +1,239 @@
|
||||
.cart {
|
||||
margin: 20px auto;
|
||||
width: $width;
|
||||
|
||||
nav {
|
||||
overflow: hidden;
|
||||
padding: 10px;
|
||||
background: #fff;
|
||||
margin-bottom: 10px;
|
||||
li {
|
||||
float: left;
|
||||
&:nth-child(1) {
|
||||
width: 3%;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
width: 55%;
|
||||
}
|
||||
&:nth-child(3) {
|
||||
width: 10%;
|
||||
}
|
||||
&:nth-child(4) {
|
||||
width: 15%;
|
||||
}
|
||||
&:nth-child(5) {
|
||||
width: 10%;
|
||||
}
|
||||
&:nth-child(6) {
|
||||
width: 7%;
|
||||
}
|
||||
}
|
||||
}
|
||||
.list {
|
||||
.item {
|
||||
margin-bottom: 20px;
|
||||
.head {
|
||||
padding: 10px;
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #eeeeee;
|
||||
a {
|
||||
margin: 0 10px 0 20px;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
overflow: hidden;
|
||||
padding: 10px;
|
||||
background: #fff;
|
||||
li {
|
||||
float: left;
|
||||
line-height: 60px;
|
||||
&:nth-child(1) {
|
||||
width: 3%;
|
||||
margin-left: 20px;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
width: 53.3%;
|
||||
line-height: inherit;
|
||||
.img-wrap {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.info-wrap {
|
||||
margin-left: 70px;
|
||||
cursor: pointer;
|
||||
h5 {
|
||||
font-weight: normal;
|
||||
font-size: $ns-font-size-base;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
margin-right: 10px;
|
||||
&:hover {
|
||||
color: $base-color;
|
||||
}
|
||||
}
|
||||
span {
|
||||
font-size: $ns-font-size-sm;
|
||||
color: #9a9a9a;
|
||||
}
|
||||
}
|
||||
}
|
||||
&:nth-child(3) {
|
||||
width: 10%;
|
||||
}
|
||||
&:nth-child(4) {
|
||||
width: 15%;
|
||||
.el-input-number--mini {
|
||||
width: 100px;
|
||||
}
|
||||
}
|
||||
&:nth-child(5) {
|
||||
width: 10%;
|
||||
}
|
||||
&:nth-child(6) {
|
||||
width: 7%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.lose-list {
|
||||
margin-bottom: 20px;
|
||||
.head {
|
||||
padding: 10px;
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #eeeeee;
|
||||
span {
|
||||
margin: 0 5px;
|
||||
font-weight: bold;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
overflow: hidden;
|
||||
padding: 10px;
|
||||
background: #f0f0f0;
|
||||
li {
|
||||
float: left;
|
||||
line-height: 60px;
|
||||
color: #9a9a9a;
|
||||
&:nth-child(1) {
|
||||
width: 3%;
|
||||
margin-left: 5px;
|
||||
margin-right: 15px;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
width: 53.3%;
|
||||
line-height: inherit;
|
||||
.img-wrap {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.info-wrap {
|
||||
margin-left: 70px;
|
||||
cursor: pointer;
|
||||
h5 {
|
||||
font-weight: normal;
|
||||
font-size: $ns-font-size-base;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
margin-right: 10px;
|
||||
}
|
||||
span {
|
||||
font-size: $ns-font-size-sm;
|
||||
}
|
||||
}
|
||||
}
|
||||
&:nth-child(3) {
|
||||
width: 10%;
|
||||
}
|
||||
&:nth-child(4) {
|
||||
width: 15%;
|
||||
.el-input-number--mini {
|
||||
width: 100px;
|
||||
}
|
||||
}
|
||||
&:nth-child(5) {
|
||||
width: 10%;
|
||||
}
|
||||
&:nth-child(6) {
|
||||
width: 7%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: #fff;
|
||||
margin-bottom: 20px;
|
||||
padding: 10px;
|
||||
.operation {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin-left: 20px;
|
||||
li {
|
||||
float: left;
|
||||
margin-right: 30px;
|
||||
}
|
||||
}
|
||||
.sum-wrap {
|
||||
float: right;
|
||||
.selected-sum {
|
||||
display: inline-block;
|
||||
margin-right: 20px;
|
||||
.total-count {
|
||||
padding: 0 5px;
|
||||
font-size: 16px;
|
||||
color: $base-color;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
.price-wrap {
|
||||
display: inline-block;
|
||||
margin-right: 20px;
|
||||
span {
|
||||
font-size: $ns-font-size-sm;
|
||||
}
|
||||
strong {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.el-button--text {
|
||||
color: #333;
|
||||
&:hover {
|
||||
color: $base-color;
|
||||
}
|
||||
}
|
||||
.empty-wrap {
|
||||
padding: 50px 0 60px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-sizing: border-box;
|
||||
img{
|
||||
width: 400px;
|
||||
height: 244px;
|
||||
}
|
||||
a{
|
||||
font-size: 14px;
|
||||
color: #4A4A4A;
|
||||
&:hover{
|
||||
color: $base-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
1090
addon/pc/source/os/assets/css/goods/detail.scss
Executable file
261
addon/pc/source/os/assets/css/index/index.scss
Executable file
@@ -0,0 +1,261 @@
|
||||
.index-wrap {
|
||||
width: 100%;
|
||||
height: 500px;
|
||||
}
|
||||
|
||||
.index {
|
||||
width: $width;
|
||||
margin: 0 auto;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
|
||||
.border-right {
|
||||
border-right: 1px solid #f5f5f5;
|
||||
}
|
||||
|
||||
.border-bottom {
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
}
|
||||
|
||||
.banner {
|
||||
height: 430px;
|
||||
width: 100%;
|
||||
.el-carousel__indicators--horizontal{
|
||||
padding-left: 240px;
|
||||
}
|
||||
.el-image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.index-content-wrap {
|
||||
width: $width;
|
||||
margin: auto;
|
||||
// 中部广告位
|
||||
.adv-middle{
|
||||
display: flex;
|
||||
margin-top: 30px;
|
||||
.adv-middle-item{
|
||||
margin-right: 15px;
|
||||
height: 210px;
|
||||
// flex: 1;
|
||||
transition: all 0.2s linear 0s;
|
||||
cursor: pointer;
|
||||
.el-image{
|
||||
height: 210px;
|
||||
}
|
||||
&:last-of-type{
|
||||
margin-right: 0;
|
||||
}
|
||||
&:hover{
|
||||
z-index: 2;
|
||||
box-shadow: rgb(0 0 0 / 10%) 0 15px 30px;
|
||||
transform: translate3d(0px, -2px, 0px);
|
||||
}
|
||||
img{
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 广告
|
||||
.ad-wrap {
|
||||
width: $width;
|
||||
margin: 20px auto;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
> div {
|
||||
width: calc((100% - 15px) / 2);
|
||||
height: 372px;
|
||||
}
|
||||
|
||||
.ad-big {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.ad-big-img {
|
||||
width: calc((100% - 15px) / 2);
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.ad-small {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.ad-small-img {
|
||||
width: calc((100% - 15px) / 2);
|
||||
height: calc((100% - 15px) / 2);
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 限时秒杀
|
||||
.seckill-wrap {
|
||||
height: 376px;
|
||||
width: $width;
|
||||
background-color: #ffffff;
|
||||
margin: 20px auto;
|
||||
border: 1px solid #e9e9e9;
|
||||
}
|
||||
|
||||
.seckill-time {
|
||||
width: 100%;
|
||||
height: 45px;
|
||||
line-height: 44px;
|
||||
border-bottom: 1px solid #e9e9e9;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 0 20px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.seckill-time-left {
|
||||
color: #383838;
|
||||
|
||||
i,
|
||||
.seckill-time-title {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.seckill-time-title {
|
||||
margin-right: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.count-down {
|
||||
display: inline-block;
|
||||
margin-left: 7px;
|
||||
}
|
||||
|
||||
.seckill-time-right {
|
||||
color: #838383;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.seckill-content {
|
||||
padding: 20px 20px 0;
|
||||
}
|
||||
|
||||
.seamless-warp2 {
|
||||
overflow: hidden;
|
||||
|
||||
ul.item {
|
||||
li {
|
||||
float: left;
|
||||
width: 250px;
|
||||
padding: 0 25px;
|
||||
box-sizing: border-box;
|
||||
border-right: 1px solid #f1f1f1;
|
||||
|
||||
.seckill-goods {
|
||||
cursor: pointer;
|
||||
|
||||
.seckill-goods-img {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
}
|
||||
img {
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
> p {
|
||||
line-height: 24px;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.seckill-price-wrap {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
margin-top: 10px;
|
||||
|
||||
p span {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.primary-price {
|
||||
text-decoration: line-through;
|
||||
color: #838383;
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.floor {
|
||||
width: $width;
|
||||
margin: 20px auto;
|
||||
|
||||
.floor_item {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.floatLayer-wrap {
|
||||
position: fixed;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
left: 0;
|
||||
top: 0;
|
||||
background: rgba($color: #000000, $alpha: 0.5);
|
||||
z-index: 999;
|
||||
|
||||
.floatLayer {
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: 999;
|
||||
cursor: pointer;
|
||||
.img-wrap {
|
||||
width: 456px;
|
||||
height: 274px;
|
||||
line-height: 274px;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
img{
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
i {
|
||||
color: #ffffff;
|
||||
font-size: 30px;
|
||||
position: absolute;
|
||||
top: -30px;
|
||||
right: -30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 悬浮搜索
|
||||
.fixed-box {
|
||||
width: 100vw;
|
||||
background-color: #ffffff;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 999;
|
||||
border-bottom: 2px solid $base-color;
|
||||
}
|
||||
354
addon/pc/source/os/assets/css/order/payment.scss
Executable file
@@ -0,0 +1,354 @@
|
||||
.payment-wrap {
|
||||
width: 1210px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
.item-block {
|
||||
padding: 0 15px 1px;
|
||||
margin: 10px 0;
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
background: #ffffff;
|
||||
.block-text {
|
||||
border-color: #eeeeee;
|
||||
color: $ns-text-color-black;
|
||||
padding: 7px 0;
|
||||
border-bottom: 1px;
|
||||
}
|
||||
.box {
|
||||
.liuyan-text {
|
||||
background-color: #f7f7f7;
|
||||
border: 2px solid #dadada;
|
||||
height: 56px;
|
||||
width: 80%;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
border-radius: 4px;
|
||||
}
|
||||
}
|
||||
.jifen-price {
|
||||
font-weight: bold;
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
.padd-bom-10 {
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.padd-bom-20 {
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
//收货地址
|
||||
.address-desc {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
}
|
||||
.address-item {
|
||||
width: 23%;
|
||||
border: 3px solid #eee;
|
||||
box-sizing: border-box;
|
||||
margin: 1%;
|
||||
height: 150px;
|
||||
cursor: pointer;
|
||||
float: left;
|
||||
|
||||
.add-address {
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
line-height: 120px;
|
||||
}
|
||||
.address-info {
|
||||
padding: 10px;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
.options {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 10px;
|
||||
width: 50%;
|
||||
text-align: right;
|
||||
div {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
color: #999999;
|
||||
}
|
||||
}
|
||||
.address-name {
|
||||
color: $base-color;
|
||||
padding: 0 0 6px;
|
||||
border-bottom: 1px solid #eee;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
padding-right: 71px;
|
||||
box-sizing: border-box;
|
||||
line-height: 25px;
|
||||
}
|
||||
.address-mobile {
|
||||
padding: 10px 0 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.address-item.active {
|
||||
background-color: #fffbf9;
|
||||
border-color: $base-color;
|
||||
}
|
||||
|
||||
//支付方式
|
||||
.pay-type-list {
|
||||
padding: 20px 0;
|
||||
}
|
||||
.distribution {
|
||||
color: #ff547b;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.pay-type-item {
|
||||
background-color: white;
|
||||
display: inline-block;
|
||||
border: 2px solid #eeeeee;
|
||||
padding: 5px 20px;
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.pay-type-item.active {
|
||||
border-color: $base-color;
|
||||
}
|
||||
.mobile-wrap {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
//商品列表
|
||||
.goods-list {
|
||||
padding: 15px 0;
|
||||
|
||||
.store-icon {
|
||||
margin-right: 5px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.shop-icon {
|
||||
font-size: 18px;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
.goods-info-left {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
float: left;
|
||||
.goods-img {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
}
|
||||
.goods-info-right {
|
||||
float: left;
|
||||
height: 60px;
|
||||
margin-left: 10px;
|
||||
color: $base-color;
|
||||
width: 80%;
|
||||
.goods-name {
|
||||
line-height: 20px;
|
||||
padding-top: 10px;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
}
|
||||
.goods-spec {
|
||||
color: #999;
|
||||
span{
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.goods-footer {
|
||||
background-color: #f3fbfe;
|
||||
padding: 10px;
|
||||
margin-top: 10px;
|
||||
.goods-footer-right {
|
||||
width: 50%;
|
||||
float: left;
|
||||
}
|
||||
.goods-footer-left {
|
||||
width: 50%;
|
||||
float: left;
|
||||
}
|
||||
.order-cell {
|
||||
cursor: pointer;
|
||||
.tit {
|
||||
padding: 5px 0 0 0;
|
||||
}
|
||||
}
|
||||
.express-item {
|
||||
margin-top: 5px;
|
||||
display: inline-block;
|
||||
border: 2px solid #eeeeee;
|
||||
padding: 3px 10px;
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.express-item.active {
|
||||
border-color: $base-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.promotion-show {
|
||||
color: #999;
|
||||
}
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
//统计
|
||||
.order-statistics {
|
||||
float: right;
|
||||
padding: 10px;
|
||||
// color: #999;
|
||||
}
|
||||
.order-submit {
|
||||
float: right;
|
||||
padding: 10px;
|
||||
}
|
||||
.order-money {
|
||||
display: inline-block;
|
||||
margin-right: 20px;
|
||||
div {
|
||||
display: inline-block;
|
||||
font-size: $ns-font-size-lg;
|
||||
}
|
||||
}
|
||||
|
||||
.buyer-message.el-textarea {
|
||||
width: 400px;
|
||||
}
|
||||
.address-open {
|
||||
cursor: pointer;
|
||||
font-size: 13px;
|
||||
padding: 0 0 10px 10px;
|
||||
}
|
||||
.pay-password-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.pay-password {
|
||||
width: 80%;
|
||||
}
|
||||
.pay-password.hide-password {
|
||||
position: fixed;
|
||||
top: -9999px;
|
||||
}
|
||||
.platform-coupon {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.forget-password {
|
||||
text-align: right;
|
||||
margin-right: 45px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.disabled-selected-wrap {
|
||||
pointer-events: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.cursor-pointer {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
//发票样式
|
||||
.invoice-information {
|
||||
.invoice-type-box {
|
||||
display: inline-block;
|
||||
padding: 10px 0;
|
||||
vertical-align: bottom;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
&.invoice-title-box {
|
||||
margin-right: 100px;
|
||||
}
|
||||
.invoice-name {
|
||||
margin-right: 25px;
|
||||
}
|
||||
.invoice-to-type {
|
||||
display: inline-block;
|
||||
margin-right: 30px;
|
||||
position: relative;
|
||||
// i{
|
||||
// width: 17px;
|
||||
// height: 17px;
|
||||
// display: inline-block;
|
||||
// position: absolute;
|
||||
// border-radius: 34px;
|
||||
// overflow: hidden;
|
||||
// top: 7px;
|
||||
// left:-1px;
|
||||
// background: #fff;
|
||||
// background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbUlEQVQ4jYXTsUvVURQH8I8PE1zKTdcEK7I/wNkkKpGgxNaGBqUQ3JT2xoQoaajmhhTEgoig1V0QdQiaCgTxJRK4PDlybtwe+vzCDw7n+/3ee+75ndPVmpzXhut4jDu4nNQPfMFbbNbyRhX34BW+YxdTuJTfw8wF9wa9xdRdmT/jD66g2VbVRn5LeI813MVRqWARB5g8xVyjmZq46EV5wjAe4BFaKR7CchqaGQ8l10pteIa7s2FLeWrgKtbRV918H6MYwXZqX4Y3KriN1Ur8vM1c0JdcwafwxgGD2KqIsQ49uFXFUclgo4P4PPSUvxBDcq0Sf+tg/FrFUfnPRk7YvYp4hv1TzPvJFYzHZXHAO8zgYhJb2e2VnI2DjEeqXoV2Nka77MJrDOSQlFk4C134iN94Upo4l6cGEbN/FoIrmvD8W6ajfNMv7GABN3Ahux1x5IKLpZpIz3/bGImnOXH9edMh9vAhczcxjb8nDhwDyjpTCJDO1nsAAAAASUVORK5CYII=);
|
||||
// background-size: 100% 100%;
|
||||
// }
|
||||
i {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
display: inline-block;
|
||||
border-radius: 34px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
vertical-align: text-bottom;
|
||||
border: 1px solid #999;
|
||||
&.active {
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbUlEQVQ4jYXTsUvVURQH8I8PE1zKTdcEK7I/wNkkKpGgxNaGBqUQ3JT2xoQoaajmhhTEgoig1V0QdQiaCgTxJRK4PDlybtwe+vzCDw7n+/3ee+75ndPVmpzXhut4jDu4nNQPfMFbbNbyRhX34BW+YxdTuJTfw8wF9wa9xdRdmT/jD66g2VbVRn5LeI813MVRqWARB5g8xVyjmZq46EV5wjAe4BFaKR7CchqaGQ8l10pteIa7s2FLeWrgKtbRV918H6MYwXZqX4Y3KriN1Ur8vM1c0JdcwafwxgGD2KqIsQ49uFXFUclgo4P4PPSUvxBDcq0Sf+tg/FrFUfnPRk7YvYp4hv1TzPvJFYzHZXHAO8zgYhJb2e2VnI2DjEeqXoV2Nka77MJrDOSQlFk4C134iN94Upo4l6cGEbN/FoIrmvD8W6ajfNMv7GABN3Ahux1x5IKLpZpIz3/bGImnOXH9edMh9vAhczcxjb8nDhwDyjpTCJDO1nsAAAAASUVORK5CYII=);
|
||||
background-size: 100% 100%;
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
input {
|
||||
vertical-align: middle;
|
||||
margin: 0;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
}
|
||||
}
|
||||
.invoice-box-form {
|
||||
display: inline-block;
|
||||
input {
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
margin-right: 20px;
|
||||
border: 1px solid #dddddd;
|
||||
padding-left: 10px;
|
||||
border-radius: 3px;
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.invoice-condition {
|
||||
padding: 10px 0;
|
||||
.invoice-name {
|
||||
margin-right: 25px;
|
||||
}
|
||||
.invoice-box-form {
|
||||
display: inline-block;
|
||||
.option-item {
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
&.active {
|
||||
color: #ff547b;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.invoice-tops{
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
937
addon/pc/source/os/assets/css/promotion/detail_groupbuy.scss
Executable file
@@ -0,0 +1,937 @@
|
||||
.el-main{
|
||||
.detail-nav-wrap{
|
||||
background-color: #f8f8f8;
|
||||
.detail-nav{
|
||||
margin: auto;
|
||||
width: 1210px;
|
||||
height: 54px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.iconfont{
|
||||
margin: 0 8px;
|
||||
}
|
||||
span{
|
||||
color: #666;
|
||||
&:last-of-type{
|
||||
color: $base-color;
|
||||
}
|
||||
}
|
||||
.goods-name{
|
||||
display: inline-block;
|
||||
width: 150px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail-main {
|
||||
background: #fff;
|
||||
padding-top: 20px;
|
||||
}
|
||||
.goods-detail {
|
||||
overflow: hidden;
|
||||
margin: 0 auto;
|
||||
width: 1210px;
|
||||
|
||||
.preview-wrap {
|
||||
display: flex;
|
||||
float: left;
|
||||
.video-player-wrap {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
.video-player {
|
||||
visibility: hidden;
|
||||
> div {
|
||||
width: 356px;
|
||||
height: 356px;
|
||||
display: none;
|
||||
}
|
||||
.vjs-control-bar,
|
||||
.vjs-big-play-button {
|
||||
visibility: hidden;
|
||||
transition: none;
|
||||
}
|
||||
.vjs-big-play-button {
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
}
|
||||
|
||||
.media-mode {
|
||||
position: absolute;
|
||||
width: 356px;
|
||||
z-index: 5;
|
||||
bottom: 0;
|
||||
top: 300px;
|
||||
text-align: center;
|
||||
line-height: 25px;
|
||||
|
||||
span {
|
||||
background: rgba(100, 100, 100, 0.6);
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
line-height: 25px;
|
||||
border-radius: 10px;
|
||||
padding: 0 15px;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
|
||||
&:last-child {
|
||||
margin-left: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.show {
|
||||
.video-player,
|
||||
.vjs-control-bar,
|
||||
.vjs-big-play-button {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.video-player {
|
||||
> div {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
.media-mode {
|
||||
top: initial;
|
||||
bottom: 50px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.magnifier-wrap {
|
||||
width: 460px;
|
||||
height: 460px;
|
||||
border: 1px solid #d8d8d8;
|
||||
box-sizing: border-box;
|
||||
.magnifier-box .mouse-cover {
|
||||
background-color: #fede4f;
|
||||
opacity: 0.4;
|
||||
}
|
||||
}
|
||||
|
||||
.spec-items {
|
||||
margin-left: 10px;
|
||||
position: relative;
|
||||
width: 84px;
|
||||
height: 460px;
|
||||
overflow: hidden;
|
||||
> span {
|
||||
cursor: pointer;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 84px;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
background: #fff;
|
||||
color: #838383;
|
||||
z-index: 1;
|
||||
font-size: 25px;
|
||||
&:first-of-type{
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
&:last-of-type{
|
||||
top: calc(100% - 42px);
|
||||
}
|
||||
}
|
||||
ul {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
height: 500%;
|
||||
position: absolute;
|
||||
top: 48px;
|
||||
li {
|
||||
width: 84px;
|
||||
height: 84px;
|
||||
overflow: hidden;
|
||||
margin-bottom: 10px;
|
||||
border: 1px solid #DADADA;
|
||||
cursor: pointer;
|
||||
opacity: 0.5;
|
||||
box-sizing: border-box;
|
||||
&:hover,
|
||||
&.selected {
|
||||
opacity: 1;
|
||||
border-color: $base-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.share-collect {
|
||||
padding: 10px 0 20px;
|
||||
cursor: pointer;
|
||||
text-align: right;
|
||||
color: #838383;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
a{
|
||||
color: #838383;
|
||||
}
|
||||
i,
|
||||
span {
|
||||
vertical-align: middle;
|
||||
}
|
||||
i {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.basic-info-wrap {
|
||||
float: left;
|
||||
width: calc(100% - 589px);
|
||||
margin-left: 30px;
|
||||
h1 {
|
||||
font-size: 20px;
|
||||
font-weight: normal;
|
||||
color: #333;
|
||||
line-height: 1.5;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
.desc {
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
margin: 5px 0 12px;
|
||||
}
|
||||
.divider {
|
||||
margin: 10px 0;
|
||||
border: 0;
|
||||
border-top: 1px dotted #e5e5e5;
|
||||
}
|
||||
.discount-banner {
|
||||
margin-top: 5px;
|
||||
background: url(~/assets/images/goods/discount_bg.png) no-repeat;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.activity-name {
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
height: 40px;
|
||||
|
||||
i {
|
||||
display: inline-block;
|
||||
line-height: 40px;
|
||||
}
|
||||
span {
|
||||
display: inline-block;
|
||||
line-height: 40px;
|
||||
vertical-align: top;
|
||||
}
|
||||
}
|
||||
.discount-icon {
|
||||
margin: 0 8px 0 10px;
|
||||
color: #fff;
|
||||
font-size: 20px;
|
||||
}
|
||||
.surplus-time {
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
float: right;
|
||||
height: 35px;
|
||||
line-height: 35px;
|
||||
padding-right: 5px;
|
||||
text-align: right;
|
||||
> span {
|
||||
margin-right: 5px;
|
||||
}
|
||||
i {
|
||||
font-style: normal;
|
||||
padding: 2px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: 0 5px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.count-down {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
}
|
||||
.item-block {
|
||||
background-color: #f8f8f8;
|
||||
padding: 15px 0;
|
||||
position: relative;
|
||||
background-size: cover;
|
||||
min-height: 62px;
|
||||
margin-bottom: 20px;
|
||||
.statistical {
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 16px;
|
||||
li {
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
font-size: 14px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
&:first-child {
|
||||
margin-right: 40px;
|
||||
}
|
||||
|
||||
p {
|
||||
color: #838383;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #383838;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.item-line {
|
||||
font-size: 14px;
|
||||
min-height: 35px;
|
||||
line-height: 35px;
|
||||
display: flex;
|
||||
padding-left: 20px;
|
||||
margin-bottom: 10px;
|
||||
dt {
|
||||
display: inline-block;
|
||||
width: 50px;
|
||||
height: 35px;
|
||||
line-height: 35px;
|
||||
text-align: justify;
|
||||
font-size: 12px;
|
||||
margin-right: 16px;
|
||||
color: #222;
|
||||
flex-shrink: 0;
|
||||
&::after {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
content: '';
|
||||
height: 0;
|
||||
}
|
||||
}
|
||||
> * {
|
||||
height: inherit;
|
||||
line-height: inherit;
|
||||
font-size: 14px;
|
||||
}
|
||||
> dd {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 35px;
|
||||
}
|
||||
&:last-of-type{
|
||||
margin-bottom: 0;
|
||||
}
|
||||
&:first-of-type > dd{
|
||||
align-items: baseline;
|
||||
}
|
||||
.yuan {
|
||||
font-size: 18px;
|
||||
}
|
||||
.price {
|
||||
font-size: 30px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.market-yuan {
|
||||
font-size: 14px;
|
||||
text-decoration: line-through;
|
||||
}
|
||||
.member_price {
|
||||
font-size: 14px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
.market-price {
|
||||
font-size: 14px;
|
||||
margin-left: 5px;
|
||||
text-decoration: line-through;
|
||||
}
|
||||
&.promotion-price .label {
|
||||
line-height: initial;
|
||||
font-size: 18px;
|
||||
background: transparent;
|
||||
padding: 0;
|
||||
vertical-align: text-bottom;
|
||||
}
|
||||
&.coupon-list {
|
||||
align-items: baseline;
|
||||
> div {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
dd {
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
p {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
line-height: 18px;
|
||||
}
|
||||
span {
|
||||
display: inline-block;
|
||||
padding: 0 10px;
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
border: 1px solid $base-color;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
color: $base-color;
|
||||
font-size: 14px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
label {
|
||||
line-height: 16px;
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
top: 1px;
|
||||
}
|
||||
}
|
||||
&.manjian {
|
||||
align-items: end;
|
||||
}
|
||||
&.manjian span {
|
||||
// padding: 2px 10px;
|
||||
font-size: 12px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
&.delivery {
|
||||
position: relative;
|
||||
i {
|
||||
margin-left: 5px;
|
||||
}
|
||||
dd{
|
||||
align-items: center;
|
||||
}
|
||||
.region-selected {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
margin: 0 5px 0 0;
|
||||
width: auto;
|
||||
padding: 0 10px;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
border: 1px solid #e5e5e5;
|
||||
z-index: 2;
|
||||
font-size: 14px;
|
||||
}
|
||||
.region-list {
|
||||
width: 466px;
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
top: 35px;
|
||||
left: 82px;
|
||||
background: #fff;
|
||||
border: 1px solid #e5e5e5;
|
||||
padding: 15px;
|
||||
line-height: 18px;
|
||||
height: auto;
|
||||
display: none;
|
||||
font-size: 14px;
|
||||
&.hide{
|
||||
display: none !important;
|
||||
}
|
||||
.nav-tabs {
|
||||
border-bottom: 2px solid $base-color;
|
||||
height: 30px;
|
||||
> li {
|
||||
margin-bottom: -2px;
|
||||
float: left;
|
||||
> div {
|
||||
padding: 4px 8px;
|
||||
border: 2px solid transparent;
|
||||
height: 20px;
|
||||
display: inline-block;
|
||||
line-height: 20px;
|
||||
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1);
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
border-color: transparent;
|
||||
}
|
||||
}
|
||||
&.active {
|
||||
> div {
|
||||
color: $base-color;
|
||||
border: 2px solid;
|
||||
border-bottom-color: #fff !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.tab-content {
|
||||
> .active {
|
||||
padding: 10px 0;
|
||||
}
|
||||
> .tab-pane {
|
||||
display: none;
|
||||
&.active {
|
||||
display: block;
|
||||
}
|
||||
li {
|
||||
float: left;
|
||||
width: 25%;
|
||||
line-height: 30px;
|
||||
&.selected {
|
||||
color: $base-color;
|
||||
}
|
||||
span {
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
color: $base-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dd:hover {
|
||||
.region-list {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.service a {
|
||||
margin: 0 5px;
|
||||
}
|
||||
&.buy-btn {
|
||||
margin: 25px 0 0;
|
||||
dt{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
dd{
|
||||
height: auto;
|
||||
}
|
||||
button {
|
||||
min-width: 168px;
|
||||
height: 52px;
|
||||
margin-right: 10px;
|
||||
font-size: 20px;
|
||||
text-shadow: 0 0 0;
|
||||
border-radius: 0;
|
||||
&[disabled] {
|
||||
cursor: not-allowed;
|
||||
pointer-events: initial;
|
||||
border: 1px solid;
|
||||
opacity: 1;
|
||||
}
|
||||
i {
|
||||
margin-right: 5px;
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.i-activity-flag {
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
padding: 0 8px;
|
||||
border: 1px solid;
|
||||
font-size: 14px;
|
||||
margin-right: 5px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
&.gift-point strong {
|
||||
font-size: 14px;
|
||||
}
|
||||
&.merchant-service {
|
||||
overflow: hidden;
|
||||
margin: 10px 0;
|
||||
align-items: flex-start;
|
||||
> div {
|
||||
display: inline-block;
|
||||
}
|
||||
dd {
|
||||
display: inline-block;
|
||||
margin-right: 18px;
|
||||
// margin: 0;
|
||||
&:last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
i {
|
||||
color: $base-color;
|
||||
font-size: $ns-font-size-base;
|
||||
margin-right: 5px;
|
||||
}
|
||||
span {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.sku-list {
|
||||
ul {
|
||||
overflow: hidden;
|
||||
padding: 1px;
|
||||
li {
|
||||
float: left;
|
||||
position: relative;
|
||||
margin: 2px 10px 10px 0;
|
||||
line-height: 14px;
|
||||
vertical-align: middle;
|
||||
|
||||
div {
|
||||
padding: 8px 15px;
|
||||
text-align: center;
|
||||
border: 1px solid #b7b7b7;
|
||||
display: inline-block;
|
||||
-webkit-transition: none;
|
||||
transition: none;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
&.selected,
|
||||
&:hover {
|
||||
border: 1px solid;
|
||||
color: $base-color;
|
||||
}
|
||||
&:hover {
|
||||
color: $base-color;
|
||||
}
|
||||
&.disabled,
|
||||
&.disabled:hover {
|
||||
border: 1px solid #b7b7b7;
|
||||
margin: 0;
|
||||
cursor: not-allowed;
|
||||
color: #aaa;
|
||||
}
|
||||
img {
|
||||
margin-right: 10px;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
i {
|
||||
position: absolute;
|
||||
right: -10px;
|
||||
bottom: 0px;
|
||||
display: none;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
&:not(.disabled).selected i,
|
||||
&:not(.disabled):hover i {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.buy-number {
|
||||
margin: 10px 0;
|
||||
.num-wrap {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
margin-right: 10px;
|
||||
input {
|
||||
width: 126px;
|
||||
padding-left: 40px;
|
||||
padding-right: 40px;
|
||||
font-size: 12px;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
border-radius: 0;
|
||||
border-color: #D5D5D5;
|
||||
text-align: center;
|
||||
&.disabled {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
}
|
||||
span {
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
left: 0;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
line-height: 32px;
|
||||
text-align: center;
|
||||
user-select: none;
|
||||
z-index: 1;
|
||||
&.decrease{
|
||||
border-right: 1px solid #D5D5D5;
|
||||
}
|
||||
&.increase{
|
||||
left: 94px;
|
||||
border-left: 1px solid #D5D5D5;
|
||||
}
|
||||
&.disabled {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
}
|
||||
}
|
||||
.inventory {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
.go-phone {
|
||||
position: relative;
|
||||
float: right;
|
||||
width: 52px;
|
||||
height: 52px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
border: 1px solid #d8d8d8;
|
||||
box-sizing: border-box;
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
&>img{
|
||||
|
||||
}
|
||||
&>span{
|
||||
margin-top: 4px;
|
||||
line-height: 1;
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
}
|
||||
&:hover .qrcode-wrap {
|
||||
display: block;
|
||||
}
|
||||
.qrcode-wrap {
|
||||
border: 1px solid #e5e5e5;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.12);
|
||||
height: 120px;
|
||||
overflow: hidden;
|
||||
padding: 10px;
|
||||
position: absolute;
|
||||
width: 120px;
|
||||
left: 30px;
|
||||
top: -50px;
|
||||
display: none;
|
||||
background:white;
|
||||
}
|
||||
&.icon-item{
|
||||
.iconfont{
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
color: #5E5C5C;
|
||||
&.selected{
|
||||
color: #ff9000;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.shop-wrap {
|
||||
float: right;
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 0 20px;
|
||||
width: 234px;
|
||||
box-sizing: border-box;
|
||||
.head-wrap {
|
||||
text-align: center;
|
||||
padding: 16px 0;
|
||||
border-bottom: 1px solid #f1f1f1;
|
||||
.img-wrap {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
line-height: 64px;
|
||||
display: inline-block;
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
.site-name {
|
||||
font-size: 14px;
|
||||
color: #383838;
|
||||
}
|
||||
.tag {
|
||||
margin-left: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
.info-wrap {
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px solid #f1f1f1;
|
||||
dl {
|
||||
font-size: $ns-font-size-sm;
|
||||
dt {
|
||||
color: #838383;
|
||||
// width: 65px;
|
||||
line-height: 25px;
|
||||
font-weight: normal;
|
||||
float: left;
|
||||
}
|
||||
dt.site-score {
|
||||
// width: 58px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
dd {
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
// margin-left: 50px;
|
||||
color: #838383;
|
||||
span {
|
||||
color: #383838;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.operation {
|
||||
padding: 12px 0;
|
||||
|
||||
.el-button {
|
||||
padding: 10px 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail-wrap {
|
||||
padding: 64px 0 35px;
|
||||
clear: both;
|
||||
.goods-recommended {
|
||||
float: left;
|
||||
width: 234px;
|
||||
}
|
||||
.goods-tab {
|
||||
.attr-list {
|
||||
font-size: 14px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
li {
|
||||
margin-bottom: 5px;
|
||||
padding: 0 10px;
|
||||
flex: 0 0 30%;
|
||||
width: 33%;
|
||||
}
|
||||
}
|
||||
.el-tabs__header{
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
.tablist{
|
||||
border-radius: 0;
|
||||
}
|
||||
.el-tabs__item{
|
||||
position: relative;
|
||||
width: 168px;
|
||||
height: 52px;
|
||||
line-height: 52px;
|
||||
text-align: center;
|
||||
font-size: 18px;
|
||||
&.is-active{
|
||||
color: $base-color;
|
||||
&:after{
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: -1px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 2px;
|
||||
background-color: $base-color;
|
||||
}
|
||||
}
|
||||
&:hover{
|
||||
color: $base-color;
|
||||
}
|
||||
}
|
||||
.evaluate {
|
||||
.empty {
|
||||
color: #898989;
|
||||
text-align: center;
|
||||
font-size: 14px;
|
||||
}
|
||||
nav {
|
||||
padding: 10px;
|
||||
overflow: hidden;
|
||||
background: #f7f7f7;
|
||||
li {
|
||||
float: left;
|
||||
padding: 0 20px;
|
||||
cursor: pointer;
|
||||
|
||||
&:first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
&:hover,
|
||||
&.selected {
|
||||
color: $base-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
.list {
|
||||
margin-top: 10px;
|
||||
font-size: 14px;
|
||||
li {
|
||||
padding: 15px;
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
.member-info {
|
||||
float: left;
|
||||
width: 140px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
img {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
border-radius: 50%;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
.info-wrap {
|
||||
margin-left: 150px;
|
||||
margin-bottom: 10px;
|
||||
.content {
|
||||
padding: 10px 0;
|
||||
}
|
||||
.img-list {
|
||||
.el-image {
|
||||
width: 50px;
|
||||
margin-left: 10px;
|
||||
&:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.sku-info {
|
||||
color: #898989;
|
||||
font-size: 12px;
|
||||
span {
|
||||
margin-right: 5px;
|
||||
&.create-time {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.evaluation-reply {
|
||||
margin: 10px 0;
|
||||
color: $base-color;
|
||||
}
|
||||
.review-evaluation {
|
||||
.review-time {
|
||||
font-size: $ns-font-size-sm;
|
||||
margin-left: 20px;
|
||||
color: #898989;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.page-wrap {
|
||||
margin-top: 10px;
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
936
addon/pc/source/os/assets/css/promotion/detail_seckill.scss
Executable file
@@ -0,0 +1,936 @@
|
||||
.el-main{
|
||||
.detail-nav-wrap{
|
||||
background-color: #f8f8f8;
|
||||
.detail-nav{
|
||||
margin: auto;
|
||||
width: 1210px;
|
||||
height: 54px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.iconfont{
|
||||
margin: 0 8px;
|
||||
}
|
||||
span{
|
||||
color: #666;
|
||||
&:last-of-type{
|
||||
color: $base-color;
|
||||
}
|
||||
}
|
||||
.goods-name{
|
||||
display: inline-block;
|
||||
width: 150px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail-main {
|
||||
background: #fff;
|
||||
padding-top: 20px;
|
||||
}
|
||||
.goods-detail {
|
||||
overflow: hidden;
|
||||
margin: 0 auto;
|
||||
width: 1210px;
|
||||
.preview-wrap {
|
||||
display: flex;
|
||||
float: left;
|
||||
.video-player-wrap {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
.video-player {
|
||||
visibility: hidden;
|
||||
> div {
|
||||
width: 356px;
|
||||
height: 356px;
|
||||
display: none;
|
||||
}
|
||||
.vjs-control-bar,
|
||||
.vjs-big-play-button {
|
||||
visibility: hidden;
|
||||
transition: none;
|
||||
}
|
||||
.vjs-big-play-button {
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
}
|
||||
|
||||
.media-mode {
|
||||
position: absolute;
|
||||
width: 356px;
|
||||
z-index: 5;
|
||||
bottom: 0;
|
||||
top: 300px;
|
||||
text-align: center;
|
||||
line-height: 25px;
|
||||
|
||||
span {
|
||||
background: rgba(100, 100, 100, 0.6);
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
line-height: 25px;
|
||||
border-radius: 10px;
|
||||
padding: 0 15px;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
|
||||
&:last-child {
|
||||
margin-left: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.show {
|
||||
.video-player,
|
||||
.vjs-control-bar,
|
||||
.vjs-big-play-button {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.video-player {
|
||||
> div {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
.media-mode {
|
||||
top: initial;
|
||||
bottom: 50px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.magnifier-wrap {
|
||||
width: 460px;
|
||||
height: 460px;
|
||||
border: 1px solid #d8d8d8;
|
||||
box-sizing: border-box;
|
||||
.magnifier-box .mouse-cover {
|
||||
background-color: #fede4f;
|
||||
opacity: 0.4;
|
||||
}
|
||||
}
|
||||
|
||||
.spec-items {
|
||||
margin-left: 10px;
|
||||
position: relative;
|
||||
width: 84px;
|
||||
height: 460px;
|
||||
overflow: hidden;
|
||||
> span {
|
||||
cursor: pointer;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 84px;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
background: #fff;
|
||||
color: #838383;
|
||||
z-index: 1;
|
||||
font-size: 25px;
|
||||
&:first-of-type{
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
&:last-of-type{
|
||||
top: calc(100% - 42px);
|
||||
}
|
||||
}
|
||||
ul {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
height: 500%;
|
||||
position: absolute;
|
||||
top: 48px;
|
||||
li {
|
||||
width: 84px;
|
||||
height: 84px;
|
||||
overflow: hidden;
|
||||
margin-bottom: 10px;
|
||||
border: 1px solid #DADADA;
|
||||
cursor: pointer;
|
||||
opacity: 0.5;
|
||||
box-sizing: border-box;
|
||||
&:hover,
|
||||
&.selected {
|
||||
opacity: 1;
|
||||
border-color: $base-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.share-collect {
|
||||
padding: 10px 0 20px;
|
||||
cursor: pointer;
|
||||
text-align: right;
|
||||
color: #838383;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
a{
|
||||
color: #838383;
|
||||
}
|
||||
i,
|
||||
span {
|
||||
vertical-align: middle;
|
||||
}
|
||||
i {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.basic-info-wrap {
|
||||
float: left;
|
||||
width: calc(100% - 589px);
|
||||
margin-left: 30px;
|
||||
h1 {
|
||||
font-size: 20px;
|
||||
font-weight: normal;
|
||||
color: #333;
|
||||
line-height: 1.5;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
.desc {
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
margin: 5px 0 12px;
|
||||
}
|
||||
.divider {
|
||||
margin: 10px 0;
|
||||
border: 0;
|
||||
border-top: 1px dotted #e5e5e5;
|
||||
}
|
||||
.discount-banner {
|
||||
margin-top: 5px;
|
||||
background: url(../../../../assets/images/goods/discount_bg.png) no-repeat;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
.activity-name {
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
height: 40px;
|
||||
|
||||
i {
|
||||
display: inline-block;
|
||||
line-height: 40px;
|
||||
}
|
||||
span {
|
||||
display: inline-block;
|
||||
line-height: 40px;
|
||||
vertical-align: top;
|
||||
}
|
||||
}
|
||||
.discount-icon {
|
||||
margin: 0 8px 0 10px;
|
||||
color: #fff;
|
||||
font-size: 20px;
|
||||
}
|
||||
.surplus-time {
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
float: right;
|
||||
height: 35px;
|
||||
line-height: 35px;
|
||||
padding-right: 5px;
|
||||
text-align: right;
|
||||
> span {
|
||||
margin-right: 5px;
|
||||
}
|
||||
i {
|
||||
font-style: normal;
|
||||
padding: 2px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: 0 5px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.count-down {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
}
|
||||
.item-block {
|
||||
background-color: #f8f8f8;
|
||||
padding: 15px 0;
|
||||
position: relative;
|
||||
background-size: cover;
|
||||
min-height: 62px;
|
||||
margin-bottom: 20px;
|
||||
.statistical {
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 16px;
|
||||
li {
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
font-size: 14px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
&:first-child {
|
||||
margin-right: 40px;
|
||||
}
|
||||
|
||||
p {
|
||||
color: #838383;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #383838;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.item-line {
|
||||
font-size: 14px;
|
||||
min-height: 35px;
|
||||
line-height: 35px;
|
||||
display: flex;
|
||||
padding-left: 20px;
|
||||
margin-bottom: 10px;
|
||||
dt {
|
||||
display: inline-block;
|
||||
width: 50px;
|
||||
height: 35px;
|
||||
line-height: 35px;
|
||||
text-align: justify;
|
||||
font-size: 12px;
|
||||
margin-right: 16px;
|
||||
color: #222;
|
||||
flex-shrink: 0;
|
||||
&::after {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
content: '';
|
||||
height: 0;
|
||||
}
|
||||
}
|
||||
> * {
|
||||
height: inherit;
|
||||
line-height: inherit;
|
||||
font-size: 14px;
|
||||
}
|
||||
> dd {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 35px;
|
||||
}
|
||||
&:last-of-type{
|
||||
margin-bottom: 0;
|
||||
}
|
||||
&:first-of-type > dd{
|
||||
align-items: baseline;
|
||||
}
|
||||
.yuan {
|
||||
font-size: 18px;
|
||||
}
|
||||
.price {
|
||||
font-size: 30px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.market-yuan {
|
||||
font-size: 14px;
|
||||
text-decoration: line-through;
|
||||
}
|
||||
.member_price {
|
||||
font-size: 14px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
.market-price {
|
||||
font-size: 14px;
|
||||
margin-left: 5px;
|
||||
text-decoration: line-through;
|
||||
}
|
||||
&.promotion-price .label {
|
||||
line-height: initial;
|
||||
font-size: 18px;
|
||||
background: transparent;
|
||||
padding: 0;
|
||||
vertical-align: text-bottom;
|
||||
}
|
||||
&.coupon-list {
|
||||
align-items: baseline;
|
||||
> div {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
dd {
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
p {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
line-height: 18px;
|
||||
}
|
||||
span {
|
||||
display: inline-block;
|
||||
padding: 0 10px;
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
border: 1px solid $base-color;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
color: $base-color;
|
||||
font-size: 14px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
label {
|
||||
line-height: 16px;
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
top: 1px;
|
||||
}
|
||||
}
|
||||
&.manjian {
|
||||
align-items: end;
|
||||
}
|
||||
&.manjian span {
|
||||
// padding: 2px 10px;
|
||||
font-size: 12px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
&.delivery {
|
||||
position: relative;
|
||||
i {
|
||||
margin-left: 5px;
|
||||
}
|
||||
dd{
|
||||
align-items: center;
|
||||
}
|
||||
.region-selected {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
margin: 0 5px 0 0;
|
||||
width: auto;
|
||||
padding: 0 10px;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
border: 1px solid #e5e5e5;
|
||||
z-index: 2;
|
||||
font-size: 14px;
|
||||
}
|
||||
.region-list {
|
||||
width: 466px;
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
top: 35px;
|
||||
left: 82px;
|
||||
background: #fff;
|
||||
border: 1px solid #e5e5e5;
|
||||
padding: 15px;
|
||||
line-height: 18px;
|
||||
height: auto;
|
||||
display: none;
|
||||
font-size: 14px;
|
||||
&.hide{
|
||||
display: none !important;
|
||||
}
|
||||
.nav-tabs {
|
||||
border-bottom: 2px solid $base-color;
|
||||
height: 30px;
|
||||
> li {
|
||||
margin-bottom: -2px;
|
||||
float: left;
|
||||
> div {
|
||||
padding: 4px 8px;
|
||||
border: 2px solid transparent;
|
||||
height: 20px;
|
||||
display: inline-block;
|
||||
line-height: 20px;
|
||||
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1);
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
border-color: transparent;
|
||||
}
|
||||
}
|
||||
&.active {
|
||||
> div {
|
||||
color: $base-color;
|
||||
border: 2px solid;
|
||||
border-bottom-color: #fff !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.tab-content {
|
||||
> .active {
|
||||
padding: 10px 0;
|
||||
}
|
||||
> .tab-pane {
|
||||
display: none;
|
||||
&.active {
|
||||
display: block;
|
||||
}
|
||||
li {
|
||||
float: left;
|
||||
width: 25%;
|
||||
line-height: 30px;
|
||||
&.selected {
|
||||
color: $base-color;
|
||||
}
|
||||
span {
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
color: $base-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dd:hover {
|
||||
.region-list {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.service a {
|
||||
margin: 0 5px;
|
||||
}
|
||||
&.buy-btn {
|
||||
margin: 25px 0 0;
|
||||
dt{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
dd{
|
||||
height: auto;
|
||||
}
|
||||
button {
|
||||
min-width: 168px;
|
||||
height: 52px;
|
||||
margin-right: 10px;
|
||||
font-size: 20px;
|
||||
text-shadow: 0 0 0;
|
||||
border-radius: 0;
|
||||
&[disabled] {
|
||||
cursor: not-allowed;
|
||||
pointer-events: initial;
|
||||
border: 1px solid;
|
||||
opacity: 1;
|
||||
}
|
||||
i {
|
||||
margin-right: 5px;
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.i-activity-flag {
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
padding: 0 8px;
|
||||
border: 1px solid;
|
||||
font-size: 14px;
|
||||
margin-right: 5px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
&.gift-point strong {
|
||||
font-size: 14px;
|
||||
}
|
||||
&.merchant-service {
|
||||
overflow: hidden;
|
||||
margin: 10px 0;
|
||||
align-items: flex-start;
|
||||
> div {
|
||||
display: inline-block;
|
||||
}
|
||||
dd {
|
||||
display: inline-block;
|
||||
margin-right: 18px;
|
||||
// margin: 0;
|
||||
&:last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
i {
|
||||
color: $base-color;
|
||||
font-size: $ns-font-size-base;
|
||||
margin-right: 5px;
|
||||
}
|
||||
span {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.sku-list {
|
||||
ul {
|
||||
overflow: hidden;
|
||||
padding: 1px;
|
||||
li {
|
||||
float: left;
|
||||
position: relative;
|
||||
margin: 2px 10px 10px 0;
|
||||
line-height: 14px;
|
||||
vertical-align: middle;
|
||||
|
||||
div {
|
||||
padding: 8px 12px;
|
||||
text-align: center;
|
||||
border: 1px solid #b7b7b7;
|
||||
display: inline-block;
|
||||
-webkit-transition: none;
|
||||
transition: none;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
&.selected,
|
||||
&:hover {
|
||||
border: 2px solid;
|
||||
margin: -1px;
|
||||
color: $base-color;
|
||||
}
|
||||
&:hover {
|
||||
color: $base-color;
|
||||
}
|
||||
&.disabled,
|
||||
&.disabled:hover {
|
||||
border: 1px solid #b7b7b7;
|
||||
margin: 0;
|
||||
cursor: not-allowed;
|
||||
color: #aaa;
|
||||
}
|
||||
img {
|
||||
margin-right: 10px;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
i {
|
||||
position: absolute;
|
||||
right: -10px;
|
||||
bottom: 0px;
|
||||
display: none;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
&:not(.disabled).selected i,
|
||||
&:not(.disabled):hover i {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.buy-number {
|
||||
margin: 10px 0;
|
||||
.num-wrap {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
margin-right: 10px;
|
||||
input {
|
||||
width: 126px;
|
||||
padding-left: 40px;
|
||||
padding-right: 40px;
|
||||
font-size: 12px;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
border-radius: 0;
|
||||
border-color: #D5D5D5;
|
||||
text-align: center;
|
||||
&.disabled {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
}
|
||||
span {
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
left: 0;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
line-height: 32px;
|
||||
text-align: center;
|
||||
user-select: none;
|
||||
z-index: 1;
|
||||
&.decrease{
|
||||
border-right: 1px solid #D5D5D5;
|
||||
}
|
||||
&.increase{
|
||||
left: 94px;
|
||||
border-left: 1px solid #D5D5D5;
|
||||
}
|
||||
&.disabled {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
}
|
||||
}
|
||||
.inventory {
|
||||
margin: 0 10px;
|
||||
}
|
||||
}
|
||||
.go-phone {
|
||||
position: relative;
|
||||
float: right;
|
||||
width: 52px;
|
||||
height: 52px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
border: 1px solid #d8d8d8;
|
||||
box-sizing: border-box;
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
&>img{
|
||||
|
||||
}
|
||||
&>span{
|
||||
margin-top: 4px;
|
||||
line-height: 1;
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
}
|
||||
&:hover .qrcode-wrap {
|
||||
display: block;
|
||||
}
|
||||
.qrcode-wrap {
|
||||
border: 1px solid #e5e5e5;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.12);
|
||||
height: 120px;
|
||||
overflow: hidden;
|
||||
padding: 10px;
|
||||
position: absolute;
|
||||
width: 120px;
|
||||
left: 30px;
|
||||
top: -50px;
|
||||
display: none;
|
||||
background:white;
|
||||
}
|
||||
&.icon-item{
|
||||
.iconfont{
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
color: #5E5C5C;
|
||||
&.selected{
|
||||
color: #ff9000;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.shop-wrap {
|
||||
float: right;
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 0 20px;
|
||||
width: 234px;
|
||||
box-sizing: border-box;
|
||||
.head-wrap {
|
||||
text-align: center;
|
||||
padding: 16px 0;
|
||||
border-bottom: 1px solid #f1f1f1;
|
||||
.img-wrap {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
line-height: 64px;
|
||||
display: inline-block;
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
.site-name {
|
||||
font-size: 14px;
|
||||
color: #383838;
|
||||
}
|
||||
.tag {
|
||||
margin-left: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
.info-wrap {
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px solid #f1f1f1;
|
||||
dl {
|
||||
font-size: $ns-font-size-sm;
|
||||
dt {
|
||||
color: #838383;
|
||||
// width: 65px;
|
||||
line-height: 25px;
|
||||
font-weight: normal;
|
||||
float: left;
|
||||
}
|
||||
dt.site-score {
|
||||
// width: 58px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
dd {
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
// margin-left: 50px;
|
||||
color: #838383;
|
||||
span {
|
||||
color: #383838;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.operation {
|
||||
padding: 12px 0;
|
||||
|
||||
.el-button {
|
||||
padding: 10px 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail-wrap {
|
||||
padding: 64px 0 35px;
|
||||
clear: both;
|
||||
.goods-recommended {
|
||||
float: left;
|
||||
width: 234px;
|
||||
}
|
||||
.goods-tab {
|
||||
.attr-list {
|
||||
font-size: 14px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
li {
|
||||
margin-bottom: 5px;
|
||||
padding: 0 10px;
|
||||
flex: 0 0 30%;
|
||||
width: 33%;
|
||||
}
|
||||
}
|
||||
.el-tabs__header{
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
.tablist{
|
||||
border-radius: 0;
|
||||
}
|
||||
.el-tabs__item{
|
||||
position: relative;
|
||||
width: 168px;
|
||||
height: 52px;
|
||||
line-height: 52px;
|
||||
text-align: center;
|
||||
font-size: 18px;
|
||||
&.is-active{
|
||||
color: $base-color;
|
||||
&:after{
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: -1px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 2px;
|
||||
background-color: $base-color;
|
||||
}
|
||||
}
|
||||
&:hover{
|
||||
color: $base-color;
|
||||
}
|
||||
}
|
||||
.evaluate {
|
||||
.empty {
|
||||
color: #898989;
|
||||
text-align: center;
|
||||
font-size: 14px;
|
||||
}
|
||||
nav {
|
||||
padding: 10px;
|
||||
overflow: hidden;
|
||||
background: #f7f7f7;
|
||||
li {
|
||||
float: left;
|
||||
padding: 0 20px;
|
||||
cursor: pointer;
|
||||
|
||||
&:first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
&:hover,
|
||||
&.selected {
|
||||
color: $base-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
.list {
|
||||
margin-top: 10px;
|
||||
font-size: 14px;
|
||||
li {
|
||||
padding: 15px;
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
.member-info {
|
||||
float: left;
|
||||
width: 140px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
img {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
border-radius: 50%;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
.info-wrap {
|
||||
margin-left: 150px;
|
||||
margin-bottom: 10px;
|
||||
.content {
|
||||
padding: 10px 0;
|
||||
}
|
||||
.img-list {
|
||||
.el-image {
|
||||
width: 50px;
|
||||
margin-left: 10px;
|
||||
&:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.sku-info {
|
||||
color: #898989;
|
||||
font-size: 12px;
|
||||
span {
|
||||
margin-right: 5px;
|
||||
&.create-time {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.evaluation-reply {
|
||||
margin: 10px 0;
|
||||
color: $base-color;
|
||||
}
|
||||
.review-evaluation {
|
||||
.review-time {
|
||||
font-size: $ns-font-size-sm;
|
||||
margin-left: 20px;
|
||||
color: #898989;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.page-wrap {
|
||||
margin-top: 10px;
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
327
addon/pc/source/os/assets/css/promotion/list_seckill.scss
Executable file
@@ -0,0 +1,327 @@
|
||||
.ns-seckill {
|
||||
.ns-seckill-time-box {
|
||||
&>span {
|
||||
cursor: pointer;
|
||||
bottom: 0;
|
||||
line-height: 64px;
|
||||
position: absolute;
|
||||
color: #fff;
|
||||
z-index: 1;
|
||||
background-color: rgba(0, 0, 0, .3);
|
||||
width: 35px;
|
||||
font-size: 24px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.left-btn {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.right-btn {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.ns-seckill-time-list {
|
||||
width: 100%;
|
||||
height: 64px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
ul {
|
||||
width: 500%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 16px;
|
||||
display: flex;
|
||||
|
||||
li {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 302.5px;
|
||||
height: 64px;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
background: linear-gradient(135deg, #EDEDED 0%, #FFFFFF 100%);
|
||||
opacity: 0.87;
|
||||
color: #424242;
|
||||
&::after{
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 12px;
|
||||
border-left: 30px solid rgba(255,255,255,0.87);
|
||||
border-bottom: 60px solid rgba(255,255,255,0.87);
|
||||
border-right: 30px solid transparent;
|
||||
border-top: 60px solid transparent;
|
||||
}
|
||||
&:first-of-type::after{
|
||||
border: 0;
|
||||
}
|
||||
|
||||
div:first-child {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
div:nth-child(2) {
|
||||
line-height: 14px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
&.selected-tab {
|
||||
background: linear-gradient(135deg, #F42424 0%, #FA6400 100%);
|
||||
opacity: 0.88;
|
||||
color: #FFF;
|
||||
}
|
||||
&.selected-tab + li{
|
||||
background-color: red;
|
||||
}
|
||||
&.selected-tab+li::after{
|
||||
border-left-color: rgba(250,75,0,0.88);
|
||||
border-bottom-color: rgba(250,75,0,0.88);
|
||||
}
|
||||
&.selected-tab::after{
|
||||
border-left-color: rgba(255,255,255,1);
|
||||
border-bottom-color: rgba(255,255,255,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ns-seckill-head {
|
||||
position: relative;
|
||||
width: $width;
|
||||
margin: auto;
|
||||
.el-carousel{
|
||||
.el-image{
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ns-seckill-box {
|
||||
padding-top: 54px;
|
||||
width: $width;
|
||||
margin: 0 auto 50px;
|
||||
|
||||
.ns-seckill-title {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid #e8e8e8;
|
||||
|
||||
.seckill-title-left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.name {
|
||||
font-size: 30px;
|
||||
font-weight: bold;
|
||||
border-bottom: 4px solid #f42424;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.desc {
|
||||
margin-left: 15px;
|
||||
font-size: 16px;
|
||||
color: #424242;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.ns-seckill-right {
|
||||
&>span {
|
||||
font-size: 20px;
|
||||
color: #424242;
|
||||
}
|
||||
|
||||
.count-down {
|
||||
display: inline-block;
|
||||
margin-left: 6px;
|
||||
|
||||
&>p {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
i {
|
||||
margin-left: 3px;
|
||||
margin-right: -6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ns-seckill-time-box {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
width: $width;
|
||||
height: 64px;
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
z-index: 5;
|
||||
|
||||
.seckill-time {
|
||||
width: $width;
|
||||
margin: 0 auto;
|
||||
|
||||
.el-tabs__nav-wrap .el-tabs__item .seckill-time-li.selected-tab div p {
|
||||
color: #ffffff;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.seckill-time-li {
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
height: 56px;
|
||||
line-height: unset;
|
||||
padding-top: 6px;
|
||||
box-sizing: border-box;
|
||||
color: #afafaf;
|
||||
|
||||
div {
|
||||
&:first-child {
|
||||
font-size: 18px;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
height: 14px;
|
||||
line-height: 14px;
|
||||
margin-top: 6px;
|
||||
|
||||
p {
|
||||
height: 14px;
|
||||
line-height: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.selected-tab {
|
||||
background: $base-color;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.goods-list {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
margin-top: 35px;
|
||||
|
||||
.goods {
|
||||
width: 228px;
|
||||
margin-bottom: 18px;
|
||||
margin-right: 17px;
|
||||
overflow: hidden;
|
||||
color: #303133;
|
||||
transition: 0.3s;
|
||||
padding: 18px;
|
||||
background-color: #fff;
|
||||
box-sizing: border-box;
|
||||
cursor: pointer;
|
||||
|
||||
&:nth-child(5n+5) {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.img {
|
||||
width: 192px;
|
||||
height: 192px;
|
||||
}
|
||||
|
||||
.price {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.curr-price {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
height: 24px;
|
||||
color: $base-color;
|
||||
font-weight: bold;
|
||||
|
||||
span:first-child {
|
||||
font-size: 14px;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
span:nth-child(2) {
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.main_price {
|
||||
color: $base-color;
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
.primary_price {
|
||||
text-decoration: line-through;
|
||||
color: $base-color-info;
|
||||
margin-left: 5px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.name {
|
||||
margin-top: 10px;
|
||||
font-size: 14px;
|
||||
white-space: normal;
|
||||
overflow: hidden;
|
||||
|
||||
p {
|
||||
line-height: 24px;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
height: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
.el-button {
|
||||
width: 100%;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
background: $base-color;
|
||||
color: #ffffff;
|
||||
margin-top: 5px;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
padding: 0;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.empty-wrap {
|
||||
padding: 50px 0 60px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-sizing: border-box;
|
||||
img{
|
||||
width: 400px;
|
||||
height: 244px;
|
||||
}
|
||||
span{
|
||||
font-size: 14px;
|
||||
color: #4A4A4A;
|
||||
}
|
||||
}
|
||||
407
addon/pc/source/os/assets/css/promotion/payment_combo.scss
Executable file
@@ -0,0 +1,407 @@
|
||||
.payment-wrap {
|
||||
width: 1210px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.item-block {
|
||||
padding: 0 15px 1px;
|
||||
margin: 10px 0;
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
background: #ffffff;
|
||||
|
||||
.block-text {
|
||||
border-color: #eeeeee;
|
||||
color: $ns-text-color-black;
|
||||
padding: 7px 0;
|
||||
border-bottom: 1px;
|
||||
}
|
||||
|
||||
.box {
|
||||
.liuyan-text {
|
||||
background-color: #F7F7F7;
|
||||
border: 2px solid #DADADA;
|
||||
height: 56px;
|
||||
width: 80%;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
border-radius: 4px;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.padd-bom-10 {
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.padd-bom-20 {
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
//收货地址
|
||||
.address-desc {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
}
|
||||
|
||||
.address-item {
|
||||
width: 23%;
|
||||
border: 3px solid #eee;
|
||||
box-sizing: border-box;
|
||||
margin: 1%;
|
||||
height: 150px;
|
||||
cursor: pointer;
|
||||
float: left;
|
||||
|
||||
.add-address {
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
line-height: 120px;
|
||||
}
|
||||
|
||||
.address-info {
|
||||
padding: 10px;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
|
||||
.options {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 10px;
|
||||
width: 50%;
|
||||
text-align: right;
|
||||
|
||||
div {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
color: #999999;
|
||||
}
|
||||
}
|
||||
|
||||
.address-name {
|
||||
color: $base-color;
|
||||
padding: 0px 0 6px;
|
||||
border-bottom: 1px solid #eee;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
padding-right: 71px;
|
||||
box-sizing: border-box;
|
||||
line-height: 25px;
|
||||
}
|
||||
|
||||
.address-mobile {
|
||||
padding: 10px 0 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.address-item.active {
|
||||
background-color: #fffbf9;
|
||||
border-color: $base-color;
|
||||
}
|
||||
|
||||
//支付方式
|
||||
.pay-type-list {
|
||||
padding: 20px 0;
|
||||
}
|
||||
|
||||
.distribution {
|
||||
color: #ff547b;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.pay-type-item {
|
||||
background-color: white;
|
||||
display: inline-block;
|
||||
border: 2px solid #eeeeee;
|
||||
padding: 5px 20px;
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.pay-type-item.active {
|
||||
border-color: $base-color;
|
||||
}
|
||||
|
||||
.mobile-wrap {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
.pay-password {
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
//商品列表
|
||||
.goods-list {
|
||||
padding: 15px 0;
|
||||
|
||||
.store-icon {
|
||||
margin-right: 5px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.shop-icon {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.goods-info-left {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
float: left;
|
||||
|
||||
.goods-img {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
}
|
||||
|
||||
.goods-info-right {
|
||||
float: left;
|
||||
height: 60px;
|
||||
margin-left: 10px;
|
||||
color: $base-color;
|
||||
width: 80%;
|
||||
|
||||
.goods-name {
|
||||
line-height: 20px;
|
||||
padding-top: 10px;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.goods-spec {
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
|
||||
.goods-footer {
|
||||
background-color: #f3fbfe;
|
||||
padding: 10px;
|
||||
margin-top: 10px;
|
||||
|
||||
.goods-footer-right {
|
||||
width: 50%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.goods-footer-left {
|
||||
width: 50%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.order-cell {
|
||||
cursor: pointer;
|
||||
|
||||
.tit {
|
||||
padding: 5px 0 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.express-item {
|
||||
margin-top: 5px;
|
||||
display: inline-block;
|
||||
border: 2px solid #eeeeee;
|
||||
padding: 3px 10px;
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.express-item.active {
|
||||
border-color: $base-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.promotion-show {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
//统计
|
||||
.order-statistics {
|
||||
float: right;
|
||||
padding: 10px;
|
||||
// color: #999;
|
||||
}
|
||||
|
||||
.order-submit {
|
||||
float: right;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.order-money {
|
||||
display: inline-block;
|
||||
margin-right: 20px;
|
||||
|
||||
div {
|
||||
display: inline-block;
|
||||
font-size: $ns-font-size-lg;
|
||||
}
|
||||
}
|
||||
|
||||
.buyer-message.el-textarea {
|
||||
width: 400px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.address-open {
|
||||
cursor: pointer;
|
||||
font-size: 13px;
|
||||
padding: 0 0 10px 10px;
|
||||
}
|
||||
|
||||
.pay-password-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.pay-password {
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.pay-password.hide-password {
|
||||
position: fixed;
|
||||
top: -9999px;
|
||||
}
|
||||
|
||||
.platform-coupon {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.forget-password {
|
||||
text-align: right;
|
||||
margin-right: 45px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.disabled-selected-wrap {
|
||||
pointer-events: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.cursor-pointer {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
//发票样式
|
||||
.invoice-information {
|
||||
.invoice-type-box {
|
||||
display: inline-block;
|
||||
padding: 10px 0px;
|
||||
vertical-align: bottom;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
|
||||
&.invoice-title-box {
|
||||
margin-right: 100px;
|
||||
}
|
||||
|
||||
.invoice-name {
|
||||
margin-right: 25px;
|
||||
}
|
||||
|
||||
.invoice-to-type {
|
||||
display: inline-block;
|
||||
margin-right: 30px;
|
||||
position: relative;
|
||||
// i{
|
||||
// width: 17px;
|
||||
// height: 17px;
|
||||
// display: inline-block;
|
||||
// position: absolute;
|
||||
// border-radius: 34px;
|
||||
// overflow: hidden;
|
||||
// top: 7px;
|
||||
// left:-1px;
|
||||
// background: #fff;
|
||||
// background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbUlEQVQ4jYXTsUvVURQH8I8PE1zKTdcEK7I/wNkkKpGgxNaGBqUQ3JT2xoQoaajmhhTEgoig1V0QdQiaCgTxJRK4PDlybtwe+vzCDw7n+/3ee+75ndPVmpzXhut4jDu4nNQPfMFbbNbyRhX34BW+YxdTuJTfw8wF9wa9xdRdmT/jD66g2VbVRn5LeI813MVRqWARB5g8xVyjmZq46EV5wjAe4BFaKR7CchqaGQ8l10pteIa7s2FLeWrgKtbRV918H6MYwXZqX4Y3KriN1Ur8vM1c0JdcwafwxgGD2KqIsQ49uFXFUclgo4P4PPSUvxBDcq0Sf+tg/FrFUfnPRk7YvYp4hv1TzPvJFYzHZXHAO8zgYhJb2e2VnI2DjEeqXoV2Nka77MJrDOSQlFk4C134iN94Upo4l6cGEbN/FoIrmvD8W6ajfNMv7GABN3Ahux1x5IKLpZpIz3/bGImnOXH9edMh9vAhczcxjb8nDhwDyjpTCJDO1nsAAAAASUVORK5CYII=);
|
||||
// background-size: 100% 100%;
|
||||
// }
|
||||
i {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
display: inline-block;
|
||||
border-radius: 34px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
vertical-align: text-bottom;
|
||||
border: 1px solid #999;
|
||||
|
||||
&.active {
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbUlEQVQ4jYXTsUvVURQH8I8PE1zKTdcEK7I/wNkkKpGgxNaGBqUQ3JT2xoQoaajmhhTEgoig1V0QdQiaCgTxJRK4PDlybtwe+vzCDw7n+/3ee+75ndPVmpzXhut4jDu4nNQPfMFbbNbyRhX34BW+YxdTuJTfw8wF9wa9xdRdmT/jD66g2VbVRn5LeI813MVRqWARB5g8xVyjmZq46EV5wjAe4BFaKR7CchqaGQ8l10pteIa7s2FLeWrgKtbRV918H6MYwXZqX4Y3KriN1Ur8vM1c0JdcwafwxgGD2KqIsQ49uFXFUclgo4P4PPSUvxBDcq0Sf+tg/FrFUfnPRk7YvYp4hv1TzPvJFYzHZXHAO8zgYhJb2e2VnI2DjEeqXoV2Nka77MJrDOSQlFk4C134iN94Upo4l6cGEbN/FoIrmvD8W6ajfNMv7GABN3Ahux1x5IKLpZpIz3/bGImnOXH9edMh9vAhczcxjb8nDhwDyjpTCJDO1nsAAAAASUVORK5CYII=);
|
||||
background-size: 100% 100%;
|
||||
border: 0px solid #fff;
|
||||
}
|
||||
}
|
||||
|
||||
input {
|
||||
vertical-align: middle;
|
||||
margin: 0px;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.invoice-box-form {
|
||||
display: inline-block;
|
||||
|
||||
input {
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
margin-right: 20px;
|
||||
border: 1px solid #dddddd;
|
||||
padding-left: 10px;
|
||||
border-radius: 3px;
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.invoice-condition {
|
||||
padding: 10px 0px;
|
||||
|
||||
.invoice-name {
|
||||
margin-right: 25px;
|
||||
}
|
||||
|
||||
.invoice-box-form {
|
||||
display: inline-block;
|
||||
|
||||
.option-item {
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
|
||||
&.active {
|
||||
color: #ff547b;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.invoice-tops {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
348
addon/pc/source/os/assets/css/promotion/payment_groupbuy.scss
Executable file
@@ -0,0 +1,348 @@
|
||||
.payment-wrap {
|
||||
width: 1210px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
.item-block {
|
||||
padding: 0 15px 1px;
|
||||
margin: 10px 0;
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
background: #ffffff;
|
||||
.block-text {
|
||||
border-color: #eeeeee;
|
||||
color: $ns-text-color-black;
|
||||
padding: 7px 0;
|
||||
border-bottom: 1px;
|
||||
}
|
||||
.box{
|
||||
.liuyan-text{
|
||||
background-color: #F7F7F7;
|
||||
border: 2px solid #DADADA;
|
||||
height: 56px;
|
||||
width: 80%;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
border-radius: 4px;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
.padd-bom-10{
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.padd-bom-20{
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
//收货地址
|
||||
.address-desc {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
}
|
||||
.address-item {
|
||||
width: 23%;
|
||||
border: 3px solid #eee;
|
||||
box-sizing: border-box;
|
||||
margin: 1%;
|
||||
height: 150px;
|
||||
cursor: pointer;
|
||||
float: left;
|
||||
|
||||
.add-address {
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
line-height: 120px;
|
||||
}
|
||||
.address-info {
|
||||
padding: 10px;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
.options {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 10px;
|
||||
width: 50%;
|
||||
text-align: right;
|
||||
div {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
color: #999999;
|
||||
}
|
||||
}
|
||||
.address-name {
|
||||
color: $base-color;
|
||||
padding: 0px 0 6px;
|
||||
border-bottom: 1px solid #eee;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
padding-right: 71px;
|
||||
box-sizing: border-box;
|
||||
line-height: 25px;
|
||||
}
|
||||
.address-mobile {
|
||||
padding: 10px 0 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.address-item.active {
|
||||
background-color: #fffbf9;
|
||||
border-color: $base-color;
|
||||
}
|
||||
|
||||
//支付方式
|
||||
.pay-type-list {
|
||||
padding: 20px 0;
|
||||
}
|
||||
.distribution{
|
||||
color: #ff547b;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.pay-type-item {
|
||||
background-color: white;
|
||||
display: inline-block;
|
||||
border: 2px solid #eeeeee;
|
||||
padding: 5px 20px;
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.pay-type-item.active {
|
||||
border-color: $base-color;
|
||||
}
|
||||
.mobile-wrap {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
//商品列表
|
||||
.goods-list {
|
||||
padding: 15px 0;
|
||||
|
||||
.store-icon {
|
||||
margin-right: 5px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.shop-icon {
|
||||
font-size: 18px;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
.goods-info-left {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
float: left;
|
||||
.goods-img {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
}
|
||||
.goods-info-right {
|
||||
float: left;
|
||||
height: 60px;
|
||||
margin-left: 10px;
|
||||
color: $base-color;
|
||||
width: 80%;
|
||||
.goods-name {
|
||||
line-height: 20px;
|
||||
padding-top: 10px;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
}
|
||||
.goods-spec {
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
.goods-footer {
|
||||
background-color: #f3fbfe;
|
||||
padding: 10px;
|
||||
margin-top: 10px;
|
||||
.goods-footer-right {
|
||||
width: 50%;
|
||||
float: left;
|
||||
}
|
||||
.goods-footer-left {
|
||||
width: 50%;
|
||||
float: left;
|
||||
}
|
||||
.order-cell {
|
||||
cursor: pointer;
|
||||
.tit {
|
||||
padding: 5px 0 0 0;
|
||||
}
|
||||
}
|
||||
.express-item {
|
||||
margin-top: 5px;
|
||||
display: inline-block;
|
||||
border: 2px solid #eeeeee;
|
||||
padding: 3px 10px;
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.express-item.active {
|
||||
border-color: $base-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.promotion-show {
|
||||
color: #999;
|
||||
}
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
//统计
|
||||
.order-statistics {
|
||||
float: right;
|
||||
padding: 10px;
|
||||
// color: #999;
|
||||
}
|
||||
.order-submit {
|
||||
float: right;
|
||||
padding: 10px;
|
||||
}
|
||||
.order-money {
|
||||
display: inline-block;
|
||||
margin-right: 20px;
|
||||
div {
|
||||
display: inline-block;
|
||||
font-size: $ns-font-size-lg;
|
||||
}
|
||||
}
|
||||
|
||||
.buyer-message.el-textarea {
|
||||
width: 400px;
|
||||
}
|
||||
.address-open {
|
||||
cursor: pointer;
|
||||
font-size: 13px;
|
||||
padding: 0 0 10px 10px;
|
||||
}
|
||||
.pay-password-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.pay-password {
|
||||
width: 80%;
|
||||
}
|
||||
.pay-password.hide-password {
|
||||
position: fixed;
|
||||
top: -9999px;
|
||||
}
|
||||
.platform-coupon {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.forget-password {
|
||||
text-align: right;
|
||||
margin-right: 45px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.disabled-selected-wrap {
|
||||
pointer-events: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.cursor-pointer {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
//发票样式
|
||||
.invoice-information {
|
||||
.invoice-type-box {
|
||||
display: inline-block;
|
||||
padding: 10px 0px;
|
||||
vertical-align: bottom;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
&.invoice-title-box {
|
||||
margin-right: 100px;
|
||||
}
|
||||
.invoice-name {
|
||||
margin-right: 25px;
|
||||
}
|
||||
.invoice-to-type {
|
||||
display: inline-block;
|
||||
margin-right: 30px;
|
||||
position: relative;
|
||||
// i{
|
||||
// width: 17px;
|
||||
// height: 17px;
|
||||
// display: inline-block;
|
||||
// position: absolute;
|
||||
// border-radius: 34px;
|
||||
// overflow: hidden;
|
||||
// top: 7px;
|
||||
// left:-1px;
|
||||
// background: #fff;
|
||||
// background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbUlEQVQ4jYXTsUvVURQH8I8PE1zKTdcEK7I/wNkkKpGgxNaGBqUQ3JT2xoQoaajmhhTEgoig1V0QdQiaCgTxJRK4PDlybtwe+vzCDw7n+/3ee+75ndPVmpzXhut4jDu4nNQPfMFbbNbyRhX34BW+YxdTuJTfw8wF9wa9xdRdmT/jD66g2VbVRn5LeI813MVRqWARB5g8xVyjmZq46EV5wjAe4BFaKR7CchqaGQ8l10pteIa7s2FLeWrgKtbRV918H6MYwXZqX4Y3KriN1Ur8vM1c0JdcwafwxgGD2KqIsQ49uFXFUclgo4P4PPSUvxBDcq0Sf+tg/FrFUfnPRk7YvYp4hv1TzPvJFYzHZXHAO8zgYhJb2e2VnI2DjEeqXoV2Nka77MJrDOSQlFk4C134iN94Upo4l6cGEbN/FoIrmvD8W6ajfNMv7GABN3Ahux1x5IKLpZpIz3/bGImnOXH9edMh9vAhczcxjb8nDhwDyjpTCJDO1nsAAAAASUVORK5CYII=);
|
||||
// background-size: 100% 100%;
|
||||
// }
|
||||
i {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
display: inline-block;
|
||||
border-radius: 34px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
vertical-align: text-bottom;
|
||||
border: 1px solid #999;
|
||||
&.active {
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbUlEQVQ4jYXTsUvVURQH8I8PE1zKTdcEK7I/wNkkKpGgxNaGBqUQ3JT2xoQoaajmhhTEgoig1V0QdQiaCgTxJRK4PDlybtwe+vzCDw7n+/3ee+75ndPVmpzXhut4jDu4nNQPfMFbbNbyRhX34BW+YxdTuJTfw8wF9wa9xdRdmT/jD66g2VbVRn5LeI813MVRqWARB5g8xVyjmZq46EV5wjAe4BFaKR7CchqaGQ8l10pteIa7s2FLeWrgKtbRV918H6MYwXZqX4Y3KriN1Ur8vM1c0JdcwafwxgGD2KqIsQ49uFXFUclgo4P4PPSUvxBDcq0Sf+tg/FrFUfnPRk7YvYp4hv1TzPvJFYzHZXHAO8zgYhJb2e2VnI2DjEeqXoV2Nka77MJrDOSQlFk4C134iN94Upo4l6cGEbN/FoIrmvD8W6ajfNMv7GABN3Ahux1x5IKLpZpIz3/bGImnOXH9edMh9vAhczcxjb8nDhwDyjpTCJDO1nsAAAAASUVORK5CYII=);
|
||||
background-size: 100% 100%;
|
||||
border: 0px solid #fff;
|
||||
}
|
||||
}
|
||||
input {
|
||||
vertical-align: middle;
|
||||
margin: 0px;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
}
|
||||
}
|
||||
.invoice-box-form {
|
||||
display: inline-block;
|
||||
input {
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
margin-right: 20px;
|
||||
border: 1px solid #dddddd;
|
||||
padding-left: 10px;
|
||||
border-radius: 3px;
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.invoice-condition {
|
||||
padding: 10px 0px;
|
||||
.invoice-name {
|
||||
margin-right: 25px;
|
||||
}
|
||||
.invoice-box-form {
|
||||
display: inline-block;
|
||||
.option-item {
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
&.active {
|
||||
color: #ff547b;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.invoice-tops{
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
347
addon/pc/source/os/assets/css/promotion/payment_seckill.scss
Executable file
@@ -0,0 +1,347 @@
|
||||
.payment-wrap {
|
||||
width: 1210px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
.item-block {
|
||||
padding: 0 15px 1px;
|
||||
margin: 10px 0;
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
background: #ffffff;
|
||||
.block-text {
|
||||
border-color: #eeeeee;
|
||||
color: $ns-text-color-black;
|
||||
padding: 7px 0;
|
||||
border-bottom: 1px;
|
||||
}
|
||||
.box{
|
||||
.liuyan-text{
|
||||
background-color: #F7F7F7;
|
||||
border: 2px solid #DADADA;
|
||||
height: 56px;
|
||||
width: 80%;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
border-radius: 4px;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
.padd-bom-10{
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.padd-bom-20{
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
//收货地址
|
||||
.address-desc {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
}
|
||||
.address-item {
|
||||
width: 23%;
|
||||
border: 3px solid #eee;
|
||||
box-sizing: border-box;
|
||||
margin: 1%;
|
||||
height: 150px;
|
||||
cursor: pointer;
|
||||
float: left;
|
||||
|
||||
.add-address {
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
line-height: 120px;
|
||||
}
|
||||
.address-info {
|
||||
padding: 10px;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
.options {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 10px;
|
||||
width: 50%;
|
||||
text-align: right;
|
||||
div {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
color: #999999;
|
||||
}
|
||||
}
|
||||
.address-name {
|
||||
color: $base-color;
|
||||
padding: 0px 0 6px;
|
||||
border-bottom: 1px solid #eee;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
padding-right: 71px;
|
||||
box-sizing: border-box;
|
||||
line-height: 25px;
|
||||
}
|
||||
.address-mobile {
|
||||
padding: 10px 0 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.address-item.active {
|
||||
background-color: #fffbf9;
|
||||
border-color: $base-color;
|
||||
}
|
||||
|
||||
//支付方式
|
||||
.pay-type-list {
|
||||
padding: 20px 0;
|
||||
}
|
||||
.distribution{
|
||||
color: #ff547b;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.pay-type-item {
|
||||
background-color: white;
|
||||
display: inline-block;
|
||||
border: 2px solid #eeeeee;
|
||||
padding: 5px 20px;
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.pay-type-item.active {
|
||||
border-color: $base-color;
|
||||
}
|
||||
.mobile-wrap {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
//商品列表
|
||||
.goods-list {
|
||||
padding: 15px 0;
|
||||
|
||||
.store-icon {
|
||||
margin-right: 5px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.shop-icon {
|
||||
font-size: 18px;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
.goods-info-left {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
float: left;
|
||||
.goods-img {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
}
|
||||
.goods-info-right {
|
||||
float: left;
|
||||
height: 60px;
|
||||
margin-left: 10px;
|
||||
color: $base-color;
|
||||
width: 80%;
|
||||
.goods-name {
|
||||
line-height: 20px;
|
||||
padding-top: 10px;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
}
|
||||
.goods-spec {
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
.goods-footer {
|
||||
background-color: #f3fbfe;
|
||||
padding: 10px;
|
||||
margin-top: 10px;
|
||||
.goods-footer-right {
|
||||
width: 50%;
|
||||
float: left;
|
||||
}
|
||||
.goods-footer-left {
|
||||
width: 50%;
|
||||
float: left;
|
||||
}
|
||||
.order-cell {
|
||||
cursor: pointer;
|
||||
.tit {
|
||||
padding: 5px 0 0 0;
|
||||
}
|
||||
}
|
||||
.express-item {
|
||||
margin-top: 5px;
|
||||
display: inline-block;
|
||||
border: 2px solid #eeeeee;
|
||||
padding: 3px 10px;
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.express-item.active {
|
||||
border-color: $base-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.promotion-show {
|
||||
color: #999;
|
||||
}
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
//统计
|
||||
.order-statistics {
|
||||
float: right;
|
||||
padding: 10px;
|
||||
// color: #999;
|
||||
}
|
||||
.order-submit {
|
||||
float: right;
|
||||
padding: 10px;
|
||||
}
|
||||
.order-money {
|
||||
display: inline-block;
|
||||
margin-right: 20px;
|
||||
div {
|
||||
display: inline-block;
|
||||
font-size: $ns-font-size-lg;
|
||||
}
|
||||
}
|
||||
|
||||
.buyer-message.el-textarea {
|
||||
width: 400px;
|
||||
}
|
||||
.address-open {
|
||||
cursor: pointer;
|
||||
font-size: 13px;
|
||||
padding: 0 0 10px 10px;
|
||||
}
|
||||
.pay-password-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.pay-password {
|
||||
width: 80%;
|
||||
}
|
||||
.pay-password.hide-password {
|
||||
position: fixed;
|
||||
top: -9999px;
|
||||
}
|
||||
.platform-coupon {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.forget-password {
|
||||
text-align: right;
|
||||
margin-right: 45px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.disabled-selected-wrap {
|
||||
pointer-events: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.cursor-pointer {
|
||||
cursor: pointer;
|
||||
}
|
||||
//发票样式
|
||||
.invoice-information {
|
||||
.invoice-type-box {
|
||||
display: inline-block;
|
||||
padding: 10px 0px;
|
||||
vertical-align: bottom;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
&.invoice-title-box {
|
||||
margin-right: 100px;
|
||||
}
|
||||
.invoice-name {
|
||||
margin-right: 25px;
|
||||
}
|
||||
.invoice-to-type {
|
||||
display: inline-block;
|
||||
margin-right: 30px;
|
||||
position: relative;
|
||||
// i{
|
||||
// width: 17px;
|
||||
// height: 17px;
|
||||
// display: inline-block;
|
||||
// position: absolute;
|
||||
// border-radius: 34px;
|
||||
// overflow: hidden;
|
||||
// top: 7px;
|
||||
// left:-1px;
|
||||
// background: #fff;
|
||||
// background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbUlEQVQ4jYXTsUvVURQH8I8PE1zKTdcEK7I/wNkkKpGgxNaGBqUQ3JT2xoQoaajmhhTEgoig1V0QdQiaCgTxJRK4PDlybtwe+vzCDw7n+/3ee+75ndPVmpzXhut4jDu4nNQPfMFbbNbyRhX34BW+YxdTuJTfw8wF9wa9xdRdmT/jD66g2VbVRn5LeI813MVRqWARB5g8xVyjmZq46EV5wjAe4BFaKR7CchqaGQ8l10pteIa7s2FLeWrgKtbRV918H6MYwXZqX4Y3KriN1Ur8vM1c0JdcwafwxgGD2KqIsQ49uFXFUclgo4P4PPSUvxBDcq0Sf+tg/FrFUfnPRk7YvYp4hv1TzPvJFYzHZXHAO8zgYhJb2e2VnI2DjEeqXoV2Nka77MJrDOSQlFk4C134iN94Upo4l6cGEbN/FoIrmvD8W6ajfNMv7GABN3Ahux1x5IKLpZpIz3/bGImnOXH9edMh9vAhczcxjb8nDhwDyjpTCJDO1nsAAAAASUVORK5CYII=);
|
||||
// background-size: 100% 100%;
|
||||
// }
|
||||
i {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
display: inline-block;
|
||||
border-radius: 34px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
vertical-align: text-bottom;
|
||||
border: 1px solid #999;
|
||||
&.active {
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbUlEQVQ4jYXTsUvVURQH8I8PE1zKTdcEK7I/wNkkKpGgxNaGBqUQ3JT2xoQoaajmhhTEgoig1V0QdQiaCgTxJRK4PDlybtwe+vzCDw7n+/3ee+75ndPVmpzXhut4jDu4nNQPfMFbbNbyRhX34BW+YxdTuJTfw8wF9wa9xdRdmT/jD66g2VbVRn5LeI813MVRqWARB5g8xVyjmZq46EV5wjAe4BFaKR7CchqaGQ8l10pteIa7s2FLeWrgKtbRV918H6MYwXZqX4Y3KriN1Ur8vM1c0JdcwafwxgGD2KqIsQ49uFXFUclgo4P4PPSUvxBDcq0Sf+tg/FrFUfnPRk7YvYp4hv1TzPvJFYzHZXHAO8zgYhJb2e2VnI2DjEeqXoV2Nka77MJrDOSQlFk4C134iN94Upo4l6cGEbN/FoIrmvD8W6ajfNMv7GABN3Ahux1x5IKLpZpIz3/bGImnOXH9edMh9vAhczcxjb8nDhwDyjpTCJDO1nsAAAAASUVORK5CYII=);
|
||||
background-size: 100% 100%;
|
||||
border: 0px solid #fff;
|
||||
}
|
||||
}
|
||||
input {
|
||||
vertical-align: middle;
|
||||
margin: 0px;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
}
|
||||
}
|
||||
.invoice-box-form {
|
||||
display: inline-block;
|
||||
input {
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
margin-right: 20px;
|
||||
border: 1px solid #dddddd;
|
||||
padding-left: 10px;
|
||||
border-radius: 3px;
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.invoice-condition {
|
||||
padding: 10px 0px;
|
||||
.invoice-name {
|
||||
margin-right: 25px;
|
||||
}
|
||||
.invoice-box-form {
|
||||
display: inline-block;
|
||||
.option-item {
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
&.active {
|
||||
color: #ff547b;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.invoice-tops{
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
BIN
addon/pc/source/os/assets/images/balance.png
Executable file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
addon/pc/source/os/assets/images/coupon-bg.png
Executable file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
addon/pc/source/os/assets/images/coupon.png
Executable file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
addon/pc/source/os/assets/images/coupon_bg.png
Executable file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
addon/pc/source/os/assets/images/coupon_type.png
Executable file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
addon/pc/source/os/assets/images/emjoy.png
Executable file
|
After Width: | Height: | Size: 858 B |
BIN
addon/pc/source/os/assets/images/floor_title.png
Executable file
|
After Width: | Height: | Size: 316 B |
BIN
addon/pc/source/os/assets/images/goods/coupon.png
Executable file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
addon/pc/source/os/assets/images/goods/discount_bg.png
Executable file
|
After Width: | Height: | Size: 15 KiB |
BIN
addon/pc/source/os/assets/images/goods/goods_detail_bg.png
Executable file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
addon/pc/source/os/assets/images/goods/qrcode.png
Executable file
|
After Width: | Height: | Size: 586 B |
BIN
addon/pc/source/os/assets/images/goods/split.png
Executable file
|
After Width: | Height: | Size: 316 B |
BIN
addon/pc/source/os/assets/images/goods_empty.png
Executable file
|
After Width: | Height: | Size: 113 KiB |
BIN
addon/pc/source/os/assets/images/gov_record.png
Executable file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
addon/pc/source/os/assets/images/index-1.png
Executable file
|
After Width: | Height: | Size: 117 KiB |
BIN
addon/pc/source/os/assets/images/index-2.png
Executable file
|
After Width: | Height: | Size: 95 KiB |
BIN
addon/pc/source/os/assets/images/index-3.png
Executable file
|
After Width: | Height: | Size: 81 KiB |
BIN
addon/pc/source/os/assets/images/index-4.png
Executable file
|
After Width: | Height: | Size: 96 KiB |
BIN
addon/pc/source/os/assets/images/index-5.png
Executable file
|
After Width: | Height: | Size: 17 KiB |
BIN
addon/pc/source/os/assets/images/index-6.png
Executable file
|
After Width: | Height: | Size: 26 KiB |
BIN
addon/pc/source/os/assets/images/index-coupon.png
Executable file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
addon/pc/source/os/assets/images/index/404.png
Executable file
|
After Width: | Height: | Size: 27 KiB |
BIN
addon/pc/source/os/assets/images/index/adv_middle_01.png
Executable file
|
After Width: | Height: | Size: 329 KiB |
BIN
addon/pc/source/os/assets/images/index/adv_middle_02.jpg
Executable file
|
After Width: | Height: | Size: 18 KiB |
BIN
addon/pc/source/os/assets/images/index/adv_middle_03.png
Executable file
|
After Width: | Height: | Size: 333 KiB |
BIN
addon/pc/source/os/assets/images/index/closed.png
Executable file
|
After Width: | Height: | Size: 22 KiB |
BIN
addon/pc/source/os/assets/images/index/index_card.png
Executable file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
addon/pc/source/os/assets/images/index/index_code.png
Executable file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
addon/pc/source/os/assets/images/index/index_member.png
Executable file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
addon/pc/source/os/assets/images/index/index_service.png
Executable file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
addon/pc/source/os/assets/images/index/index_top.png
Executable file
|
After Width: | Height: | Size: 722 B |
BIN
addon/pc/source/os/assets/images/kefupng.png
Executable file
|
After Width: | Height: | Size: 640 KiB |
BIN
addon/pc/source/os/assets/images/limited_time.png
Executable file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
addon/pc/source/os/assets/images/list_bj.png
Executable file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
addon/pc/source/os/assets/images/logo.png
Executable file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
addon/pc/source/os/assets/images/member-empty.png
Executable file
|
After Width: | Height: | Size: 11 KiB |
BIN
addon/pc/source/os/assets/images/no_coupon.png
Executable file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
addon/pc/source/os/assets/images/order_time.png
Executable file
|
After Width: | Height: | Size: 810 B |
BIN
addon/pc/source/os/assets/images/payment/address-border.png
Executable file
|
After Width: | Height: | Size: 16 KiB |
BIN
addon/pc/source/os/assets/images/point.png
Executable file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
addon/pc/source/os/assets/images/shop-defaultImg.png
Executable file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
addon/pc/source/os/assets/images/shop_index.png
Executable file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
addon/pc/source/os/assets/images/superposition.png
Executable file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
addon/pc/source/os/assets/images/upload.png
Executable file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
addon/pc/source/os/assets/images/wxewm.png
Executable file
|
After Width: | Height: | Size: 45 KiB |
303
addon/pc/source/os/assets/js/auth/find.js
Executable file
@@ -0,0 +1,303 @@
|
||||
import {
|
||||
rePass,
|
||||
nextStep,
|
||||
smsCode,
|
||||
registerConfig
|
||||
} from "@/api/auth/login"
|
||||
import {
|
||||
captcha
|
||||
} from "@/api/website"
|
||||
|
||||
export default {
|
||||
data() {
|
||||
var isMobile = (rule, value, callback) => {
|
||||
if (!value) {
|
||||
return callback(new Error("手机号不能为空"))
|
||||
} else {
|
||||
|
||||
if (/^\d{11}$/.test(value)) {
|
||||
callback()
|
||||
} else {
|
||||
callback(new Error("请输入正确的手机号"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let self = this
|
||||
var setPass = function (rule, value, callback) {
|
||||
let regConfig = self.registerConfig
|
||||
if (!value) {
|
||||
return callback(new Error("请输入新的登录密码"))
|
||||
} else {
|
||||
if (regConfig.pwd_len > 0) {
|
||||
if (value.length < regConfig.pwd_len) {
|
||||
return callback(new Error("密码长度不能小于" + regConfig.pwd_len + "位"))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
} else {
|
||||
if (regConfig.pwd_complexity != "") {
|
||||
let passwordErrorMsg = "密码需包含",
|
||||
reg = ""
|
||||
if (regConfig.pwd_complexity.indexOf("number") != -1) {
|
||||
reg += "(?=.*?[0-9])"
|
||||
passwordErrorMsg += "数字"
|
||||
} else if (regConfig.pwd_complexity.indexOf("letter") != -1) {
|
||||
reg += "(?=.*?[a-z])"
|
||||
passwordErrorMsg += "、小写字母"
|
||||
} else if (regConfig.pwd_complexity.indexOf("upper_case") != -1) {
|
||||
reg += "(?=.*?[A-Z])"
|
||||
passwordErrorMsg += "、大写字母"
|
||||
} else if (regConfig.pwd_complexity.indexOf("symbol") != -1) {
|
||||
reg += "(?=.*?[#?!@$%^&*-])"
|
||||
passwordErrorMsg += "、特殊字符"
|
||||
} else {
|
||||
reg += ""
|
||||
passwordErrorMsg += ""
|
||||
}
|
||||
|
||||
if (reg.test(value)) {
|
||||
return callback(new Error(passwordErrorMsg))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var checkPass = function (rule, value, callback) {
|
||||
if (!value) {
|
||||
return callback(new Error("请输入确认密码"))
|
||||
} else {
|
||||
if (value !== self.formData.pass) {
|
||||
callback(new Error("两次密码输入不一致"))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
formData: {
|
||||
mobile: "",
|
||||
vercode: "",
|
||||
dynacode: "",
|
||||
pass: "",
|
||||
repass: "",
|
||||
key: ""
|
||||
},
|
||||
step: 1,
|
||||
activeName: "first",
|
||||
isShowPhone: "",
|
||||
captcha: {
|
||||
id: "",
|
||||
img: ""
|
||||
},
|
||||
// 验证码
|
||||
dynacodeData: {
|
||||
seconds: 120,
|
||||
timer: null,
|
||||
codeText: "获取动态码",
|
||||
isSend: false
|
||||
},
|
||||
// 动态码
|
||||
registerConfig: {},
|
||||
rules: {
|
||||
mobile: [{
|
||||
required: true,
|
||||
validator: isMobile,
|
||||
trigger: "blur"
|
||||
}],
|
||||
vercode: [{
|
||||
required: true,
|
||||
message: "请输入验证码",
|
||||
trigger: "blur"
|
||||
}],
|
||||
dynacode: [{
|
||||
required: true,
|
||||
message: "请输入短信动态码",
|
||||
trigger: "blur"
|
||||
}],
|
||||
pass: [{
|
||||
required: true,
|
||||
validator: setPass,
|
||||
trigger: "blur"
|
||||
}],
|
||||
repass: [{
|
||||
required: true,
|
||||
validator: checkPass,
|
||||
trigger: "blur"
|
||||
}]
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getCaptcha()
|
||||
this.getRegisterConfig()
|
||||
},
|
||||
head() {
|
||||
return {
|
||||
title: '找回密码-' + this.$store.state.site.siteInfo.site_name
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"dynacodeData.seconds": {
|
||||
handler(newValue, oldValue) {
|
||||
if (newValue == 0) {
|
||||
clearInterval(this.dynacodeData.timer)
|
||||
this.dynacodeData = {
|
||||
seconds: 120,
|
||||
timer: null,
|
||||
codeText: "获取动态码",
|
||||
isSend: false
|
||||
}
|
||||
}
|
||||
},
|
||||
immediate: true,
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 下一步
|
||||
*/
|
||||
nextStep(formName) {
|
||||
this.$refs[formName].validate(valid => {
|
||||
if (valid) {
|
||||
nextStep({
|
||||
mobile: this.formData.mobile
|
||||
}).then(res => {
|
||||
if (res.code == -1) {
|
||||
this.step = 2
|
||||
} else {
|
||||
this.$message({
|
||||
message: res.message,
|
||||
type: "warning"
|
||||
})
|
||||
}
|
||||
}).catch(err => {
|
||||
if (err.code == 0) {
|
||||
this.$message({
|
||||
message: "该手机号未注册",
|
||||
type: "warning"
|
||||
})
|
||||
} else {
|
||||
this.$message.error(err.message)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 获取动态验证码 下一步
|
||||
*/
|
||||
nextStepToSetPass(formName) {
|
||||
this.$refs[formName].validate(valid => {
|
||||
if (valid) {
|
||||
this.step = 3
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 重置密码
|
||||
*/
|
||||
resetPass(formName) {
|
||||
this.$refs[formName].validate(valid => {
|
||||
if (valid) {
|
||||
rePass({
|
||||
password: this.formData.pass,
|
||||
code: this.formData.dynacode,
|
||||
key: this.formData.key,
|
||||
mobile: this.formData.mobile
|
||||
}).then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.step = 4
|
||||
this.$message({
|
||||
message: res.message,
|
||||
type: "success"
|
||||
})
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err.message)
|
||||
})
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 获取验证码
|
||||
*/
|
||||
getCaptcha() {
|
||||
captcha({
|
||||
captcha_id: this.captcha.id
|
||||
}).then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.captcha.id = res.data.id
|
||||
this.captcha.img = res.data.img
|
||||
this.captcha.img = this.captcha.img.replace(/\r\n/g, "")
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err.message)
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 发送手机动态码
|
||||
*/
|
||||
sendMobileCode(formName) {
|
||||
if (this.dynacodeData.seconds != 120) return
|
||||
this.$refs[formName].clearValidate("dynacode")
|
||||
this.$refs[formName].validateField("vercode", valid => {
|
||||
if (!valid) {
|
||||
if (this.isSend) return
|
||||
this.isSend = true
|
||||
|
||||
smsCode({
|
||||
captcha_id: this.captcha.id,
|
||||
captcha_code: this.formData.vercode,
|
||||
mobile: this.formData.mobile
|
||||
}).then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.formData.key = res.data.key
|
||||
|
||||
if (this.dynacodeData.seconds == 120 && this.dynacodeData.timer == null) {
|
||||
this.dynacodeData.timer = setInterval(() => {
|
||||
this.dynacodeData.seconds--
|
||||
this.dynacodeData.codeText = this.dynacodeData.seconds + "s后可重新获取"
|
||||
}, 1000)
|
||||
} else {
|
||||
this.$message({
|
||||
message: res.message,
|
||||
type: "warning"
|
||||
})
|
||||
this.isSend = false
|
||||
this.getCaptcha()
|
||||
}
|
||||
}
|
||||
}).catch(err => {
|
||||
this.isSend = false
|
||||
this.getCaptcha()
|
||||
this.$message.error(err.message)
|
||||
})
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 获取注册配置
|
||||
*/
|
||||
getRegisterConfig() {
|
||||
registerConfig().then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.registerConfig = res.data.value
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
537
addon/pc/source/os/assets/js/auth/login.js
Executable file
@@ -0,0 +1,537 @@
|
||||
import {
|
||||
mobileCode,
|
||||
registerConfig,
|
||||
wechatMobileCode,
|
||||
} from "@/api/auth/login"
|
||||
import {
|
||||
adList,
|
||||
captcha
|
||||
} from "@/api/website"
|
||||
import {
|
||||
isWechatLogin
|
||||
} from "@/api/wechat"
|
||||
|
||||
export default {
|
||||
data: () => {
|
||||
var isMobile = (rule, value, callback) => {
|
||||
if (!value) {
|
||||
return callback(new Error("手机号不能为空"))
|
||||
} else {
|
||||
|
||||
if (/^\d{11}$/.test(value)) {
|
||||
callback()
|
||||
} else {
|
||||
callback(new Error("请输入正确的手机号"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
qrcodeData: {
|
||||
time: 0,
|
||||
timer: 0,
|
||||
},
|
||||
wx_key: '',
|
||||
expire_time: '',
|
||||
ischecked: false,
|
||||
ischecked1: false,
|
||||
activeName: "first", // tab切换
|
||||
|
||||
// 表单数据
|
||||
formData: {
|
||||
account: "",
|
||||
password: "",
|
||||
vercode: "",
|
||||
mobile: "",
|
||||
dynacode: "",
|
||||
key: "",
|
||||
checked: false,
|
||||
autoLoginRange: 7
|
||||
},
|
||||
// 验证码
|
||||
captcha: {
|
||||
id: "",
|
||||
img: ""
|
||||
},
|
||||
// 动态码
|
||||
dynacodeData: {
|
||||
seconds: 120,
|
||||
timer: null,
|
||||
codeText: "获取动态码",
|
||||
isSend: false
|
||||
},
|
||||
// 提交防重复
|
||||
isSub: false,
|
||||
registerConfig: {
|
||||
is_enable: 1,
|
||||
register: '',
|
||||
login: ''
|
||||
},
|
||||
accountRules: {
|
||||
account: [{
|
||||
required: true,
|
||||
message: "请输入登录账号",
|
||||
trigger: "blur"
|
||||
}],
|
||||
password: [{
|
||||
required: true,
|
||||
message: "请输入登录密码",
|
||||
trigger: "blur"
|
||||
}],
|
||||
vercode: [{
|
||||
required: true,
|
||||
message: "请输入验证码",
|
||||
trigger: "blur"
|
||||
}]
|
||||
},
|
||||
mobileRules: {
|
||||
mobile: [{
|
||||
required: true,
|
||||
validator: isMobile,
|
||||
trigger: "blur"
|
||||
}],
|
||||
vercode: [{
|
||||
required: true,
|
||||
message: "请输入验证码",
|
||||
trigger: "blur"
|
||||
}],
|
||||
dynacode: [{
|
||||
required: true,
|
||||
message: "请输入短信动态码",
|
||||
trigger: "blur"
|
||||
}]
|
||||
},
|
||||
wechatRules: {
|
||||
mobile: [{
|
||||
required: true,
|
||||
validator: isMobile,
|
||||
trigger: "blur"
|
||||
}],
|
||||
vercode: [{
|
||||
required: true,
|
||||
message: "请输入验证码",
|
||||
trigger: "blur"
|
||||
}],
|
||||
dynacode: [{
|
||||
required: true,
|
||||
message: "请输入短信动态码",
|
||||
trigger: "blur"
|
||||
}]
|
||||
},
|
||||
codeRules: {
|
||||
mobile: [{
|
||||
required: true,
|
||||
validator: isMobile,
|
||||
trigger: "blur"
|
||||
}],
|
||||
vercode: [{
|
||||
required: true,
|
||||
message: "请输入验证码",
|
||||
trigger: "blur"
|
||||
}]
|
||||
},
|
||||
loadingAd: true,
|
||||
adList: [],
|
||||
backgroundColor: '',
|
||||
img: '',
|
||||
third_party: 0,
|
||||
wechatConfigStatus: 0,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.ischecked = this.$route.params.third_party;
|
||||
if (this.ischecked) {
|
||||
this.weixinLogin()
|
||||
}
|
||||
this.getAdList()
|
||||
this.getCaptcha()
|
||||
this.getRegisterConfig()
|
||||
this.getIsWechatLogin()
|
||||
},
|
||||
head() {
|
||||
return {
|
||||
title: '登录-' + this.$store.state.site.siteInfo.site_name
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"dynacodeData.seconds": {
|
||||
handler(newValue, oldValue) {
|
||||
if (newValue == 0) {
|
||||
clearInterval(this.dynacodeData.timer)
|
||||
this.dynacodeData = {
|
||||
seconds: 120,
|
||||
timer: null,
|
||||
codeText: "获取动态码",
|
||||
isSend: false
|
||||
}
|
||||
}
|
||||
},
|
||||
immediate: true,
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getIsWechatLogin() {
|
||||
isWechatLogin().then(res => {
|
||||
if (res.code == 0) {
|
||||
this.wechatConfigStatus = res.data.wechat_config_status;
|
||||
}
|
||||
})
|
||||
},
|
||||
getAdList() {
|
||||
adList({
|
||||
keyword: "NS_PC_LOGIN"
|
||||
}).then(res => {
|
||||
if (res.code == 0 && res.data.adv_list) {
|
||||
this.adList = res.data.adv_list
|
||||
for (let i = 0; i < this.adList.length; i++) {
|
||||
if (this.adList[i].adv_url) this.adList[i].adv_url = JSON.parse(this.adList[i].adv_url)
|
||||
}
|
||||
this.backgroundColor = this.adList[0].background
|
||||
}
|
||||
|
||||
this.loadingAd = false
|
||||
}).catch(err => {
|
||||
this.loadingAd = false
|
||||
})
|
||||
},
|
||||
handleClick(tab, event) {
|
||||
},
|
||||
handleChange(curr, pre) {
|
||||
this.backgroundColor = this.adList[curr].background
|
||||
},
|
||||
/**
|
||||
* 账号登录
|
||||
*/
|
||||
accountLogin(formName) {
|
||||
this.$refs[formName].validate(valid => {
|
||||
if (valid) {
|
||||
var data = {
|
||||
username: this.formData.account,
|
||||
password: this.formData.password
|
||||
}
|
||||
|
||||
if (this.captcha.id != "") {
|
||||
data.captcha_id = this.captcha.id
|
||||
data.captcha_code = this.formData.vercode
|
||||
}
|
||||
|
||||
if (this.formData.checked) {
|
||||
data.autoLoginRange = this.formData.autoLoginRange
|
||||
}
|
||||
|
||||
if (this.isSub) return
|
||||
this.isSub = true
|
||||
|
||||
this.$store
|
||||
.dispatch("member/login", data)
|
||||
.then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.$message({
|
||||
message: "登录成功!",
|
||||
type: "success"
|
||||
})
|
||||
if (this.$route.query.redirect) {
|
||||
const a = this.$route.query.redirect
|
||||
const b = this.$route.query
|
||||
this.$router.push(this.$route.query.redirect)
|
||||
|
||||
} else {
|
||||
this.$router.push({
|
||||
name: "member"
|
||||
})
|
||||
}
|
||||
} else {
|
||||
this.isSub = false
|
||||
this.getCaptcha()
|
||||
this.$message({
|
||||
message: res.message,
|
||||
type: "warning"
|
||||
})
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
this.isSub = false
|
||||
this.$message.error(err.message)
|
||||
this.getCaptcha()
|
||||
})
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 手机号登录
|
||||
*/
|
||||
mobileLogin(formName) {
|
||||
this.$refs[formName].validate(valid => {
|
||||
if (valid) {
|
||||
var data = {
|
||||
mobile: this.formData.mobile,
|
||||
key: this.formData.key,
|
||||
code: this.formData.dynacode
|
||||
}
|
||||
|
||||
if (this.captcha.id != "") {
|
||||
data.captcha_id = this.captcha.id
|
||||
data.captcha_code = this.formData.vercode
|
||||
}
|
||||
|
||||
if (this.isSub) return
|
||||
this.isSub = true
|
||||
|
||||
this.$store.dispatch("member/mobile_login", data).then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.$message({
|
||||
message: "登录成功!",
|
||||
type: "success"
|
||||
})
|
||||
if (this.$route.query.redirect) {
|
||||
this.$router.push(this.$route.query.redirect)
|
||||
} else {
|
||||
this.$router.push({
|
||||
name: "member"
|
||||
})
|
||||
}
|
||||
} else {
|
||||
this.isSub = false
|
||||
this.getCaptcha()
|
||||
this.$message({
|
||||
message: res.message,
|
||||
type: "warning"
|
||||
})
|
||||
}
|
||||
}).catch(err => {
|
||||
this.isSub = false
|
||||
this.$message.error(err.message)
|
||||
this.getCaptcha()
|
||||
})
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 微信登录
|
||||
*/
|
||||
wechatLogin(formName) {
|
||||
this.$refs[formName].validate(valid => {
|
||||
if (valid) {
|
||||
var data = {
|
||||
mobile: this.formData.mobile,
|
||||
key: this.formData.key,
|
||||
code: this.formData.dynacode
|
||||
}
|
||||
|
||||
if (this.captcha.id != "") {
|
||||
data.captcha_id = this.captcha.id
|
||||
data.captcha_code = this.formData.vercode
|
||||
}
|
||||
|
||||
if (this.isSub) return
|
||||
this.isSub = true
|
||||
|
||||
this.$store.dispatch("wechat/wechatLogin", data).then(res => {
|
||||
|
||||
if (res.code >= 0) {
|
||||
this.$message({
|
||||
message: "登录成功!",
|
||||
type: "success"
|
||||
})
|
||||
if (this.$route.query.redirect) {
|
||||
this.$router.push(this.$route.query.redirect)
|
||||
} else {
|
||||
this.$router.push({
|
||||
name: "member"
|
||||
})
|
||||
}
|
||||
} else {
|
||||
this.isSub = false
|
||||
this.getCaptcha()
|
||||
this.$message({
|
||||
message: res.message,
|
||||
type: "warning"
|
||||
})
|
||||
}
|
||||
}).catch(err => {
|
||||
this.isSub = false
|
||||
this.$message.error(err.message)
|
||||
this.getCaptcha()
|
||||
})
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
},
|
||||
weixinLogin() {
|
||||
this.ischecked = true;
|
||||
this.$store.dispatch("wechat/loginCode").then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.img = res.data.qrcode;
|
||||
this.wx_key = res.data.key;
|
||||
this.expire_time = res.data.expire_time;
|
||||
this.qrcodeData.timer = setInterval(() => {
|
||||
this.checkLogin()
|
||||
}, 2000);
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 检测是否扫码
|
||||
checkLogin() {
|
||||
this.qrcodeData.time += 2;
|
||||
if (this.qrcodeData.time > this.expire_time) {
|
||||
clearInterval(this.qrcodeData.timer);
|
||||
return;
|
||||
}
|
||||
var data = {
|
||||
key: this.wx_key
|
||||
};
|
||||
this.$store.dispatch("wechat/checkLogin", data).then(res => {
|
||||
if (res.code >= 0) {
|
||||
if (res.data.token != undefined) {
|
||||
this.$message({
|
||||
message: "登录成功!",
|
||||
type: "success"
|
||||
})
|
||||
if (this.$route.query.redirect) {
|
||||
this.$router.push(this.$route.query.redirect)
|
||||
} else {
|
||||
this.$router.push({
|
||||
name: "member"
|
||||
})
|
||||
}
|
||||
} else {
|
||||
this.ischecked1 = true;
|
||||
}
|
||||
|
||||
clearInterval(this.qrcodeData.timer);
|
||||
}
|
||||
})
|
||||
},
|
||||
closeWx() {
|
||||
this.ischecked = false;
|
||||
},
|
||||
closeWx1() {
|
||||
this.ischecked = false;
|
||||
this.ischecked1 = false;
|
||||
},
|
||||
/**
|
||||
* 获取注册配置
|
||||
*/
|
||||
getRegisterConfig() {
|
||||
registerConfig()
|
||||
.then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.registerConfig = res.data.value
|
||||
if (this.registerConfig.login.indexOf('username') != -1) {
|
||||
this.activeName = 'first';
|
||||
} else {
|
||||
this.activeName = 'second';
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 获取验证码
|
||||
*/
|
||||
getCaptcha() {
|
||||
captcha({
|
||||
captcha_id: this.captcha.id
|
||||
}).then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.captcha.id = res.data.id
|
||||
this.captcha.img = res.data.img
|
||||
this.captcha.img = this.captcha.img.replace(/\r\n/g, "")
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err.message)
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 发送手机动态码
|
||||
*/
|
||||
sendMobileCode(formName) {
|
||||
if (this.dynacodeData.seconds != 120) return
|
||||
this.$refs[formName].clearValidate("dynacode")
|
||||
|
||||
this.$refs[formName].validateField("mobile", valid => {
|
||||
if (valid) {
|
||||
return false
|
||||
}
|
||||
})
|
||||
this.$refs[formName].validateField("vercode", valid => {
|
||||
if (!valid) {
|
||||
mobileCode({
|
||||
mobile: this.formData.mobile,
|
||||
captcha_id: this.captcha.id,
|
||||
captcha_code: this.formData.vercode
|
||||
}).then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.formData.key = res.data.key
|
||||
if (this.dynacodeData.seconds == 120 && this.dynacodeData.timer == null) {
|
||||
this.dynacodeData.timer = setInterval(() => {
|
||||
this.dynacodeData.seconds--
|
||||
this.dynacodeData.codeText = this.dynacodeData.seconds + "s后可重新获取"
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err.message)
|
||||
})
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 发送微信绑定手机动态码
|
||||
*/
|
||||
sendWechatMobileCode(formName) {
|
||||
if (this.dynacodeData.seconds != 120) return
|
||||
this.$refs[formName].clearValidate("dynacode")
|
||||
|
||||
this.$refs[formName].validateField("mobile", valid => {
|
||||
if (valid) {
|
||||
return false
|
||||
}
|
||||
})
|
||||
this.$refs[formName].validateField("vercode", valid => {
|
||||
if (!valid) {
|
||||
wechatMobileCode({
|
||||
mobile: this.formData.mobile,
|
||||
captcha_id: this.captcha.id,
|
||||
captcha_code: this.formData.vercode
|
||||
}).then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.formData.key = res.data.key
|
||||
if (this.dynacodeData.seconds == 120 && this.dynacodeData.timer == null) {
|
||||
this.dynacodeData.timer = setInterval(() => {
|
||||
this.dynacodeData.seconds--
|
||||
this.dynacodeData.codeText = this.dynacodeData.seconds + "s后可重新获取"
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err.message)
|
||||
})
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
},
|
||||
keypress(e) {
|
||||
let that = this;
|
||||
var keycode = e.all ? e.keyCode : e.which;
|
||||
if (keycode == 13) {
|
||||
if (that.activeName == "first") {
|
||||
that.accountLogin('ruleForm'); // 登录方法名
|
||||
} else {
|
||||
that.mobileLogin('mobileRuleForm'); // 登录方法名
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
324
addon/pc/source/os/assets/js/goods/cart.js
Executable file
@@ -0,0 +1,324 @@
|
||||
import {
|
||||
mapGetters
|
||||
} from "vuex"
|
||||
import {
|
||||
cartList
|
||||
} from "@/api/goods/cart"
|
||||
|
||||
export default {
|
||||
data: () => {
|
||||
return {
|
||||
cartList: [], // 购物车
|
||||
checkAll: false,
|
||||
totalPrice: "0.00",
|
||||
totalCount: 0,
|
||||
invalidGoods: [], // 失效商品集合
|
||||
loading: true,
|
||||
modifyNum: 1, // 防止数量跳动
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getCartList()
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(["defaultGoodsImage"])
|
||||
},
|
||||
middleware: 'auth',
|
||||
methods: {
|
||||
// 获取购物车数据
|
||||
getCartList() {
|
||||
cartList({}).then(res => {
|
||||
if (res.code >= 0 && res.data.length) {
|
||||
this.handleCartList(res.data)
|
||||
}
|
||||
this.loading = false
|
||||
}).catch(res => {
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 处理购物车数据结构
|
||||
handleCartList(data) {
|
||||
this.invalidGoods = []
|
||||
this.cartList = []
|
||||
var temp = {}
|
||||
data.forEach((item, index) => {
|
||||
if (item.goods_state == 1) {
|
||||
item.checked = true
|
||||
if (temp["site_" + item.site_id] != undefined) {
|
||||
temp["site_" + item.site_id].cartList.push(item)
|
||||
} else {
|
||||
temp["site_" + item.site_id] = {
|
||||
siteId: item.site_id,
|
||||
siteName: item.site_name,
|
||||
checked: true,
|
||||
cartList: [item]
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.invalidGoods.push(item)
|
||||
}
|
||||
})
|
||||
|
||||
this.invalidGoods.forEach(v => {
|
||||
if (v.sku_spec_format) {
|
||||
v.sku_spec_format = JSON.parse(v.sku_spec_format)
|
||||
} else {
|
||||
v.sku_spec_format = []
|
||||
}
|
||||
})
|
||||
Object.keys(temp).forEach(key => {
|
||||
this.cartList.push(temp[key])
|
||||
})
|
||||
this.calculationTotalPrice()
|
||||
this.cartList.forEach(v => {
|
||||
v.cartList.forEach(k => {
|
||||
if (k.sku_spec_format) {
|
||||
k.sku_spec_format = JSON.parse(k.sku_spec_format)
|
||||
} else {
|
||||
k.sku_spec_format = []
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
// 单选
|
||||
singleElection(siteIndex, index) {
|
||||
this.calculationTotalPrice()
|
||||
},
|
||||
// 店铺全选
|
||||
siteAllElection(index) {
|
||||
this.cartList[index].cartList.forEach(item => {
|
||||
item.checked = this.cartList[index].checked
|
||||
})
|
||||
this.calculationTotalPrice()
|
||||
},
|
||||
// 全选
|
||||
allElection() {
|
||||
if (this.cartList.length) {
|
||||
this.cartList.forEach(siteItem => {
|
||||
siteItem.checked = this.checkAll
|
||||
siteItem.cartList.forEach(item => {
|
||||
item.checked = this.checkAll
|
||||
})
|
||||
})
|
||||
}
|
||||
this.calculationTotalPrice()
|
||||
},
|
||||
// 计算购物车总价
|
||||
calculationTotalPrice() {
|
||||
if (this.cartList.length) {
|
||||
let totalPrice = 0,
|
||||
totalCount = 0,
|
||||
siteAllElectionCount = 0
|
||||
|
||||
this.cartList.forEach(siteItem => {
|
||||
let siteGoodsCount = 0
|
||||
siteItem.cartList.forEach(item => {
|
||||
if (item.checked) {
|
||||
siteGoodsCount += 1
|
||||
totalCount += 1
|
||||
totalPrice += item.discount_price * item.num
|
||||
}
|
||||
})
|
||||
if (siteItem.cartList.length == siteGoodsCount) {
|
||||
siteItem.checked = true
|
||||
siteAllElectionCount += 1
|
||||
} else {
|
||||
siteItem.checked = false
|
||||
}
|
||||
})
|
||||
this.totalPrice = totalPrice.toFixed(2)
|
||||
this.totalCount = totalCount
|
||||
this.checkAll = this.cartList.length == siteAllElectionCount
|
||||
} else {
|
||||
this.totalPrice = "0.00"
|
||||
this.totalCount = 0
|
||||
}
|
||||
this.modifyNum = 1;
|
||||
},
|
||||
// 删除单个
|
||||
deleteCart(siteIndex, cartIndex) {
|
||||
this.$confirm("确定要删除该商品吗?", "提示信息", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$store.dispatch("cart/delete_cart", {
|
||||
cart_id: this.cartList[siteIndex].cartList[cartIndex].cart_id.toString()
|
||||
}).then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.cartList[siteIndex].cartList.splice(cartIndex, 1)
|
||||
if (this.cartList[siteIndex].cartList.length == 0) this.cartList.splice(siteIndex, 1)
|
||||
this.calculationTotalPrice()
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "删除成功"
|
||||
})
|
||||
} else {
|
||||
this.$message({
|
||||
message: res.message,
|
||||
type: "warning"
|
||||
})
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err.message)
|
||||
})
|
||||
})
|
||||
},
|
||||
// 删除选择的购物车
|
||||
deleteCartSelected() {
|
||||
var cartIds = []
|
||||
var selectedItem = []
|
||||
this.cartList.forEach((siteItem, siteIndex) => {
|
||||
siteItem.cartList.forEach((item, cartIndex) => {
|
||||
if (item.checked) {
|
||||
cartIds.push(item.cart_id)
|
||||
selectedItem.push({
|
||||
siteIndex: siteIndex,
|
||||
cartIndex: cartIndex,
|
||||
siteId: siteItem.siteId,
|
||||
cartId: item.cart_id
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
if (cartIds.length == 0) {
|
||||
this.$message({
|
||||
message: "请选择要删除的商品",
|
||||
type: "warning"
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
this.$confirm("确定要删除选择的商品吗?", "提示信息", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$store.dispatch("cart/delete_cart", {
|
||||
cart_id: cartIds.toString()
|
||||
}).then(res => {
|
||||
if (res.code >= 0) {
|
||||
selectedItem.forEach(selectedItem => {
|
||||
this.cartList.forEach((siteItem, siteIndex) => {
|
||||
siteItem.cartList.forEach((item, cartIndex) => {
|
||||
if (selectedItem.cartId == item.cart_id) {
|
||||
siteItem.cartList.splice(cartIndex, 1)
|
||||
}
|
||||
if (siteItem.cartList.length == 0) {
|
||||
this.cartList.splice(siteIndex, 1)
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
this.calculationTotalPrice()
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "删除成功"
|
||||
})
|
||||
} else {
|
||||
this.$message({
|
||||
message: res.message,
|
||||
type: "warning"
|
||||
})
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err.message)
|
||||
})
|
||||
})
|
||||
},
|
||||
// 清空失效商品
|
||||
clearInvalidGoods() {
|
||||
this.$confirm("确认要清空这些商品吗?", "提示信息", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
var cartIds = []
|
||||
this.invalidGoods.forEach(goodsItem => {
|
||||
cartIds.push(goodsItem.cart_id)
|
||||
})
|
||||
if (cartIds.length) {
|
||||
this.$store.dispatch("cart/delete_cart", {
|
||||
cart_id: cartIds.toString()
|
||||
}).then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.invalidGoods = []
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "删除成功"
|
||||
})
|
||||
} else {
|
||||
this.$message({
|
||||
message: res.message,
|
||||
type: "warning"
|
||||
})
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err.message)
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
// 变更购物车数量
|
||||
cartNumChange(num, params) {
|
||||
if (num < 1 || !num) num = 1;
|
||||
|
||||
// 防止数量跳动
|
||||
this.modifyNum = 0;
|
||||
this.$store.dispatch("cart/edit_cart_num", {
|
||||
num,
|
||||
cart_id: this.cartList[params.siteIndex].cartList[params.cartIndex].cart_id
|
||||
}).then(res => {
|
||||
if (res.code >= 0) {
|
||||
this.cartList[params.siteIndex].cartList[params.cartIndex].num = num;
|
||||
this.calculationTotalPrice();
|
||||
} else {
|
||||
this.$message({
|
||||
message: res.message,
|
||||
type: "warning"
|
||||
});
|
||||
this.modifyNum = 1;
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err.message);
|
||||
this.modifyNum = 1;
|
||||
})
|
||||
},
|
||||
// 结算
|
||||
settlement() {
|
||||
if (this.totalCount > 0) {
|
||||
let cart_ids = []
|
||||
this.cartList.forEach(siteItem => {
|
||||
siteItem.cartList.forEach(item => {
|
||||
if (item.checked) {
|
||||
cart_ids.push(item.cart_id)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
if (cart_ids.length > 100) {
|
||||
this.$message({
|
||||
message: '购物车最多支持100个商品一起购买',
|
||||
type: "warning"
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
var data = {
|
||||
cart_ids: cart_ids.toString()
|
||||
}
|
||||
this.$store.dispatch("order/setOrderCreateData", data)
|
||||
this.$router.push({
|
||||
path: "/order/payment"
|
||||
})
|
||||
}
|
||||
},
|
||||
imageError(siteIndex, cartIndex) {
|
||||
this.cartList[siteIndex].cartList[cartIndex].sku_image = this.defaultGoodsImage
|
||||
},
|
||||
imageErrorInvalid(index) {
|
||||
this.invalidGoods[index].sku_image = this.defaultGoodsImage
|
||||
}
|
||||
}
|
||||
}
|
||||
1090
addon/pc/source/os/assets/js/goods/detail.js
Executable file
258
addon/pc/source/os/assets/js/goods/list.js
Executable file
@@ -0,0 +1,258 @@
|
||||
import {
|
||||
goodsSkuPage,
|
||||
brandPage
|
||||
} from "@/api/goods/goods"
|
||||
import {
|
||||
mapGetters
|
||||
} from "vuex"
|
||||
import {
|
||||
goodsCategoryInfo,
|
||||
goodsCategoryList
|
||||
} from "@/api/goods/goodscategory"
|
||||
|
||||
export default {
|
||||
data: () => {
|
||||
return {
|
||||
goodsList: [],
|
||||
total: 0,
|
||||
keyword: "",
|
||||
catewords: '',
|
||||
currentPage: 1,
|
||||
pageSize: 25,
|
||||
is_free_shipping: 0,
|
||||
filters: {
|
||||
category_id: 0,
|
||||
category_level: 0,
|
||||
brand_id: 0,
|
||||
min_price: "",
|
||||
max_price: "",
|
||||
order: "",
|
||||
sort: "desc",
|
||||
coupon: 0
|
||||
},
|
||||
loading: true,
|
||||
first_index: 0,
|
||||
categoryList: [],
|
||||
selectCategoryId: 0,
|
||||
// 全部商品分类链接
|
||||
categoryAll: {
|
||||
id: 0,
|
||||
level: 0,
|
||||
isAllow: true // 是否允许选中
|
||||
},
|
||||
|
||||
brandList: [], // 品牌列表
|
||||
brandInitialList: [],
|
||||
currentInitial: "", // 当前选择品牌分区
|
||||
choosedBrand: "", // 已选择的品牌,
|
||||
isShowMoreBrand: false // 是否展开更多品牌
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.keyword = this.$route.query.keyword || ""
|
||||
if (this.$route.query.keyword && process.client) window.document.title = `${this.$route.query.keyword} - ${this.siteInfo.site_name}`
|
||||
|
||||
this.filters.category_id = this.$route.query.category_id || ""
|
||||
this.filters.category_level = this.$route.query.level || ""
|
||||
this.filters.brand_id = this.$route.query.brand_id || ""
|
||||
this.filters.coupon = this.$route.query.coupon || 0
|
||||
|
||||
this.getBrandList();
|
||||
this.getGoodsList();
|
||||
|
||||
if (this.$route.query.category_id && this.$route.query.category_id > 0) {
|
||||
this.categorySearch();
|
||||
} else {
|
||||
// 查询一级商品分类
|
||||
this.getGoodsCategoryList();
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
salesArrowDirection() {
|
||||
let className = this.filters.order === 'sale_num' && this.filters.sort === 'desc' ? 'arrow-down' : 'arrow-up';
|
||||
return className;
|
||||
},
|
||||
priceArrowDirection() {
|
||||
let className = this.filters.order === 'discount_price' && this.filters.sort === 'desc' ? 'arrow-down' :
|
||||
'arrow-up';
|
||||
return className;
|
||||
},
|
||||
...mapGetters(["defaultGoodsImage", "siteInfo"])
|
||||
},
|
||||
methods: {
|
||||
// 商品分类搜索
|
||||
categorySearch() {
|
||||
goodsCategoryInfo({
|
||||
category_id: this.filters.category_id
|
||||
}).then(res => {
|
||||
if (res.code == 0 && res.data) {
|
||||
let data = res.data;
|
||||
this.catewords = data.category_full_name;
|
||||
this.first_index = data.category_id_1;
|
||||
this.categoryList = data.child_list;
|
||||
this.selectCategoryId = this.filters.category_id;
|
||||
|
||||
// 设置全部的链接地址
|
||||
switch (data.level) {
|
||||
case 1:
|
||||
this.categoryAll.level = 1;
|
||||
this.categoryAll.id = data.category_id_1;
|
||||
this.categoryAll.isAllow = true;
|
||||
break;
|
||||
case 2:
|
||||
this.categoryAll.level = 1;
|
||||
this.categoryAll.id = data.category_id_1;
|
||||
this.categoryAll.isAllow = true;
|
||||
if (this.categoryList[0].level == 3) {
|
||||
this.categoryAll.level = 2;
|
||||
this.categoryAll.id = data.category_id_2;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
this.categoryAll.level = 2;
|
||||
this.categoryAll.id = data.category_id_2;
|
||||
this.categoryAll.isAllow = false;
|
||||
break;
|
||||
}
|
||||
|
||||
for (let i = 0; i < this.categoryList.length; i++) {
|
||||
let item = this.categoryList[i];
|
||||
if (item.category_id == this.categoryAll.id) {
|
||||
this.categoryAll.id = 0;
|
||||
this.categoryAll.isAllow = false; // 匹配到了分类,禁止选中 全部
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (process.client) window.document.title = `${data.category_name} - ${this.siteInfo.site_name}`
|
||||
}
|
||||
})
|
||||
|
||||
},
|
||||
// 一级商品分类列表
|
||||
getGoodsCategoryList() {
|
||||
goodsCategoryList({}).then(res => {
|
||||
if (res.code == 0 && res.data) {
|
||||
// 设置全部的链接地址
|
||||
this.categoryAll.level = 1;
|
||||
this.categoryAll.id = 0;
|
||||
this.categoryAll.isAllow = true;
|
||||
this.categoryList = res.data;
|
||||
}
|
||||
})
|
||||
|
||||
},
|
||||
getGoodsList() {
|
||||
const params = {
|
||||
page: this.currentPage,
|
||||
page_size: this.pageSize,
|
||||
keyword: this.keyword,
|
||||
...this.filters
|
||||
}
|
||||
goodsSkuPage(params || {}).then(res => {
|
||||
const {
|
||||
count,
|
||||
page_count,
|
||||
list
|
||||
} = res.data
|
||||
this.total = count
|
||||
this.goodsList = list
|
||||
this.loading = false
|
||||
}).catch(err => {
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
handlePageSizeChange(size) {
|
||||
this.pageSize = size
|
||||
this.getGoodsList()
|
||||
},
|
||||
handleCurrentPageChange(page) {
|
||||
this.currentPage = page
|
||||
this.getGoodsList()
|
||||
},
|
||||
handlePriceRange() {
|
||||
if (Number(this.filters.min_price) > Number(this.filters.max_price)) {
|
||||
// es6解构赋值
|
||||
[this.filters.min_price, this.filters.max_price] = [this.filters.max_price, this.filters.min_price]
|
||||
}
|
||||
this.getGoodsList()
|
||||
},
|
||||
changeSort(type) {
|
||||
if (this.filters.order === type) {
|
||||
this.$set(this.filters, "sort", this.filters.sort === "desc" ? "asc" : "desc")
|
||||
} else {
|
||||
this.$set(this.filters, "order", type)
|
||||
this.$set(this.filters, "sort", "desc")
|
||||
}
|
||||
|
||||
this.getGoodsList()
|
||||
},
|
||||
getBrandList() {
|
||||
brandPage({
|
||||
page: 1,
|
||||
page_size: 0
|
||||
}).then(res => {
|
||||
if (res.code >= 0 && res.data) {
|
||||
this.brandList = res.data.list;
|
||||
if (this.filters.brand_id) {
|
||||
for (var i = 0; i < this.brandList.length; i++) {
|
||||
if (this.brandList[i].brand_id == this.filters.brand_id) {
|
||||
this.choosedBrand = this.brandList[i];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
handleChangeInitial(initial) {
|
||||
this.currentInitial = initial
|
||||
},
|
||||
onChooseBrand(brand) {
|
||||
this.choosedBrand = brand
|
||||
this.filters.brand_id = brand.brand_id
|
||||
this.getGoodsList()
|
||||
},
|
||||
closeBrand() {
|
||||
this.choosedBrand = ""
|
||||
this.filters.brand_id = ""
|
||||
this.getGoodsList()
|
||||
},
|
||||
showPrice(data) {
|
||||
let price = data.discount_price;
|
||||
if (data.member_price && parseFloat(data.member_price) < parseFloat(price)) price = data.member_price;
|
||||
return price;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
is_free_shipping: function (val) {
|
||||
this.filters.is_free_shipping = val ? 1 : ""
|
||||
this.getGoodsList()
|
||||
},
|
||||
$route: function (curr) {
|
||||
this.currentPage = 1
|
||||
if (curr.query.keyword && process.client) window.document.title = `${curr.query.keyword} - ${this.siteInfo.site_name}`
|
||||
|
||||
if (curr.query.level && curr.query.category_id > 0) {
|
||||
this.filters.category_level = curr.query.level
|
||||
this.filters.category_id = curr.query.category_id
|
||||
this.getGoodsList()
|
||||
this.categorySearch()
|
||||
} else {
|
||||
this.getGoodsCategoryList();
|
||||
this.first_index = 0
|
||||
this.selectCategoryId = 0
|
||||
if (process.client) window.document.title = `${this.siteInfo.site_name}`
|
||||
}
|
||||
|
||||
if (curr.query.category_id == undefined || curr.query.category_id == 0) {
|
||||
this.catewords = ""
|
||||
this.keyword = curr.query.keyword
|
||||
this.filters.category_id = curr.query.category_id || ""
|
||||
this.filters.category_level = curr.query.level || ""
|
||||
this.filters.brand_id = curr.query.brand_id || ""
|
||||
this.getGoodsList()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||