提交 34c0c2d2 编写于 作者: zhangzhiwei's avatar zhangzhiwei

杨昌富定制H5

上级 6bd9d8a3
module.exports = {
extends: ["alloy", "alloy/vue", "alloy/typescript", "prettier"],
plugins: ["prettier", "vue"],
parser: "vue-eslint-parser",
parserOptions: {
parser: "@typescript-eslint/parser",
ecmaVersion: 2020,
sourceType: "module",
ecmaFeatures: {
jsx: true,
},
},
env: {
// 你的环境变量(包含多个预定义的全局变量)
//
// "browser": true,
node: true,
// "mocha": true,
// "jest": true,
// "jquery": true
},
settings: {
"import/resolver": {
alias: {
map: [["@", "./src"]],
extensions: [".ts", ".js", ".jsx", ".json", ".vue"],
},
},
},
globals: {
// 你的全局变量(设置为 false 表示它不允许被重新赋值)
// "myGlobal": false
},
rules: {
// 自定义你的规则
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
"vue/component-tags-order": [
"error",
{
order: ["template", "script", "style"],
},
],
},
};
node_modules
.idea
{
"typescript.tsdk": "node_modules\\typescript\\lib",
"i18n-ally.localesPaths": [
"src/static/lang"
],
"i18n-ally.keystyle": "nested"
}
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/static/favicon.ico">
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js" type="text/javascript"></script>
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
window._wx = wx
</script>
<title></title>
<!--preload-links-->
<!--app-context-->
</head>
<body>
<div class="noLandScape"><img src="https://img.edsmall.com/ROOT/ETao/fenxiao/h5/verticalScreen.gif"/></div>
<div id="app"><!--app-html--></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
文件已添加
此差异已折叠。
{
"name": "uni-preset-vue",
"version": "0.0.0",
"scripts": {
"dev": "uni --mode pre",
"local:prod": "uni --mode prod",
"local:dev-log": "uni --mode pre-log",
"local:prod-log": "uni --mode prod-log",
"build": "uni build",
"lint:fix": "npx eslint --fix --ext src/**/*.{vue,less,css,scss}"
},
"uni-app": {
"scripts": {
"test": {
"title": "h5测试环境",
"env": {
"UNI_PLATFORM": "h5",
"APP_ENV": "H5-Test"
}
},
"pro": {
"title": "h5正式环境",
"env": {
"UNI_PLATFORM": "h5",
"APP_ENV": "H5-Pro"
}
}
}
},
"dependencies": {
"@dcloudio/uni-app": "^3.0.0-alpha-3031220220222002",
"@dcloudio/uni-components": "^3.0.0-alpha-3031220220222002",
"@dcloudio/uni-h5": "^3.0.0-alpha-3031220220222002",
"@types/md5": "^2.3.2",
"html2canvas": "^1.4.1",
"md5": "^2.3.0",
"pdfh5": "^1.4.2",
"qrcode": "^1.5.0",
"sass": "^1.49.9",
"vant": "^3.5.1",
"vconsole": "^3.14.6",
"vue": "^3.2.31",
"vue-i18n": "^9.1.9",
"vuex": "^4.0.2"
},
"devDependencies": {
"@dcloudio/types": "^2.5.17",
"@dcloudio/uni-automator": "^3.0.0-alpha-3031220220222002",
"@dcloudio/uni-cli-shared": "^3.0.0-alpha-3031220220222002",
"@dcloudio/vite-plugin-uni": "^3.0.0-alpha-3031220220222002",
"@intlify/vite-plugin-vue-i18n": "^3.3.1",
"@types/node": "^17.0.21",
"@typescript-eslint/eslint-plugin": "^5.15.0",
"@typescript-eslint/parser": "^5.15.0",
"@vitejs/plugin-vue": "^2.0.0",
"autoprefixer": "^10.4.2",
"babel-eslint": "^10.1.0",
"eslint": "^8.11.0",
"eslint-config-alloy": "^4.5.1",
"eslint-plugin-vue": "^8.5.0",
"typescript": "^4.5.2",
"vite": "^2.8.4",
"vite-plugin-style-import": "^2.0.0",
"vue-eslint-parser": "^8.3.0"
}
}
export default {
base_url: "",
api_url: "/pre",
subdomain: "etaoh5-pre", // 子域名
};
//# sourceMappingURL=.env.pre.js.map
\ No newline at end of file
{"version":3,"file":".env.pre.js","sourceRoot":"","sources":[".env.pre.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,YAAY,EAAE,MAAM;CACR,CAAC"}
\ No newline at end of file
export default {
base_url: "",
api_url: "/pre", // 相对路径-本地代理
subdomain: "etaoh5-pre", // 子域名
} as NodeJS.ProcessUniEnv;
export default {
base_url: "",
api_url: "/prod",
subdomain: "etaoh5", // 子域名
};
//# sourceMappingURL=.env.prod.js.map
\ No newline at end of file
{"version":3,"file":".env.prod.js","sourceRoot":"","sources":[".env.prod.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,QAAQ,EAAE,MAAM;CACJ,CAAC"}
\ No newline at end of file
export default {
base_url: "", // *.edstao.com 泛域名
api_url: "/prod", // 相对路径-本地代理
subdomain: "etaoh5", // 子域名
} as NodeJS.ProcessUniEnv;
import pre from "./.env.pre";
import prod from "./.env.prod";
import Vconsole from 'vconsole';
(function () {
try {
if (process.env.NODE_ENV) { // 打包后没有process
if (process.env.NODE_ENV.indexOf('-log') > -1) {
new Vconsole();
}
if (["pre", "pre-log"].includes(process.env.NODE_ENV)) {
process.uniEnv = pre;
}
else if (["prod", "prod-log"].includes(process.env.NODE_ENV)) {
process.uniEnv = prod;
}
}
}
catch { }
})();
//# sourceMappingURL=env.js.map
\ No newline at end of file
{"version":3,"file":"env.js","sourceRoot":"","sources":["env.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,YAAY,CAAC;AAC7B,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,QAAQ,MAAM,UAAU,CAAA;AAE/B,CAAC;IACC,IAAI;QACF,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,eAAe;YACzC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC7C,IAAI,QAAQ,EAAE,CAAC;aAChB;YACD,IAAI,CAAC,KAAK,EAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACpD,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC;aACtB;iBAAM,IAAI,CAAC,MAAM,EAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAC7D,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;aACvB;SACF;KACF;IAAC,MAAM,GAAE;AACZ,CAAC,CAAC,EAAE,CAAC"}
\ No newline at end of file
import pre from "./.env.pre";
import prod from "./.env.prod";
import Vconsole from 'vconsole'
(function () {
try {
if (process.env.NODE_ENV) { // 打包后没有process
if (process.env.NODE_ENV.indexOf('-log') > -1) {
new Vconsole();
}
if (["pre","pre-log"].includes(process.env.NODE_ENV)) {
process.uniEnv = pre;
} else if (["prod","prod-log"].includes(process.env.NODE_ENV)) {
process.uniEnv = prod;
}
}
} catch {}
})();
<script setup lang="ts">
import api from "./api";
import {onLaunch, onShow, onHide} from "@dcloudio/uni-app";
import {WXUtils} from "./utils/utils";
function getUrl(url) {
const q = {};
url.replace(/([^?&=]+)=([^&]+)/g, (_, k, v) => q[k] = v);
return q;
}
onLaunch((e) => {
let device = navigator.userAgent.toLowerCase();
window._wx.miniProgram.postMessage({ data:{}});
console.log(window.__wxjs_environment === 'miniprogram','window.__wxjs_environment === \'miniprogram\'');
if (!(window.__wxjs_environment === 'miniprogram')) {
if (!/ipad|iphone|midp|rv:1.2.3.4|ucweb|android|windows ce|windows mobile|mobile/.test(device)) {
if (window.location.port === '3000') {
window.location.href = 'https://etaoh5-pre.edstao.com/pc/'
} else {
window.location.href = '/pc/'
}
}
}
uni.setStorageSync('isWxjs_environment', window.__wxjs_environment === 'miniprogram')
if (window.__wxjs_environment === 'miniprogram') {
let subdomain =getUrl(window.location.href)
if(subdomain.name){
uni.setStorageSync('subdomain',subdomain.name)
}
try {
uni.setStorageSync('uniEnv', process.uniEnv) // 打包后没有process
} catch {
}
} else {
window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", function () {
if (window.orientation === 180 || window.orientation === 0) {
window.location.reload()
}
;
}, false);
uni.setStorageSync('subdomain', window.location.href.replace(/(.*\/\/)|(\.edstao.*)/g, ''))
uni.setStorageSync('isWX', WXUtils.isWeiXin())
try {
uni.setStorageSync('uniEnv', process.uniEnv) // 打包后没有process
uni.setStorageSync('subdomain', process.uniEnv.subdomain) // 打包后没有process
} catch {
}
}
});
onShow(() => {
console.log("App Show");
});
onHide(() => {
console.log("App Hide");
});
</script>
<style lang="scss">
.host_tip {
color: #ff5500;
border: 1px solid #ff5500;
font-size: 12px;
margin-right: 2px;
font-weight: bold;
padding: 0 1px
}
.van-badge{
border: 1px!important;
}
.sign {
position: absolute;
right: 1.8vw;
top: 2vw;
width: 40px;
text-align: center;
img {
width: 40px;
margin-bottom: -18px;
}
.discount {
font-family: MiSans-Semibold;
text-shadow: 0.5px 0.5px #ddd;
color: #A532E0;
font-weight: 1000;
font-size: 12px;
}
}
// #ifdef H5
uni-page-head {
display: none;
}
.noLandScape {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
display: flex;
justify-content: center;
text-align: center;
background: gray;
display: none;
img {
max-width: 100vw;
max-height: 100vh;
}
}
// @media screen and (orientation: portrait) and (max-width:1024px) {
// .noLandScape {
// z-index: 0;
// display: none;
// }
// }
// @media screen and (orientation: landscape) and (max-width:1024px) {
// .noLandScape {
// z-index: 99999;
// display: block;
// }
// }
// #endif
</style>
import request from "@/common/request";
export default {
indexModule() {
return request({
url: "/api/index/module",
});
},
getIndexEtaomall(data) {
return request({
url: "/api/index/getIndexEtaomall",
data,
});
},
storeCard(data) {
return request({
url: "/api/store/storeCard",
data,
});
},
};
//# sourceMappingURL=_index.js.map
\ No newline at end of file
{"version":3,"file":"_index.js","sourceRoot":"","sources":["_index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,eAAe;IACb,WAAW;QACT,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,mBAAmB;SACzB,CAAC,CAAC;IACL,CAAC;IACD,gBAAgB,CAAC,IAAS;QACxB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,6BAA6B;YAClC,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,SAAS,CAAC,IAAS;QACjB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,sBAAsB;YAC3B,IAAI;SACL,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
\ No newline at end of file
import request from "@/common/request";
export default {
indexModule() {
return request({
url: "/api/index/module",
});
},
getIndexEtaomall(data: any) {
return request({
url: "/api/index/getIndexEtaomall",
data,
});
},
storeCard(data: any) {
return request({
url: "/api/store/storeCard",
data,
});
},
};
import request from "@/common/request";
export default {
cartAdd(data) {
return request({
url: "/api/cart/add",
method: 'POST',
data,
});
},
cartList(data) {
return request({
url: "/api/cart/list",
data,
});
},
cartRemove(data) {
return request({
url: "/api/cart/remove",
method: 'POST',
data,
});
},
cartCount() {
return request({
url: "/api/cart/count",
});
},
cartCheck(data) {
return request({
url: "/api/cart/check",
method: 'POST',
data
});
},
cartSettle(data) {
return request({
url: "/api/cart/settle",
method: 'POST',
data
});
},
cartModify(data) {
return request({
url: "/api/cart/modify",
method: 'POST',
data
});
},
};
//# sourceMappingURL=cart.js.map
\ No newline at end of file
{"version":3,"file":"cart.js","sourceRoot":"","sources":["cart.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,eAAe;IACb,OAAO,CAAC,IAAS;QACf,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,eAAe;YACpB,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,QAAQ,CAAC,IAAS;QAChB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,gBAAgB;YACrB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,UAAU,CAAC,IAAS;QAClB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,kBAAkB;YACvB,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,SAAS;QACP,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,iBAAiB;SACvB,CAAC,CAAC;IACL,CAAC;IACD,SAAS,CAAC,IAAS;QACjB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,iBAAiB;YACtB,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,UAAU,CAAC,IAAS;QAClB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,kBAAkB;YACvB,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,UAAU,CAAC,IAAS;QAClB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,kBAAkB;YACvB,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
\ No newline at end of file
import request from "@/common/request";
export default {
cartAdd(data: any) {
return request({
url: "/api/cart/add",
method: 'POST',
data,
});
},
cartList(data: any) {
return request({
url: "/api/cart/list",
data,
});
},
cartRemove(data: any) {
return request({
url: "/api/cart/remove",
method: 'POST',
data,
});
},
cartCount() {
return request({
url: "/api/cart/count",
});
},
cartCheck(data: any) {
return request({
url: "/api/cart/check",
method: 'POST',
data
});
},
cartSettle(data: any) {
return request({
url: "/api/cart/settle",
method: 'POST',
data
});
},
cartModify(data: any) {
return request({
url: "/api/cart/modify",
method: 'POST',
data
});
},
};
import request from "@/common/request";
export default {
productFav(data) {
return request({
url: "/api/fav/product/fav",
method: 'POST',
data
});
},
productDel(data) {
return request({
url: "/api/fav/product/del",
method: 'POST',
data
});
},
brandFav(data) {
return request({
url: "/api/fav/brand/fav",
method: 'POST',
data
});
},
brandDel(data) {
return request({
url: "/api/fav/brand/del",
method: 'POST',
data
});
},
getJsApiTicket() {
return request({
url: "/api/wx/getJsApiTicket",
raw: true
});
},
getWechartConfig(data) {
return request({
url: "/php/getWxConfigTest.php",
method: 'POST',
data,
raw: true
});
},
// 不使用该方法,只用有没有优惠价来判断
isSJS(data) {
return request({
url: "/api/user/isSJS",
data,
});
},
upload(file) {
return request({
url: "/api/image/upload",
upLoadFile: true,
fileKey: 'image',
file
});
},
receiveArea() {
return request({
url: "/api/receive/area"
});
},
};
//# sourceMappingURL=common.js.map
\ No newline at end of file
{"version":3,"file":"common.js","sourceRoot":"","sources":["common.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,eAAe;IACb,UAAU,CAAC,IAAS;QAClB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,sBAAsB;YAC3B,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,UAAU,CAAC,IAAS;QAClB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,sBAAsB;YAC3B,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,QAAQ,CAAC,IAAS;QAChB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,oBAAoB;YACzB,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,QAAQ,CAAC,IAAS;QAChB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,oBAAoB;YACzB,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,cAAc;QACZ,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,wBAAwB;YAC7B,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;IACL,CAAC;IACD,gBAAgB,CAAC,IAAS;QACxB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,0BAA0B;YAC/B,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;IACL,CAAC;IACD,qBAAqB;IACrB,KAAK,CAAC,IAAS;QACb,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,iBAAiB;YACtB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,IAAU;QACf,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,mBAAmB;YACxB,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,OAAO;YAChB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,WAAW;QACT,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,mBAAmB;SACzB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
\ No newline at end of file
import request from "@/common/request";
export default {
productFav(data: any) {
return request({
url: "/api/fav/product/fav",
method: 'POST',
data
});
},
productDel(data: any) {
return request({
url: "/api/fav/product/del",
method: 'POST',
data
});
},
brandFav(data: any) {
return request({
url: "/api/fav/brand/fav",
method: 'POST',
data
});
},
brandDel(data: any) {
return request({
url: "/api/fav/brand/del",
method: 'POST',
data
});
},
getJsApiTicket() {
return request({
url: "/api/wx/getJsApiTicket",
raw: true
});
},
getWechartConfig(data: any) {
return request({
url: "/php/getWxConfigTest.php",
method: 'POST',
data,
raw: true
});
},
// 不使用该方法,只用有没有优惠价来判断
isSJS(data: any) {
return request({
url: "/api/user/isSJS",
data,
});
},
upload(file: File) {
return request({
url: "/api/image/upload",
upLoadFile: true,
fileKey: 'image', // 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
file
});
},
receiveArea() {
return request({
url: "/api/receive/area"
});
},
};
{"version":3,"file":"good.js","sourceRoot":"","sources":["good.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,eAAe;IACb,UAAU,CAAC,KAAsB;QAC/B,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,eAAe,GAAG,KAAK;SAC7B,CAAC,CAAC;IACL,CAAC;IACD,SAAS,CAAC,IAAS;QACjB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,iBAAiB;YACtB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,WAAW,CAAC,IAAS;QACnB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,mBAAmB;YACxB,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,aAAa;YAC3B,MAAM,EAAE;gBACN,cAAc,EAAE,gCAAgC;aACjD;YACD,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,gBAAgB,CAAC,IAAS;QACxB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,6BAA6B;YAClC,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,aAAa;YAC3B,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,WAAW,CAAC,IAAS;QACnB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,mBAAmB;YACxB,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,aAAa;YAC3B,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,QAAQ,CAAC,IAAS;QAChB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,qBAAqB;YAC1B,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,aAAa;YAC3B,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,IAAS;QACf,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,oBAAoB;YACzB,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,aAAa;YAC3B,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,WAAW,CAAC,IAAS;QACnB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,uBAAuB;YAC5B,IAAI;SACL,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
\ No newline at end of file
import request from "@/common/request";
export default {
getProduct(skuId: string | number, data: any) {
return request({
url: "/api/product/" + skuId,
data
});
},
brandInfo(data: any) {
return request({
url: "/api/brand/info",
data
});
},
wxSign(data: any) {
return request({
url: "/api/WeiXin/wxSign?skuId="+data.skuId+'&etaomallId='+data.etaomallId+'&url='+data.url,
method: 'POST',
});
},
imageDetail(data: any) {
return request({
url: "/api/image/detail",
method: 'POST',
responseType: 'arraybuffer',
header: {
'Content-Type': 'application/json;charset=utf-8'
},
data
});
},
pictureAndQrCode(data: any) {
return request({
url: "/api/image/pictureAndQrCode",
method: 'POST',
responseType: 'arraybuffer',
data
});
},
imageQrCode(data: any) {
return request({
url: "/api/image/qrCode",
method: 'POST',
responseType: 'arraybuffer',
data
});
},
skuImage(data: any) {
return request({
url: "/api/image/skuImage",
method: 'POST',
responseType: 'arraybuffer',
data
});
},
handTag(data: any) {
return request({
url: "/api/image/handTag",
method: 'POST',
responseType: 'arraybuffer',
data
});
},
traDeManage(data: any) {
return request({
url: "/api/user/traDeManage",
data
});
}
};
import request from "@/common/request";
export default {
productList(data) {
return request({
url: "/api/product/list",
data,
});
},
sortAndSearch(data) {
return request({
url: "/api/index/sortAndSearch",
data,
});
},
getBrandList(data) {
return request({
url: "/api/brand/index",
data,
});
},
getBrandOtherInfo(data) {
return request({
url: "/api/brand/otherInfo",
data,
});
},
brandFav(data) {
return request({
url: "/api/fav/brand/fav",
data,
});
},
brandDel(data) {
return request({
url: "/api/fav/brand/del",
data,
});
},
};
//# sourceMappingURL=goodList.js.map
\ No newline at end of file
{"version":3,"file":"goodList.js","sourceRoot":"","sources":["goodList.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,eAAe;IACX,WAAW,CAAC,IAAU;QAClB,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,mBAAmB;YACxB,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IACD,aAAa,CAAC,IAAU;QACpB,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,0BAA0B;YAC/B,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IACD,YAAY,CAAC,IAAU;QACnB,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,kBAAkB;YACvB,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IACD,iBAAiB,CAAC,IAAU;QACxB,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,sBAAsB;YAC3B,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IACD,QAAQ,CAAC,IAAU;QACf,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,oBAAoB;YACzB,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IACD,QAAQ,CAAC,IAAU;QACf,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,oBAAoB;YACzB,IAAI;SACP,CAAC,CAAC;IACP,CAAC;CACJ,CAAC"}
\ No newline at end of file
import request from "@/common/request";
export default {
productList(data?: any) {
return request({
url: "/api/product/list",
data,
});
},
sortAndSearch(data?: any) {
return request({
url: "/api/index/sortAndSearch",
data,
});
},
getBrandList(data?: any) {
return request({
url: "/api/brand/index",
data,
});
},
getBrandOtherInfo(data?: any) {
return request({
url: "/api/brand/otherInfo",
data,
});
},
brandFav(data?: any) {
return request({
url: "/api/fav/brand/fav",
data,
});
},
brandDel(data?: any) {
return request({
url: "/api/fav/brand/del",
data,
});
},
};
import index from "./_index";
import goodList from "./goodList";
import login from "./login";
import good from "./good";
import my from "./my";
import cart from "./cart";
import common from "./common";
import order from "./order";
const api = {
...index,
...goodList,
...login,
...good,
...my,
...cart,
...common,
...order,
};
export default api;
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,UAAU,CAAC;AAC7B,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,MAAM,GAAG,GAAG;IACV,GAAG,KAAK;IACR,GAAG,QAAQ;IACX,GAAG,KAAK;IACR,GAAG,IAAI;IACP,GAAG,EAAE;IACL,GAAG,IAAI;IACP,GAAG,MAAM;IACP,GAAG,KAAK;CACX,CAAC;AAEF,eAAe,GAAG,CAAC"}
\ No newline at end of file
import index from "./_index";
import goodList from "./goodList";
import login from "./login";
import good from "./good";
import my from "./my";
import cart from "./cart";
import common from "./common";
import order from "./order";
const api = {
...index,
...goodList,
...login,
...good,
...my,
...cart,
...common,
...order,
};
export default api;
import request from "@/common/request";
export default {
authcode(data) {
return request({
url: "/api/account/authcode",
method: "POST",
data,
});
},
signup(data) {
return request({
url: "/api/account/signup",
method: "POST",
data,
noToast: true,
});
},
findPwd(data) {
return request({
url: "/api/account/findPwd",
method: "POST",
data,
noToast: true,
});
},
setPwd(data) {
return request({
url: "/api/account/setPwd",
method: "POST",
data,
});
},
login(data) {
return request({
url: "/api/account/login",
method: "POST",
data,
});
},
wxlogin(data) {
return request({
url: "/api/account/wxlogin",
method: "POST",
data,
});
},
logout(data) {
return request({
url: "/api/account/logout",
method: "POST",
data,
});
},
};
//# sourceMappingURL=login.js.map
\ No newline at end of file
{"version":3,"file":"login.js","sourceRoot":"","sources":["login.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,eAAe;IACb,QAAQ,CAAC,IAAS;QAChB,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,uBAAuB;YAC5B,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,IAAS;QACd,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,qBAAqB;YAC1B,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,IAAS;QACf,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,sBAAsB;YAC3B,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,IAAS;QACd,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,qBAAqB;YAC1B,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,IAAS;QACb,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,oBAAoB;YACzB,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,IAAS;QACd,OAAO,OAAO,CAAC;YACb,GAAG,EAAE,qBAAqB;YAC1B,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
\ No newline at end of file
import request from "@/common/request";
export default {
authcode(data: any) {
return request({
url: "/api/account/authcode",
method: "POST",
data,
});
},
signup(data: any) {
return request({
url: "/api/account/signup",
method: "POST",
data,
noToast: true,
});
},
findPwd(data: any) {
return request({
url: "/api/account/findPwd",
method: "POST",
data,
noToast: true,
});
},
setPwd(data: any) {
return request({
url: "/api/account/setPwd",
method: "POST",
data,
});
},
login(data: any) {
return request({
url: "/api/account/login",
method: "POST",
data,
});
},
wxlogin(data: any) {
return request({
url: "/api/account/wxlogin",
method: "POST",
data,
});
},
logout(data: any) {
return request({
url: "/api/account/logout",
method: "POST",
data,
});
},
};
import request from "@/common/request";
export default {
accountInfo(data: any) {
return request({
url: "/api/account/info",
data,
});
},
setHeadImage(data: any) {
return request({
url: "/api/account/info/setHeadImage",
method: 'POST',
data,
});
},
bindName(data: any) {
return request({
url: "/api/account/info/bindName",
method: 'POST',
data,
});
},
bindEmail(data: any) {
return request({
url: "/api/account/info/bindEmail",
method: 'POST',
data,
});
},
setSex(data: any) {
return request({
url: "/api/account/info/setSex",
method: 'POST',
data,
});
},
alterPassword(data: any) {
return request({
url: "/api/account/info/alterPassword",
method: 'POST',
data,
});
},
logout() {
return request({
url: "/api/account/logout",
});
},
receiveList(data: any) {
return request({
url: "/api/receive/list",
data
});
},
receiveAdd(data: any) {
return request({
url: "/api/receive/add",
method: 'POST',
data,
});
},
receiveEdit(data: any) {
return request({
url: "/api/receive/edit",
method: 'POST',
data,
});
},
receiveDel(data: any) {
return request({
url: "/api/receive/del",
data
});
},
favProductList(data: any) {
return request({
url: "/api/fav/product/list",
data
});
},
favBrandList(data: any) {
return request({
url: "/api/fav/brand/list",
data
});
},
getOrderCount() {
return request({
url: "/api/order/getOrderCount"
});
},
};
import request from "@/common/request";
export default {
getCanUse(data) {
return request({
url: "/api/index/canUse",
data
});
},
getOrderDetail(data) {
return request({
url: "/api/order/detail/" + data,
});
},
afterSaleImg() {
return request({
url: "/api/order/afterSaleImg/"
});
},
getOrderList(data) {
return request({
url: "/api/order/list",
method: 'POST',
data
});
},
settleInfo(data) {
return request({
url: "/api/order/settleInfo",
method: 'POST',
data
});
},
orderAdd(data) {
return request({
url: "/api/order/add",
method: 'POST',
data
});
},
orderPay(data) {
return request({
url: "/api/order/pay",
method: 'POST',
data
});
},
remindDeliverGoods(data) {
return request({
url: "/api/order/remindDeliverGoods",
data,
noToast: true
});
},
confirmReceipt(data) {
return request({
url: `/api/order/confirmReceipt/${data.orderId}?domain=${data.domain}`,
});
},
orderCancel(id) {
return request({
url: "/api/order/cancel/" + id,
});
},
platfromlist() {
return request({
url: "/api/channel/platfromlist",
});
},
batchAdd(data) {
return request({
url: "/api/cart/batchAdd",
method: 'POST',
data
});
},
};
//# sourceMappingURL=order.js.map
\ No newline at end of file
{"version":3,"file":"order.js","sourceRoot":"","sources":["order.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,eAAe;IACX,cAAc,CAAC,IAAS;QACpB,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,oBAAoB,GAAG,IAAI;SACnC,CAAC,CAAC;IACP,CAAC;IACD,YAAY;QACR,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,0BAA0B;SAClC,CAAC,CAAC;IACP,CAAC;IACD,YAAY,CAAC,IAAS;QAClB,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,iBAAiB;YACtB,MAAM,EAAE,MAAM;YACd,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IACD,UAAU,CAAC,IAAS;QAChB,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,uBAAuB;YAC5B,MAAM,EAAE,MAAM;YACd,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IACD,QAAQ,CAAC,IAAS;QACd,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,gBAAgB;YACrB,MAAM,EAAE,MAAM;YACd,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IACD,QAAQ,CAAC,IAAS;QACd,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,gBAAgB;YACrB,MAAM,EAAE,MAAM;YACd,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IACD,kBAAkB,CAAC,IAAS;QACxB,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,+BAA+B;YACpC,IAAI;YACJ,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;IACP,CAAC;IACD,cAAc,CAAC,IAAS;QACpB,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,6BAA6B,IAAI,CAAC,OAAO,WAAW,IAAI,CAAC,MAAM,EAAE;SACzE,CAAC,CAAC;IACP,CAAC;IACD,WAAW,CAAC,EAAO;QACf,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,oBAAoB,GAAG,EAAE;SACjC,CAAC,CAAC;IACP,CAAC;IACD,YAAY;QACR,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,2BAA2B;SACnC,CAAC,CAAC;IACP,CAAC;IACD,QAAQ,CAAC,IAAS;QACd,OAAO,OAAO,CAAC;YACX,GAAG,EAAE,oBAAoB;YACzB,MAAM,EAAE,MAAM;YACd,IAAI;SACP,CAAC,CAAC;IACP,CAAC;CACJ,CAAC"}
\ No newline at end of file
import request from "@/common/request";
export default {
getCanUse(data: any) {
return request({
url: "/api/index/canUse",
data
});
},
getOrderDetail(data: any) {
return request({
url: "/api/order/detail/" + data,
});
},
afterSaleImg() {
return request({
url: "/api/order/afterSaleImg/"
});
},
getOrderList(data: any) {
return request({
url: "/api/order/list",
method: 'POST',
data
});
},
settleInfo(data: any) {
return request({
url: "/api/order/settleInfo",
method: 'POST',
data
});
},
orderAdd(data: any) {
return request({
url: "/api/order/add",
method: 'POST',
data
});
},
orderPay(data: any) {
return request({
url: "/api/order/pay",
method: 'POST',
data
});
},
remindDeliverGoods(data: any) {
return request({
url: "/api/order/remindDeliverGoods",
data,
noToast: true
});
},
confirmReceipt(data: any) {
return request({
url: `/api/order/confirmReceipt/${data.orderId}?domain=${data.domain}`,
});
},
orderCancel(id: any) {
return request({
url: "/api/order/cancel/" + id,
});
},
platfromlist() {
return request({
url: "/api/channel/platfromlist",
});
},
batchAdd(data: any) {
return request({
url: "/api/cart/batchAdd",
method: 'POST',
data
});
},
};
import { Toast } from "vant";
import { PageUtils } from "@/utils/utils";
const request = (options) => {
Toast.loading({
message: '加载中...',
forbidClick: true,
duration: 200
});
return new Promise((resolve, reject) => {
const { token } = uni.getStorageSync("user") || {};
const header = {
...(options.noToken ? undefined : { Authorization: token }),
...options.header,
};
const url = (options.baseUrl || uni.getStorageSync("uniEnv")?.api_url || "") + options.url;
if (options.upLoadFile) {
uni.uploadFile({
url: url,
file: options.file,
name: options.fileKey,
success: (res) => {
const { code, data, message } = JSON.parse(res.data);
// 当前使用这个的只有/api/image/upload,但是这个不用鉴权,不会出现401状态
if (res.statusCode == 401) {
// @ts-ignore
const redirect = encodeURIComponent(PageUtils.getCurPage().$page.fullPath);
uni.reLaunch({ url: "/pages/login/login?redirect=" + redirect });
Toast(message);
reject(message);
}
if (code == 200) {
resolve(data);
}
else {
Toast(message);
reject(message);
}
},
fail: (err) => {
reject(err);
},
});
}
else {
uni.request({
method: options.method,
header,
responseType: options.responseType,
url,
data: options.data,
success: (res) => {
const { code, data, message } = res.data;
if (res.statusCode == 401) {
// @ts-ignore
const redirect = encodeURIComponent(PageUtils.getCurPage().$page.fullPath);
uni.reLaunch({ url: "/pages/login/login?redirect=" + redirect });
Toast(message);
reject(message);
}
if (options.raw) {
resolve(res.data);
}
else if (options.responseType) {
resolve(res.data);
}
else if (code == 200) {
resolve(data);
}
else {
Toast(message);
reject(message);
}
},
fail: (err) => {
reject(err);
},
});
}
});
};
export default request;
//# sourceMappingURL=request.js.map
//# sourceMappingURL=request.js.map
\ No newline at end of file
{"version":3,"file":"request.js","sourceRoot":"","sources":["request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,EAAE;IACxB,KAAK,CAAC,OAAO,CAAC;QACV,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,GAAG;KAChB,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG;YACX,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;YAC3D,GAAG,OAAO,CAAC,MAAM;SACpB,CAAC;QACF,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;QAC3F,IAAI,OAAO,CAAC,UAAU,EAAE;YACpB,GAAG,CAAC,UAAU,CAAC;gBACX,GAAG,EAAE,GAAG;gBACR,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,OAAO;gBACrB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBACb,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACrD,gDAAgD;oBAChD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE;wBACvB,aAAa;wBACb,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;wBAC3E,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,8BAA8B,GAAG,QAAQ,EAAE,CAAC,CAAC;wBACjE,KAAK,CAAC,OAAO,CAAC,CAAC;wBACf,MAAM,CAAC,OAAO,CAAC,CAAC;qBACnB;oBACD,IAAI,IAAI,IAAI,GAAG,EAAE;wBACb,OAAO,CAAC,IAAI,CAAC,CAAC;qBACjB;yBACI;wBACD,KAAK,CAAC,OAAO,CAAC,CAAC;wBACf,MAAM,CAAC,OAAO,CAAC,CAAC;qBACnB;gBACL,CAAC;gBACD,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACV,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;aACJ,CAAC,CAAC;SACN;aACI;YACD,GAAG,CAAC,OAAO,CAAC;gBACR,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM;gBACN,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,GAAG;gBACH,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBACb,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;oBACzC,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE;wBACvB,aAAa;wBACb,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;wBAC3E,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,8BAA8B,GAAG,QAAQ,EAAE,CAAC,CAAC;wBACjE,KAAK,CAAC,OAAO,CAAC,CAAC;wBACf,MAAM,CAAC,OAAO,CAAC,CAAC;qBACnB;oBACD,IAAI,OAAO,CAAC,GAAG,EAAE;wBACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;qBACrB;yBACI,IAAI,OAAO,CAAC,YAAY,EAAE;wBAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;qBACrB;yBACI,IAAI,IAAI,IAAI,GAAG,EAAE;wBAClB,OAAO,CAAC,IAAI,CAAC,CAAC;qBACjB;yBACI;wBACD,KAAK,CAAC,OAAO,CAAC,CAAC;wBACf,MAAM,CAAC,OAAO,CAAC,CAAC;qBACnB;gBACL,CAAC;gBACD,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACV,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;aACJ,CAAC,CAAC;SACN;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AACF,eAAe,OAAO,CAAC;AACvB,mCAAmC"}
\ No newline at end of file
import { Toast } from "vant";
import { PageUtils } from "@/utils/utils";
const request = (options) => {
Toast.loading({
message: '加载中...',
forbidClick: true,
duration: 200
});
return new Promise((resolve, reject) => {
const { token } = uni.getStorageSync("user") || {};
const header = {
...(options.noToken ? undefined : { Authorization: token }),
...options.header,
};
const url = (options.baseUrl || uni.getStorageSync("uniEnv")?.api_url || "") + options.url;
if (options.upLoadFile) {
uni.uploadFile({
url: url,
file: options.file,
name: options.fileKey,
success: (res) => {
const { code, data, message } = JSON.parse(res.data);
// 当前使用这个的只有/api/image/upload,但是这个不用鉴权,不会出现401状态
if (res.statusCode == 401) {
// @ts-ignore
const redirect = encodeURIComponent(PageUtils.getCurPage().$page.fullPath);
uni.reLaunch({ url: "/pages/login/login?redirect=" + redirect });
Toast(message);
reject(message);
}
if (code == 200) {
resolve(data);
}
else {
Toast(message);
reject(message);
}
},
fail: (err) => {
reject(err);
},
});
}
else {
uni.request({
method: options.method,
header,
responseType: options.responseType,
url,
data: options.data,
success: (res) => {
const { code, data, message } = res.data;
if (res.statusCode == 401) {
// @ts-ignore
const redirect = encodeURIComponent(PageUtils.getCurPage().$page.fullPath);
uni.reLaunch({ url: "/pages/login/login?redirect=" + redirect });
Toast(message);
reject(message);
}
if (options.raw) {
resolve(res.data);
}
else if (options.responseType) {
resolve(res.data);
}
else if (code == 200) {
resolve(data);
}
else {
Toast(message);
reject(message);
}
},
fail: (err) => {
reject(err);
},
});
}
});
};
export default request;
//# sourceMappingURL=request.js.map
\ No newline at end of file
<template>
<van-tabbar v-model="props.current" @change="tabChange" z-index="9999">
<van-tabbar-item v-for="item in list" :badge="item.badge || ''" :badge-props="{ color: '#FE521F' }">
<span>{{ item.text }}</span>
<template #icon="props">
<img v-if="item.selectedIconPath && item.iconPath"
:src="props.active ? item.selectedIconPath : item.iconPath" />
<van-icon v-else :name="item.icon" />
</template>
</van-tabbar-item>
</van-tabbar>
</template>
<script setup lang="ts">
interface TabbarItem {
text?: string;
badge?: number; // 红点数
icon?: string; // vant-icon-class
iconPath?: string; // 优先 > icon
selectedIconPath?: string; // 优先 > icon
}
interface Props {
list: Array<TabbarItem>;
current?: number;
}
const props = withDefaults(defineProps<Props>(), {
list: undefined,
current: 0,
});
const emit = defineEmits(["tabChange"]);
function tabChange(index: number) {
uni.setNavigationBarTitle({
title: props.list[index].text || "",
});
emit("tabChange", index);
}
</script>
<style lang="scss" scoped>
</style>
<template>
<van-overlay class="popup_banner" :show="show">
<van-icon class="popup_close" name="close" @tap="onClose"/>
<van-swipe class="popup_swipe" lazy-render :autoplay="3000" indicator-color="white" @tap.stop>
<van-swipe-item v-for="item in list">
<img class="popup_image" :src="item.iconpath" @tap="goto(item.josnContent)"/>
</van-swipe-item>
</van-swipe>
</van-overlay>
</template>
<script setup lang="ts">
interface Props {
show: boolean;
list: Array<any>;
}
const props = withDefaults(defineProps<Props>(), {
show: false,
list: () => []
});
const emit = defineEmits(["update:show"]);
function onClose() {
emit("update:show", false);
}
function goto(url: any) {
url && uni.navigateTo({ url })
}
</script>
<style lang="scss" scoped>
.popup_banner {
z-index: 100;
vertical-align: middle;
}
.popup_image {
max-width: 80vw;
height: calc(100vh - 240px);
object-fit: contain;
}
.popup_swipe {
margin: 120px 0;
}
.popup_close {
position: absolute;
right: 37px;
top: 80px;
font-size: 40px;
color: #fff;
z-index: 8;
}
</style>
<template>
<view class="fix_rb" :style="{ bottom }">
<van-image v-if="showNav" width="48px" class="btn mg-b-px-10" src="/static/img/rb_nav.png" @tap="onNavOpen" />
<br />
<van-image width="48px" class="btn toTop" :class="{ 'show': state.showToTop }"
src="/static/img/rb_top.png" @tap="gotoTop" />
</view>
<van-overlay style="z-index: 7" :show="state.nav.show" @tap="state.nav.show = false">
<view class="fix_rb bg-white ra-20 pd-h-px-20 pd-v-px-5 mg-r-px-10-m" v-show="state.nav.show">
<template v-for="(item, index) in state.nav.list">
<view class="inline-block text-center pd-px-5" style="width: 45px" @tap="goto(item.url)">
<van-icon size="24" :name="item.icon" />
<view class="text-ss">{{ item.name }}</view>
</view>
<br v-if="index % 3 == 2" />
</template>
</view>
</van-overlay>
</template>
<script setup lang="ts">
import { onMounted, reactive } from 'vue';
import { onPageScroll } from '@dcloudio/uni-app'
interface Props {
showNav?: boolean;
bottom?: string;
}
const props = withDefaults(defineProps<Props>(), {
showNav: false,
bottom: '75px'
});
const state = reactive({
showToTop: false,
nav: {
show: false,
list: [
{ name: '首页', icon: 'wap-home-o', url: '/' },
{ name: '分类', icon: 'apps-o', url: '/?index=1' },
{ name: '搜索', icon: 'search', url: '/pages/topSearch/index' },
{ name: '购物车', icon: 'shopping-cart-o', url: '/?index=2' },
{ name: '我的', icon: 'manager-o', url: '/?index=3' },
{ name: '收藏夹', icon: 'like-o', url: '/pages/my/fav' },
]
}
})
function gotoTop() {
uni.pageScrollTo({
scrollTop: 0
});
}
onPageScroll(e => {
state.showToTop = e.scrollTop > 100
})
function onNavOpen() {
state.nav.show = true
}
function goto(url: any) {
url && uni.navigateTo({ url })
}
</script>
<style lang="scss" scoped>
.fix_rb {
position: fixed;
right: 12px;
z-index: 6;
transition: all ease-in-out .2s;
bottom: 75px;
.toTop {
opacity: 0;
&.show {
opacity: 1;
}
}
}
</style>
/// <reference types="vite/client" />
declare module "*.vue" {
import { DefineComponent } from "vue";
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
const component: DefineComponent<{}, {}, any>;
export default component;
}
// 环境
declare module 'process' {
global {
namespace NodeJS {
interface ProcessUniEnv {
base_url: string;
api_url: string;
subdomain: string;
}
interface Process {
uniEnv: NodeJS.ProcessUniEnv;
}
}
}
}
interface Window {
_wx: {
config: (config: unknown) => void;
error: (config: unknown) => any;
ready: (config: unknown) => void;
updateAppMessageShareData: (config: unknown) => void;
updateTimelineShareData: (config: unknown) => void;
};
_sha1: Function;
}
// import './utils/checkDevice';
import { createSSRApp } from "vue";
import App from "./App.vue";
import Vant from "vant";
import { Lazyload, ImagePreview } from 'vant';
import "vant/lib/index.css";
import "./static/style/global.scss";
import "./.env/env";
window['global'] = window;
export function createApp() {
const app = createSSRApp(App);
app.use(Vant).use(Lazyload).use(ImagePreview);
return {
app,
};
}
//# sourceMappingURL=main.js.map
\ No newline at end of file
{"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAA;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,GAAG,MAAM,WAAW,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,oBAAoB,CAAC;AAC5B,OAAO,4BAA4B,CAAC;AACpC,OAAO,YAAY,CAAC;AACnB,MAAc,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;AACnC,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC9C,OAAO;QACL,GAAG;KACJ,CAAC;AACJ,CAAC"}
\ No newline at end of file
// import './utils/checkDevice'
import { createSSRApp } from "vue";
import App from "./App.vue";
import Vant from "vant";
import { Lazyload, ImagePreview } from 'vant';
import "vant/lib/index.css";
import "./static/style/global.scss";
import "./.env/env";
(window as any)['global'] = window;
export function createApp() {
const app = createSSRApp(App);
app.use(Vant).use(Lazyload).use(ImagePreview);
return {
app,
};
}
{
"name": "",
"appid": "",
"description": "",
"versionName": "1.0.0",
"versionCode": "100",
"transformPx": false,
"uniStatistics": {
"enable": false
},
"h5" : {
"router" : {
"mode":"hash"
}
},
"vueVersion": "3"
}
{
"pages": [
{
"path": "pages/index",
"style": {
"navigationBarTitleText": "E淘商城"
}
}, {
"path": "pages/login/login",
"style": {
"navigationBarTitleText": "登录"
}
}, {
"path": "pages/login/register",
"style": {
"navigationBarTitleText": "注册"
}
}, {
"path": "pages/login/forget",
"style": {
"navigationBarTitleText": "找回密码"
}
}, {
"path": "pages/login/policy",
"style": {
"navigationBarTitleText": "隐私政策"
}
}, {
"path": "pages/login/service",
"style": {
"navigationBarTitleText": "服务协议"
}
}, {
"path": "pages/classify/index",
"style": {
"navigationBarTitleText": "筛选分类"
}
}, {
"path": "pages/good/detail",
"style": {
"navigationBarTitleText": "商品详情"
}
}, {
"path": "pages/good/share",
"style": {
"navigationBarTitleText": "分享详情"
}
},{
"path": "pages/good/contact",
"style": {
"navigationBarTitleText": "服务运营商"
}
},{
"path": "pages/good/issue",
"style": {
"navigationBarTitleText": "服务条款"
}
}, {
"path": "pages/good/download",
"style": {
"navigationBarTitleText": "图片下载"
}
}, {
"path": "pages/good/size",
"style": {
"navigationBarTitleText": "尺寸"
}
},
{
"path": "pages/topSearch/index",
"style": {
"navigationBarTitleText": "E淘商城-搜索"
}
},
{
"path": "pages/goodList/index",
"style": {
"navigationBarTitleText": "E淘商城-列表页"
}
},
{
"path": "pages/index/storeCard",
"style": {
"navigationBarTitleText": "店铺名片列表"
}
},
{
"path": "pages/good/brandShop",
"style": {
"navigationBarTitleText": "店铺"
}
},
{
"path": "pages/order/orderList",
"style": {
"navigationBarTitleText": "我的订单"
}
},
{
"path": "pages/order/orderDetails",
"style": {
"navigationBarTitleText": "订单详情"
}
},
{
"path": "pages/order/paySuccess",
"style": {
"navigationBarTitleText": "支付成功"
}
},
{
"path": "pages/order/beforeconfirm",
"style": {
"navigationBarTitleText": "确认订单"
}
},
{
"path": "pages/my/detail",
"style": {
"navigationBarTitleText": "个人信息"
}
},
{
"path": "pages/my/address",
"style": {
"navigationBarTitleText": "收货地址" // 不要这个,用于判断组件/页面调用
}
},
{
"path": "pages/order/afterSales",
"style": {
"navigationBarTitleText": "申请售后"
}
},
{
"path": "pages/order/customerService",
"style": {
"navigationBarTitleText": "客服介入"
}
},
{
"path": "pages/my/fav",
"style": {
"navigationBarTitleText": "我的收藏"
}
},
{
"path": "pages/my/certificate",
"style": {
"navigationBarTitleText": "证件信息"
}
},
{
"path": "pages/my/technicalSupport",
"style": {
"navigationBarTitleText": "E淘提供技术支持"
}
},
{
"path": "pages/my/pdfh5",
"style": {
"navigationBarTitleText": "营业执照"
}
}
],
"subPackages": [
{
"root": "pagesSub",
"pages": [
{
"path": "index",
"style": {
"navigationBarTitleText": "首页"
}
}
]
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
}
}
此差异已折叠。
此差异已折叠。
<template>
<div class="container" style="background: #ffffff">
<div class="main">
<van-sidebar class="sidebar" v-model="categoryIndex" @change="onChange">
<van-sidebar-item v-for="(item,index) in categoryList" :key="index" :title="item.name" />
</van-sidebar>
<div class="right-content" >
<div v-for="item in list" style="margin:26rpx 10rpx" v-if="categoryIndex==0">
<van-divider><span
style="color: #2b2b2b;font-size: 34rpx;font-weight: bold">{{item.name}}</span>
</van-divider>
<div v-for="son in item.menus">
<p style="margin: 10px 0;font-size: 24rpx;font-weight: bold">{{son.name}}</p>
<van-grid :border="false" :column-num="3">
<van-grid-item v-for="sun in son.menus" @click="toGoodList(sun.id)">
<div>
<van-image :src="sun.icon" width="15vw" height="15vw"/>
<p style="margin-top: 5px;font-size: 12px;text-align: center">
{{sun.name}}</p>
</div>
</van-grid-item>
</van-grid>
</div>
</div>
<div v-if="categoryIndex!=0&&categoryIndex!=5">
<van-grid :border="true" :column-num="3">
<van-grid-item v-for="item in list">
<div @click="toGoodList(categoryIndex!=4?item.name:item.id)" style="text-align: center">
<van-image :src="categoryIndex==4?item.iconpath:item.img" />
<p style="margin-top: 5px;font-size: 12px;text-align: center;margin-bottom: 10px">
<span v-if="categoryIndex!=4">{{item.name}}</span>
<span v-else>{{changeName(item.name)}}</span>
</p>
</div>
</van-grid-item>
</van-grid>
</div>
<div v-if="categoryIndex==5">
<div v-for="item in list.letter" style="padding-right: 1rem">
<van-divider><span :id="item"
style="color: #2b2b2b;font-size: 34rpx;font-weight: bold">{{item}}</span>
</van-divider>
<van-grid :border="false" :column-num="3">
<van-grid-item v-for="son in list.menu[item]" @click="toGoodList(son.id)">
<div>
<van-image v-if="son.img" :src="son.img" width="15vw" height="15vw"
/>
<p style="margin-top: 5px;font-size: 12px;text-align: center">
{{son.name}}</p>
</div>
</van-grid-item>
</van-grid>
</div>
</div>
<div class="right_side" v-if="categoryIndex==5&&list.letter">
<div class="letter_slider">
<ul v-for="item in list.letter">
<li class="letter_slider_li" @click="changeLi(item)">{{item}}</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts">
import { Toast } from 'vant';
import api from "@/api";
import {reactive, toRefs, onMounted,getCurrentInstance} from 'vue';
export default {
setup() {
const that = reactive({
categoryList: [{name: "类型", type: 'menuId'}, {name: "风格", type: 'styleName'}, {
name: "材质",
type: 'material'
}, {name: "价格", type: 'money'}, {name: "权益", type: 'zone'}, {name: "品牌", type: 'brandId'}, {
name: "空间",
type: 'space'
}, {name: "色温", type: 'color'}],
list: [],
categoryIndex: 0,
dataList: {},
toGoodList: (search) => {
uni.navigateTo({
url: `/pages/goodList/index?${that.categoryList[that.categoryIndex].type}=${search}`,
});
},
changeLi: (e) => {
let topH1 = document.getElementById(e)
topH1.scrollIntoView({
behavior: 'smooth',
})
},
changeName: (name) => {
switch (name) {
case 'TTT':
return '淘淘淘专区'
break;
case 'VIP':
return 'PLUS'
break;
case 'XIAN_LIANG':
return '限量专区'
break;
case 'XIAO_E':
return '小E专区'
break;
case 'YAN_XUAN':
return '严选专区'
break;
case 'YOU_XUAN':
return '优选专区'
break;
case 'XIN_P':
return '新品专区'
break;
case 'AUTONOM_HD':
return '活动专区'
}
},
getBanner: () => {
api.sortAndSearch({link: uni.getStorageSync("subdomain") }).then((res: any) => {
that.dataList = res
that.list = res.type
})
},
onChange: (e) => {
switch (e) {
case 0:
that.list = []
setTimeout(() => {
that.list = that.dataList.type
}, 0)
return
break;
case 1:
return that.list = that.dataList.style
break;
case 2:
return that.list = that.dataList.material
break;
case 3:
return that.list = that.dataList.price
break;
case 4:
that.list = []
for (let k in that.dataList.zone) {
that.dataList.zone[k].resource[0].id = that.dataList.zone[k].id
that.dataList.zone[k].resource[0].name = k
that.list.push(that.dataList.zone[k].resource[0])
}
break;
case 5:
Toast.loading({
duration:300,
message: '加载中...',
forbidClick: true,
loadingType: 'spinner',
});
setTimeout(()=>{
return that.list = that.dataList.brand
},200)
break;
case 6:
return that.list = that.dataList.room
break;
case 7:
return that.list = that.dataList.color
break;
}
}
});
onMounted(() => {
that.getBanner()
let search = getCurrentInstance().$pageInstance.attrs.act
if(search){
that.categoryIndex = search
that.onChange(Number(that.categoryIndex))
}
})
const refState = toRefs(that)
return {
...refState
}
}
}
</script>
<style scoped>
.container{
-webkit-overflow-scrolling: touch;
}
.right_side {
position: fixed;
width: 0.45rem;
height: 100%;
right: 0;
top: 2.6rem;
z-index: 999;
}
.right_side .letter_slider {
position: absolute;
width: 1.6rem;
overflow: hidden;
right: 0;
top: 0;
height: 87%;
overflow-y: auto;
z-index: 9999;
}
.right_side .letter_slider_li {
height: 2rem;
line-height: 2rem;
text-align: center;
font-size: .9rem;
color: #858585;
}
.right-content {
flex: 1;
height: 88vh;
overflow-x: scroll;
padding-bottom: 10px;
}
.sidebar {
height: 88vh;
overflow-x: scroll;
-webkit-overflow-scrolling: touch;
}
.main {
display: flex;
}
</style>
\ No newline at end of file
<template>
<view class="text-center pd-b-px-55">
<van-sticky>
<van-nav-bar
title="店铺"
left-arrow
@click-left="onClickLeft"
>
<template #left>
<van-icon name="arrow-left" size="25" color="#323233" />
</template>
</van-nav-bar>
<div class="shop_body">
<div style="display: flex;padding: 1.3rem">
<img style="width: 6rem;height: 3.6rem;border-radius: 3rem"
:src="state.brandInfo.imgPath" alt="">
<div class="shop_title">
<p>{{state.brandInfo.brandName}}</p>
<p style="font-size: 12px">粉丝:{{state.brandInfo.favCount}}</p>
</div>
</div>
<div class="about">
<span v-if="!state.brandInfo.isFav" @click="brandFav">+关注</span>
<span v-else @click="brandDel">已关注</span>
</div>
</div>
<van-tabs v-model:active="state.active" color="#ff6600" line-width="206rpx"
title-active-color="#ff6600" @click-tab="changeTab">
<van-tab title="全部商品">
</van-tab>
<van-tab title="新品">
</van-tab>
</van-tabs>
</van-sticky>
<div style="margin-top: .2rem"></div>
<van-list :loading="state.good.loading" :finished="state.good.finished" finished-text="没有更多了" offset="10"
@load="onGoodLoad">
<van-grid :center="false" :column-num="1">
<van-grid-item class="text-left" v-for="(item, index) in state.good.list" :key="index"
@click="goto(`/pages/good/detail?skuId=${item.skuId}&spuId=${item.spuId}`)">
<van-row>
<van-col span="7" style="position: relative">
<van-image class="self_center" width="200rpx" height="200rpx" lazy-load
:src="item.mainImg" />
<!--店铺活动角标-->
<div class="sign" v-if="item.subScriptImgUrl">
<img :src="item.subScriptImgUrl" alt="" />
<div class="discount" style="color: rgba(247, 103, 67, 1)">{{item.discount}}</div>
</div>
<view style="position: absolute;left: 0;bottom: 0">
<van-image v-if="item.zoneIcon" width="60rpx" lazy-load :src="item.zoneIcon" />
<van-image v-if="item.isVideoIcon" class="pd-l-5" width="32rpx" height="32rpx" src="/static/img/play.png" />
</view>
</van-col>
<van-col span="16" offset="1">
<p class="text-s ellipsis line_over2 pd-t-10" style="height: 32px;margin-bottom:6px">
{{ item.title }}
</p>
<div style="line-height: 1.2rem" v-if="item.salePrice !== null">
<p class="text-ss">{{ item.size }}</p>
<p class="text-gray text-ss"></p>
<div v-if="item.actPrice">
<div >
<p class="text-gray text-ss " style="float: right;margin-right: 20px">
零售价¥
<text class="text-bold text-l">{{ item.productPrice }}</text>
</p>
<div class="text-gray text-ss line-through" >
优惠价¥
<text class="text-bold text-l">{{ item.salePrice }}</text>
</div>
</div>
</div>
<div v-if="!item.actPrice">
<p class="text-gray text-ss line-through">零售价¥{{ item.productPrice
}} </p>
<p class="text-orange text-ss" >
优惠价¥
<text class="text-bold text-l">{{ item.salePrice }}</text>
</p>
</div>
<p class="text-orange text-ss" v-if="item.actPrice">
活动价¥
<text class="text-bold text-l">{{ item.actPrice }}</text>
</p>
</div>
<div style="line-height: 1.2rem" v-else>
<p class="text-ss">{{ item.size }}</p>
<p class="text-gray text-ss"></p>
<p class="text-gray text-ss line-through"
style="font-size: 15px;margin-top: 5px" v-if="item.actPrice">
零售价¥
<text class="text-bold text-l">{{ item.productPrice }}</text>
</p>
<p class="text-orange text-ss"
style="color: #ff8b3e;font-size: 15px;margin-top: 5px" v-else>
零售价¥
<text class="text-bold text-l">{{ item.productPrice }}</text>
</p>
<p class="text-orange text-ss"
style="color: #ff8b3e;font-size: 15px;margin-top: 5px" v-if="item.actPrice">
活动价¥
<text class="text-bold text-l">{{ item.actPrice }}</text>
</p>
</div>
</van-col>
</van-row>
</van-grid-item>
</van-grid>
</van-list>
<view v-if="state.good.fail" class="text-ss text-gray pd-50" @click="failReset">请求失败,点击重试
<van-icon name="replay" />
</view>
<view class="fix_rb">
<van-image width="40px" class="btn toTop" :class="{ 'show': state.showToTop }"
src="/static/img/rb_top.png"
@tap="gotoTop" />
</view>
</view>
</template>
<script setup lang="ts">
import api from "@/api";
import {onMounted, reactive, getCurrentInstance} from 'vue';
import {onPageScroll} from '@dcloudio/uni-app'
const state = reactive({
showToTop: false,
brandInfo: {},
skuId: '',
params: {},
active: 0,
good: {
loading: false,
finished: false,
fail: false,
page: 0,
list: [] as any
}
})
onMounted(() => {
state.params.brandId = getCurrentInstance().ctx.$page.options.brandId || ''
getBrandOtherInfo()
});
function gotoTop() {
uni.pageScrollTo({
scrollTop: 0
});
}
onPageScroll(e => {
state.showToTop = e.scrollTop > 100
})
function brandDel() {
api.brandDel({
brandIds: [state.params.brandId],
}).then(res => {
getBrandOtherInfo()
})
}
function brandFav() {
api.brandFav({
brandId: state.params.brandId,
link: uni.getStorageSync('subdomain'),
}).then(res => {
getBrandOtherInfo()
})
}
function onClickLeft() {
history.back()
}
function goto(url: any) {
url && uni.navigateTo({url})
}
function changeTab(e) {
state.good.list = []
state.good.page = 0
if (e.name == 0) {
state.params['sortType'] = 0
}
if (e.name == 1) {
state.params['sortType'] = 1
}
onGoodLoad()
}
function getBrandOtherInfo() {
api.getBrandOtherInfo({
brandId: state.params.brandId
}).then(res => {
state.brandInfo = res
})
}
function onGoodLoad() {
if (state.good.loading || state.good.fail) return
state.good.loading = true
++state.good.page
api.getBrandList({
...state.params,
pageSize: 20,
pageNum: state.good.page,
link: uni.getStorageSync('subdomain'),
}).then((data: any) => {
if (!data||!data.hasNextPage){
state.good.finished = true
}
state.good.list.push(...data.list)
})
.catch(() => {
state.good.fail = true
})
.finally(() => {
state.good.loading = false
})
}
function failReset() {
state.good.page -= 1
state.good.finished = false
state.good.fail = false
onGoodLoad()
}
</script>
<style lang="scss" scoped>
.fix_rb {
position: fixed;
bottom: 75px;
right: 12px;
z-index: 6;
transition: all ease-in-out .2s;
.toTop {
opacity: 0;
&.show {
opacity: 1;
}
}
}
.shop_body {
background: url("/static/img/brandShop_bg.png") no-repeat center 0px;
background-position: center 0px;
background-size: cover;
height: 6rem;
/*background: linear-gradient(to right, #ff744b, #f9a281);*/
position: relative;
.shop_title {
text-align: left;
line-height: 1.6rem;
margin-left: 1rem;
margin-top: .1rem;
color: #ffffff;
font-weight: 500;
}
}
.about {
border-radius: 20px;
border: 1px solid #ff6800;
padding: 8px 20px;
position: absolute;
top: 36%;
right: 5%;
background: #fc6820;
font-size: 12px;
color: #ffffff;
}
:root {
--van-sidebar-selected-border-height: 30px;
}
.search_bar {
position: fixed;
top: 0;
left: 0;
right: 0;
width: 100vw;
z-index: 5;
}
.banner_top {
height: 43.5vw;
}
.banner_afterTop,
.banner_afterTap {
height: 20vw;
}
.block_title {
margin: 40 rpx auto 25 rpx auto;
width: 60vw;
}
</style>
<template>
<view>
<van-sticky>
<view class="top-bar justify-center bg-white sh">
<van-icon class="top-left" name="arrow-left" @tap="goBack" />
<view class="top-center">{{ state.title }}</view>
<view class="top-right" @tap="goto('/pages/good/issue')">
<view class="text-m">服务条款</view>
</view>
</view>
</van-sticky>
<view>
<view class="justify-middle pd-h-25 mg-t-20 mg-h-20 mail_box" s>
<van-image class="mail_bg" fit="cover" src="/static/img/brand_bg.png"/>
<view class="mail_info justify-middle" style="margin-top: 10px;margin-bottom: 10px">
<view class="mail_logo">
<van-image fit="cover" width="120rpx" height="120rpx" round
:src="state.mail.logoUrl" />
</view>
<view class="mg-l-30 text-white text-xl">{{ state.mail.crocsAddress }}</view>
</view>
</view>
<van-cell-group inset class="mail_detail mg-h-20">
<van-cell class="pd-t-30" :title="state.mail.contactPhone" icon="phone-o">
<template #value>
<a v-if="state.mail.contactPhone" class="justify-end justify-middle"
:href="'tel:' + state.mail.contactPhone">
<view class="call_button btn" style="border-radius: 10rpx;padding: 0rpx 15rpx;border: 1rpx solid #FE521F">一键拨打</view>
</a>
</template>
</van-cell>
<van-cell class="pd-b-30" :title="state.mail.companyAddress" icon="location-o" />
<van-cell class="pd-b-30" value="查看" is-link @click="state.value='',state.showImg=true">
<template #title>
<img src="../../static/img/ico1.png" alt="" style="width: 18px;vertical-align: sub">
证照信息
</template>
</van-cell>
</van-cell-group>
</view>
<van-cell-group class="mg-h-0 mg-t-25" inset>
<van-cell :border="false">
<template #title>
<view class="text-l">客服列表</view>
</template>
</van-cell>
<van-divider class="mg-v-0" />
<div style="position: relative">
<van-cell v-for="item in state.service" class="justify-middle">
<template #title>
<view class="flex">
<van-image class="pd-r-20" fit="cover" width="24px" height="24px" round
src="/static/img/contactor.png" />
<view>
<view class="text-l">{{ item.serviceName }}</view>
<view class="text-s">
<view v-if="item.serviceMobile" class="justify-middle">
电话:{{ item.serviceMobile }}
<a :href="'tel:' + item.serviceMobile"
class="justify-middle pd-l-20">
<view class="call_button btn" style="border-radius: 10rpx;padding: 0rpx 15rpx;border: 1rpx solid #FE521F">一键拨打</view>
</a>
</view>
<view v-if="item.serviceWechat">微信:{{ item.serviceWechat }}</view>
<view v-if="item.qq">QQ&nbsp;&nbsp;{{ item.qq }}</view>
</view>
</view>
</view>
</template>
<template #right-icon>
<van-image v-if="item.wechatQRUrl" fit="cover" height="120rpx" width="120rpx"
class="qrcode"
:src="item.wechatQRUrl"
loading-icon="https://img.edsmall.com/ROOT/ETao/fenxiao/h5/default.png"
icon-size="120rpx" @tap="onImagePreview(item.wechatQRUrl)" />
</template>
</van-cell>
<view v-if="state.service.length == 0" class="justify-center" style="height:400px">
<van-image width="160px" class="mail_bg" fit="cover" src="/static/img/no_contact.png" />
<view class="text-m text-darkGray pd-50">暂无任何客服信息喔~</view>
<div style="text-align: center;width: 100%;margin-top: 30px">
<p><img style="width: 20px;height: 20px;vertical-align: sub;margin-right: 10px" src="../../static/favicon.ico" alt=""><span style="color: #666666">E淘提供技术支持</span></p>
<p @click="gotoU" style="margin-top: 20px"><span style="color: #666666">资质与规则</span></p>
</div>
</view>
<div v-if="state.service.length >0" style="text-align: center;width: 100%;margin: 30px auto">
<p><img style="width: 20px;height: 20px;vertical-align: sub;margin-right: 10px" src="../../static/favicon.ico" alt=""><span style="color: #666666">E淘提供技术支持</span></p>
<p @click="gotoU" style="margin-top: 20px"><span style="color: #666666">资质与规则</span></p>
</div>
</div>
</van-cell-group>
<van-dialog :show="state.showImg" title="请输入验证码查看证照信息" show-cancel-button @confirm="confirm"
@cancel="state.showImg=false">
<div style="text-align: center">
<div class="ValidCode disabled-select"
style="background: #fafafa;margin: 15px auto;width: 200px;height: 34px">
<span v-for="(item, index) in state.codeList" :key="index" :style="getStyle(item)">{{item.code}}</span>
</div>
<p style="font-size: 14px;color: #666666;margin: 10px auto" @click="refreshCode">看不清?点击图片刷新</p>
<van-field v-model="state.value" placeholder="请输入验证码"
style="width: 70%;border-bottom: 2px solid #fe9576;margin: 0 auto" />
</div>
</van-dialog>
<to-top />
</view>
</template>
<script setup lang="ts">
import api from '@/api';
import {onBeforeMount, reactive,} from 'vue';
import toTop from '@/components/tool/toTop.vue';
import {PageUtils} from '@/utils/utils';
import {ImagePreview, Toast } from 'vant';
import {onPageScroll} from '@dcloudio/uni-app'
onPageScroll(e => {
}) // uniapp的Bug,这句话不要去掉,否则to-top不生效
const state = reactive({
value: '',
codeList: [],
showImg: false,
title: PageUtils.getTitle(),
service: [] as any,
mail: {} as any
})
onBeforeMount(() => {
traDeManage()
createdCode()
})
function gotoU() {
uni.redirectTo({
url: "/pages/my/technicalSupport?name=contact",
});
}
function confirm() {
let str = ''
if(state.codeList.length>0){
state.codeList.forEach(item=>{
str+=item.code
})
}
if(str.toLowerCase()==state.value.toLowerCase()){
uni.navigateTo({
url: "/pages/my/certificate",
});
}else {
Toast.fail('请输入正确的验证码');
}
}
function refreshCode() {
createdCode()
}
function createdCode() {
const len = 4
const codeList = []
const chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz0123456789'
const charsLen = chars.length
// 生成
for (let i = 0; i < len; i++) {
const rgb = [Math.round(Math.random() * 220), Math.round(Math.random() * 240), Math.round(Math.random() * 200)]
codeList.push({
code: chars.charAt(Math.floor(Math.random() * charsLen)),
color: `rgb(${rgb})`,
fontSize: `2${[Math.floor(Math.random() * 10)]}px`,
padding: `${[Math.floor(Math.random() * 10)]}px`,
transform: `rotate(${Math.floor(Math.random() * 90) - Math.floor(Math.random() * 90)}deg)`
})
}
// 指向
state.codeList = codeList
}
function getStyle(data) {
return `color: ${data.color}; font-size: ${data.fontSize}; padding: ${data.padding}; transform: ${data.transform}`
}
function traDeManage() {
api.traDeManage({domain: uni.getStorageSync('subdomain')})
.then((data: any) => {
state.service = data.serviceList
state.mail = data.brandMessage
})
}
function onImagePreview(url: string) {
ImagePreview({images: [url], closeable: true})
}
function goBack() {
uni.navigateTo({
url: "/pages/index",
});
}
function goto(url: any) {
url && uni.navigateTo({url})
}
</script>
<style lang="scss" scoped>
/*.ValidCode {*/
/*display: flex;*/
/*justify-content: center;*/
/*align-items: center;*/
/*cursor: pointer;*/
/*span {*/
/*display: inline-block;*/
/*}*/
/*}*/
.mail_box {
position: relative;
height: 185 rpx;
width: 100%;
.mail_bg {
position: absolute;
left: 0;
top: 0;
right: 0;
width: calc(100vw - 40rpx);
height: 260 rpx;
}
.mail_info {
z-index: 1;
.mail_logo {
width: 118 rpx;
height: 118 rpx;
border: 4 rpx solid #fff;
position: relative;
border-radius: 50%;
&::before {
content: "";
position: absolute;
border-radius: 50%;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(180deg, #ffe5cd 0%, #ffb399 100%);
}
}
}
.mail_detail {
width: 100%;
}
}
.call_button {
border-radius: 10 rpx;
padding: 0 rpx 15 rpx;
border: 1 rpx solid #FE521F;
color: #FE521F;
font-size: 12px;
line-height: 20px;
}
.qrcode {
border: 1 rpx solid #DDDDDD;
border-radius: 10 rpx;
padding: 10 rpx;
}
</style>
此差异已折叠。
<template>
<view class="text-center">
<van-sticky>
<view class="sh mg-b-40">
<view class="top-bar justify-center bg-white">
<van-icon class="top-left" name="arrow-left" @tap="goBack" />
<view class="top-center">{{ state.title }}</view>
</view>
<van-tabs class="top_tab" v-model:active="state.tab.active" @change="onTab" scrollspy>
<van-tab v-for="(item, index) in state.tab.list" :name="item.name">
<template #title>
<view :style="index==1?'width:78px':''">{{item.title}}</view>
</template>
</van-tab>
</van-tabs>
</view>
</van-sticky>
<view style="height: 140vw">
<template v-for="(item, index) in state.tab.list">
<van-image v-if="state.tab.active == item.name && item.url" lazy-load
loading-icon="https://img.edsmall.com/ROOT/ETao/fenxiao/h5/default.png" icon-size="81vw" height="126vw"
width="81vw" :src="item.url" />
</template>
</view>
<view class="text-gray pd-20">{{ '>>长按上方图片保存<<' }}</view>
</view>
</template>
<script setup lang="ts">
import api from '@/api'
import { computed, onBeforeMount, reactive } from 'vue';
import { PageUtils } from '@/utils/utils';
const state = reactive({
title: PageUtils.getTitle(),
tab: {
active: 'detail',
list: [
{ title: '详情', name: 'detail', url: "" },
{ title: '图+二维码', name: 'pictureAndQrCode', url: "" },
{ title: '二维码', name: 'qrCode', url: "" },
{ title: '无底高清', name: 'skuImage', url: "" },
{ title: '吊牌', name: 'handTag', url: "" }
]
},
skuId: '',
data: {} as any,
brand: {} as any,
otherInfo: {
color: '',
material: ''
}
})
const skuData = computed(() => {
if (!state.data?.skuJson) return ''
const item = state.data.skuJson.find((item: any) => item.skuId == state.skuId)
return item
})
onBeforeMount(() => {
const query: any = PageUtils.getCurQuery()
state.skuId = query.skuId
if (!state.skuId) {
uni.navigateTo({
url: '/pages/index'
})
return
}
getProduct()
})
function getProduct() {
api.getProduct(state.skuId, { domain: uni.getStorageSync('subdomain') }).then((data: any) => {
state.data = data
const colorItem = state.data.labelJson.find((item: any) => item.labelNum == '10011')
const materialItem = state.data.labelJson.find((item: any) => item.labelNum == '10010')
if (colorItem) state.otherInfo.color = colorItem.labelParams.map((item: any) => item.name).join(',')
if (materialItem) state.otherInfo.material = materialItem.labelParams.map((item: any) => item.name).join(',')
brandInfo()
})
}
function brandInfo() {
api.brandInfo({ brandId: state.data.brandId }).then((data: any) => {
state.brand = data
const item = state.tab.list.find((item: any) => item.name == state.tab.active)
onTab(item ? item.name : state.tab.list[0].name)
})
}
function getBase64(data: any) {
const blob = new Blob([data], { type: "image/jpg" })
return new Promise((resolve, reject) => {
const reader = new FileReader()
reader.readAsDataURL(blob)
reader.onload = () => resolve(reader.result)
reader.onerror = (error) => reject(error)
});
}
function imageDetail() {
console.log(state.otherInfo,'state.otherInfo');
const item = state.tab.list.find((item: any) => item.name == 'detail')
if (!item || item.url) return
api.imageDetail({
brandLogo: state.brand.brandLogo,
skuImage: skuData.value.mainImg,
model: skuData.value.model,
productPrice: skuData.value.productPrice,
salePrice: skuData.value.salePrice,
skuId: state.skuId,
domain: uni.getStorageSync("subdomain"),
specify: `W${skuData.value.specWidth}*H${skuData.value.specHeight}*D${skuData.value.specLength}`,
color: state.otherInfo.color,
lights: skuData.value.lightSourceCount || '',
material: state.otherInfo.material,
isSJS: skuData.value.salePrice !== null ? 1 : 0,
}).then((data: any) => {
getBase64(data).then((base64: any) => {
item.url = base64
})
})
}
function pictureAndQrCode() {
const item = state.tab.list.find((item: any) => item.name == 'pictureAndQrCode')
if (!item || item.url) return
api.pictureAndQrCode({
brandLogo: state.brand.brandLogo,
skuImage: skuData.value.mainImg,
model: skuData.value.model,
skuId: state.skuId,
domain: uni.getStorageSync("subdomain")
}).then((data: any) => {
getBase64(data).then((base64: any) => {
item.url = base64
})
})
}
function qrCode() {
const item = state.tab.list.find((item: any) => item.name == 'qrCode')
if (!item || item.url) return
api.imageQrCode({
brandLogo: state.brand.brandLogo,
model: skuData.value.model,
skuId: state.skuId,
domain: uni.getStorageSync("subdomain"),
}).then((data: any) => {
getBase64(data).then((base64: any) => {
item.url = base64
})
})
}
function skuImage() {
const item = state.tab.list.find((item: any) => item.name == 'skuImage')
if (!item || item.url) return
api.skuImage({
brandLogo: state.brand.brandLogo,
skuImage: skuData.value.mainImg,
model: skuData.value.model,
productPrice: skuData.value.productPrice,
salePrice: skuData.value.salePrice,
skuId: state.skuId,
domain: uni.getStorageSync("subdomain"),
specify: `W${skuData.value.specWidth}*H${skuData.value.specHeight}*D${skuData.value.specLength}`,
color: state.otherInfo.color,
lights: skuData.value.lightSourceCount || '',
material: state.otherInfo.material,
isSJS: skuData.value.salePrice !== null ? 1 : 0,
}).then((data: any) => {
getBase64(data).then((base64: any) => {
item.url = base64
})
})
}
function handTag() {
const item = state.tab.list.find((item: any) => item.name == 'handTag')
if (!item || item.url) return
api.handTag({
brandLogo: state.brand.brandLogo,
skuImage: skuData.value.mainImg,
model: skuData.value.model,
productPrice: skuData.value.productPrice,
skuId: state.skuId,
domain: uni.getStorageSync("subdomain"),
specify: `W${skuData.value.specWidth}*H${skuData.value.specHeight}*D${skuData.value.specLength}`,
classify: state.data.classify,
brandName: state.brand.brandName,
material: state.otherInfo.material
}).then((data: any) => {
getBase64(data).then((base64: any) => {
item.url = base64
})
})
}
function onTab(name: string) {
if (!skuData.value) return
if (name == 'detail') {
imageDetail()
} else if (name == 'pictureAndQrCode') {
pictureAndQrCode()
} else if (name == 'qrCode') {
qrCode()
} else if (name == 'skuImage') {
skuImage()
} else if (name == 'handTag') {
handTag()
}
}
function goBack() {
PageUtils.goBack()
}
</script>
<style lang="scss" scoped>
.top_tab {
width: 100vw;
}
</style>
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
<template>
<web-view src="https://img.edsmall.com/ROOT/ETao/resource/policy.html" />
</template>
\ No newline at end of file
此差异已折叠。
<template>
<web-view src="https://img.edsmall.com/ROOT/ETao/resource/service.html" />
</template>
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
<template>
<view class="justify-center pd-b-px-55">
已移除地图
</view>
</template>
<script setup lang="ts">
</script>
<style lang="scss" scoped>
</style>
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册