This commit is contained in:
曹辉 2022-12-01 09:59:28 +08:00
parent 9b2e0c608a
commit 17241a4187
6 changed files with 324 additions and 234 deletions

View File

@ -1,208 +1,213 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head>
<head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> <link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= webpackConfig.name %></title> <title>
<%= webpackConfig.name %>
</title>
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=6b427d1f3e633c70e11ca6e304444a63"></script>
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]--> <!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
<style> <style>
html, html,
body, body,
#app { #app {
height: 100%; height: 100%;
margin: 0px; margin: 0px;
padding: 0px; padding: 0px;
} }
.chromeframe {
margin: 0.2em 0;
background: #ccc;
color: #000;
padding: 0.2em 0;
}
#loader-wrapper { .chromeframe {
position: fixed; margin: 0.2em 0;
top: 0; background: #ccc;
left: 0; color: #000;
width: 100%; padding: 0.2em 0;
height: 100%; }
z-index: 999999;
}
#loader { #loader-wrapper {
display: block; position: fixed;
position: relative; top: 0;
left: 50%; left: 0;
top: 50%; width: 100%;
width: 150px; height: 100%;
height: 150px; z-index: 999999;
margin: -75px 0 0 -75px; }
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-webkit-animation: spin 2s linear infinite;
-ms-animation: spin 2s linear infinite;
-moz-animation: spin 2s linear infinite;
-o-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
z-index: 1001;
}
#loader:before { #loader {
content: ""; display: block;
position: absolute; position: relative;
top: 5px; left: 50%;
left: 5px; top: 50%;
right: 5px; width: 150px;
bottom: 5px; height: 150px;
border-radius: 50%; margin: -75px 0 0 -75px;
border: 3px solid transparent; border-radius: 50%;
border-top-color: #FFF; border: 3px solid transparent;
-webkit-animation: spin 3s linear infinite; border-top-color: #FFF;
-moz-animation: spin 3s linear infinite; -webkit-animation: spin 2s linear infinite;
-o-animation: spin 3s linear infinite; -ms-animation: spin 2s linear infinite;
-ms-animation: spin 3s linear infinite; -moz-animation: spin 2s linear infinite;
animation: spin 3s linear infinite; -o-animation: spin 2s linear infinite;
} animation: spin 2s linear infinite;
z-index: 1001;
}
#loader:after { #loader:before {
content: ""; content: "";
position: absolute; position: absolute;
top: 15px; top: 5px;
left: 15px; left: 5px;
right: 15px; right: 5px;
bottom: 15px; bottom: 5px;
border-radius: 50%; border-radius: 50%;
border: 3px solid transparent; border: 3px solid transparent;
border-top-color: #FFF; border-top-color: #FFF;
-moz-animation: spin 1.5s linear infinite; -webkit-animation: spin 3s linear infinite;
-o-animation: spin 1.5s linear infinite; -moz-animation: spin 3s linear infinite;
-ms-animation: spin 1.5s linear infinite; -o-animation: spin 3s linear infinite;
-webkit-animation: spin 1.5s linear infinite; -ms-animation: spin 3s linear infinite;
animation: spin 1.5s linear infinite; animation: spin 3s linear infinite;
} }
#loader:after {
content: "";
position: absolute;
top: 15px;
left: 15px;
right: 15px;
bottom: 15px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-moz-animation: spin 1.5s linear infinite;
-o-animation: spin 1.5s linear infinite;
-ms-animation: spin 1.5s linear infinite;
-webkit-animation: spin 1.5s linear infinite;
animation: spin 1.5s linear infinite;
}
@-webkit-keyframes spin { @-webkit-keyframes spin {
0% { 0% {
-webkit-transform: rotate(0deg); -webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg); -ms-transform: rotate(0deg);
transform: rotate(0deg); transform: rotate(0deg);
} }
100% { 100% {
-webkit-transform: rotate(360deg); -webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg); -ms-transform: rotate(360deg);
transform: rotate(360deg); transform: rotate(360deg);
} }
} }
@keyframes spin { @keyframes spin {
0% { 0% {
-webkit-transform: rotate(0deg); -webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg); -ms-transform: rotate(0deg);
transform: rotate(0deg); transform: rotate(0deg);
} }
100% { 100% {
-webkit-transform: rotate(360deg); -webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg); -ms-transform: rotate(360deg);
transform: rotate(360deg); transform: rotate(360deg);
} }
} }
#loader-wrapper .loader-section {
position: fixed;
top: 0;
width: 51%;
height: 100%;
background: #7171C6;
z-index: 1000;
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0);
}
#loader-wrapper .loader-section { #loader-wrapper .loader-section.section-left {
position: fixed; left: 0;
top: 0; }
width: 51%;
height: 100%;
background: #7171C6;
z-index: 1000;
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0);
}
#loader-wrapper .loader-section.section-left { #loader-wrapper .loader-section.section-right {
left: 0; right: 0;
} }
#loader-wrapper .loader-section.section-right { .loaded #loader-wrapper .loader-section.section-left {
right: 0; -webkit-transform: translateX(-100%);
} -ms-transform: translateX(-100%);
transform: translateX(-100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader-wrapper .loader-section.section-right {
-webkit-transform: translateX(100%);
-ms-transform: translateX(100%);
transform: translateX(100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader-wrapper .loader-section.section-left { .loaded #loader {
-webkit-transform: translateX(-100%); opacity: 0;
-ms-transform: translateX(-100%); -webkit-transition: all 0.3s ease-out;
transform: translateX(-100%); transition: all 0.3s ease-out;
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); }
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader-wrapper .loader-section.section-right { .loaded #loader-wrapper {
-webkit-transform: translateX(100%); visibility: hidden;
-ms-transform: translateX(100%); -webkit-transform: translateY(-100%);
transform: translateX(100%); -ms-transform: translateY(-100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); transform: translateY(-100%);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); -webkit-transition: all 0.3s 1s ease-out;
} transition: all 0.3s 1s ease-out;
}
.loaded #loader { .no-js #loader-wrapper {
opacity: 0; display: none;
-webkit-transition: all 0.3s ease-out; }
transition: all 0.3s ease-out;
}
.loaded #loader-wrapper { .no-js h1 {
visibility: hidden; color: #222222;
-webkit-transform: translateY(-100%); }
-ms-transform: translateY(-100%);
transform: translateY(-100%);
-webkit-transition: all 0.3s 1s ease-out;
transition: all 0.3s 1s ease-out;
}
.no-js #loader-wrapper { #loader-wrapper .load_title {
display: none; font-family: 'Open Sans';
} color: #FFF;
font-size: 19px;
width: 100%;
text-align: center;
z-index: 9999999999999;
position: absolute;
top: 60%;
opacity: 1;
line-height: 30px;
}
.no-js h1 { #loader-wrapper .load_title span {
color: #222222; font-weight: normal;
} font-style: italic;
font-size: 13px;
color: #FFF;
opacity: 0.5;
}
</style>
</head>
#loader-wrapper .load_title { <body>
font-family: 'Open Sans';
color: #FFF;
font-size: 19px;
width: 100%;
text-align: center;
z-index: 9999999999999;
position: absolute;
top: 60%;
opacity: 1;
line-height: 30px;
}
#loader-wrapper .load_title span {
font-weight: normal;
font-style: italic;
font-size: 13px;
color: #FFF;
opacity: 0.5;
}
</style>
</head>
<body>
<div id="app"> <div id="app">
<div id="loader-wrapper"> <div id="loader-wrapper">
<div id="loader"></div> <div id="loader"></div>
<div class="loader-section section-left"></div> <div class="loader-section section-left"></div>
<div class="loader-section section-right"></div> <div class="loader-section section-right"></div>
<div class="load_title">正在加载系统资源,请耐心等待</div> <div class="load_title">正在加载系统资源,请耐心等待</div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -11,46 +11,46 @@ NProgress.configure({ showSpinner: false })
const whiteList = ['/login', '/auth-redirect', '/bind', '/register'] const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
NProgress.start() NProgress.start()
if (getToken()) { if (getToken()) {
to.meta.title && store.dispatch('settings/setTitle', to.meta.title) to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
/* has token*/ /* has token*/
if (to.path === '/login') { if (to.path === '/login') {
next({ path: '/' }) next({ path: '/' })
NProgress.done() NProgress.done()
} else {
if (store.getters.roles.length === 0) {
isRelogin.show = true
// 判断当前用户是否已拉取完user_info信息
store.dispatch('GetInfo').then(() => {
isRelogin.show = false
store.dispatch('GenerateRoutes').then(accessRoutes => {
// 根据roles权限生成可访问的路由表
router.addRoutes(accessRoutes) // 动态添加可访问路由表
next({...to, replace: true }) // hack方法 确保addRoutes已完成
})
}).catch(err => {
store.dispatch('LogOut').then(() => {
Message.error(err)
next({ path: '/' })
})
})
} else {
next()
}
}
} else { } else {
if (store.getters.roles.length === 0) { // 没有token
isRelogin.show = true if (whiteList.indexOf(to.path) !== -1) {
// 判断当前用户是否已拉取完user_info信息 // 在免登录白名单,直接进入
store.dispatch('GetInfo').then(() => { next()
isRelogin.show = false } else {
store.dispatch('GenerateRoutes').then(accessRoutes => { next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
// 根据roles权限生成可访问的路由表 NProgress.done()
router.addRoutes(accessRoutes) // 动态添加可访问路由表 }
next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
})
}).catch(err => {
store.dispatch('LogOut').then(() => {
Message.error(err)
next({ path: '/' })
})
})
} else {
next()
}
} }
} else {
// 没有token
if (whiteList.indexOf(to.path) !== -1) {
// 在免登录白名单,直接进入
next()
} else {
next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
NProgress.done()
}
}
}) })
router.afterEach(() => { router.afterEach(() => {
NProgress.done() NProgress.done()
}) })

View File

@ -56,6 +56,7 @@
> >
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table <el-table
v-loading="loading" v-loading="loading"
:data="OrderDetailsList" :data="OrderDetailsList"
@ -289,7 +290,21 @@
> >
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-form-item
label="预约服务位置"
v-if="
query.orderStatus == 'COMPLETE' || query.orderStatus == 'EVALUATED'
"
>
</el-form-item>
</el-form> </el-form>
<div
id="container"
v-if="
this.query.orderStatus == 'COMPLETE' ||
this.query.orderStatus == 'EVALUATED'
"
></div>
</el-dialog> </el-dialog>
<!-- 派单弹框 --> <!-- 派单弹框 -->
<el-dialog <el-dialog
@ -600,5 +615,9 @@ export default indexjs;
width: 250px; width: 250px;
height: 250px; height: 250px;
} }
#container {
width: 100%;
height: 600px;
}
</style> </style>

View File

@ -7,15 +7,13 @@ import {
xylWeChatRefundNotify, xylWeChatRefundNotify,
appointmentOrderDetails, appointmentOrderDetails,
} from "@/api/system/order"; } from "@/api/system/order";
import {
selectOrderEvaluate
} from "@/api/system/goodsOrder";
import { getListByUser } from "@/api/system/userlist.js"; import { getListByUser } from "@/api/system/userlist.js";
import baseurl from '@/api/baseurl.js' import baseurl from '@/api/baseurl.js'
export default { export default {
name: "order", name: "order",
data() { data() {
return { return {
map: null,
baseurl: null, baseurl: null,
orderStatuslist: [{ orderStatuslist: [{
value: "WAIT_PAY", value: "WAIT_PAY",
@ -127,7 +125,52 @@ export default {
this.getList(); this.getList();
this.baseurl = baseurl this.baseurl = baseurl
}, },
mounted() {},
methods: { methods: {
init(query) {
this.map = new AMap.Map("container", {
resizeEnable: true, //设置地图可缩放
zoom: 18, //设置地图的层级
center: [query.serveLocationLongitude, query.serveLocationLatitude], //设置地图中心点 更多配置项参照高德官网的配置
});
var layer = new AMap.LabelsLayer({
zooms: [3, 20],
zIndex: 1000,
// 开启标注避让默认为开启v1.4.15 新增属性
collision: true,
// 开启标注淡入动画默认为开启v1.4.15 新增属性
animation: true,
});
this.map.add(layer);
var labelMarker = new AMap.LabelMarker({
name: "",
position: [query.serveLocationLongitude, query.serveLocationLatitude],
icon: {
type: "image",
image: "https://a.amap.com/jsapi_demos/static/images/poi-marker.png",
clipOrigin: [280, 8],
clipSize: [50, 68],
size: [25, 34],
anchor: "bottom-center",
angel: 0,
retina: true,
},
text: {
content: "",
direction: "top",
offset: [0, 0],
style: {
fontSize: 13,
fontWeight: "normal",
fillColor: "#fff",
padding: "2, 5",
backgroundColor: "#22884f",
},
},
});
layer.add(labelMarker);
},
//取消预约确定按钮 //取消预约确定按钮
ordercacenl() { ordercacenl() {
var obj = { var obj = {
@ -176,6 +219,7 @@ export default {
seeLook(row) { seeLook(row) {
this.loading = true this.loading = true
const id = row.orderNo; const id = row.orderNo;
this.map = null
appointmentOrderDetails(id).then((res) => { appointmentOrderDetails(id).then((res) => {
res.data.forEach((e) => { res.data.forEach((e) => {
if (e.serviceDate) { if (e.serviceDate) {
@ -185,22 +229,32 @@ export default {
}); });
this.query = res.data[0]; this.query = res.data[0];
if (row.orderStatus == 'EVALUATED') { if (row.orderStatus == 'EVALUATED') {
if (res.data) { if (res.data) {
if (res.data[0].evaluateSatisfaction == 'COMMONLY') { if (res.data[0].evaluateSatisfaction == 'COMMONLY') {
this.query.evaluateSatisfaction = '一般' this.query.evaluateSatisfaction = '一般'
} else if (res.data[0].evaluateSatisfaction == 'SATISFIED') { } else if (res.data[0].evaluateSatisfaction == 'SATISFIED') {
this.query.evaluateSatisfaction = '满意' this.query.evaluateSatisfaction = '满意'
} else if (res.data[0].evaluateSatisfaction == 'DISSATISFIED') { } else if (res.data[0].evaluateSatisfaction == 'DISSATISFIED') {
this.query.evaluateSatisfaction = '不满意' this.query.evaluateSatisfaction = '不满意'
}
this.loading = false
this.innerVisible4 = true;
} else {
this.loading = false
this.innerVisible4 = true;
} }
this.loading = false
this.innerVisible4 = true;
setTimeout(() => {
this.init(this.query)
}, 500);
} else {
this.loading = false
this.innerVisible4 = true;
setTimeout(() => {
this.init(this.query)
}, 500);
}
} else if (row.orderStatus == 'COMPLETE') {
this.loading = false
this.innerVisible4 = true;
setTimeout(() => {
this.init(this.query)
}, 500);
} else { } else {
this.loading = false this.loading = false
this.innerVisible4 = true; this.innerVisible4 = true;

View File

@ -54,6 +54,7 @@
/> />
<div v-else></div> <div v-else></div>
</div> </div>
<div class="title">请上传图片为800x800px的正方形</div>
</el-col> </el-col>
</el-row> </el-row>
<br /> <br />
@ -244,6 +245,12 @@ export default {
}; };
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.title {
position: absolute;
bottom: 5%;
left: 50%;
transform: translate(-50%, 0%);
}
.avatar-upload-preview { .avatar-upload-preview {
position: absolute; position: absolute;
top: 0%; top: 0%;

View File

@ -15,6 +15,11 @@ const port = process.env.port || process.env.npm_config_port || 82 // 端口
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions //官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
// 这里只列一部分,具体配置参考文档 // 这里只列一部分,具体配置参考文档
module.exports = { module.exports = {
configureWebpack: {
externals: {
'AMap': 'AMap'
},
},
// 部署生产环境和开发环境下的URL。 // 部署生产环境和开发环境下的URL。
// 默认情况下Vue CLI 会假设你的应用是被部署在一个域名的根路径上 // 默认情况下Vue CLI 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.xinyilu.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.xinyilu.vip/admin/,则设置 baseUrl 为 /admin/。 // 例如 https://www.xinyilu.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.xinyilu.vip/admin/,则设置 baseUrl 为 /admin/。