Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gk
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
micro_app
gk
Commits
844c9782
Commit
844c9782
authored
Jul 03, 2024
by
daniel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(service): 新增自助服务
parent
d5149a5e
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
920 additions
and
92 deletions
+920
-92
JoyfulRichTextMapper.xml
...dge/jadp/plugins/cmpt/dao/mapper/JoyfulRichTextMapper.xml
+5
-1
JoyfulRichTextService.java
...idge/jadp/plugins/cmpt/service/JoyfulRichTextService.java
+3
-0
JoyfulRoadController.java
.../dlbridge/jadp/plugins/cmpt/web/JoyfulRoadController.java
+7
-6
ServiceSettingController.java
...ridge/jadp/plugins/cmpt/web/ServiceSettingController.java
+40
-0
service.jsp
src/main/webapp/WEB-INF/views/cmpt/service.jsp
+730
-0
menu.jsp
src/main/webapp/WEB-INF/views/common/menu.jsp
+7
-1
score.css
src/main/webapp/static/cmpt/score.css
+128
-84
No files found.
src/main/java/com/dlbridge/jadp/plugins/cmpt/dao/mapper/JoyfulRichTextMapper.xml
View file @
844c9782
...
@@ -89,6 +89,7 @@
...
@@ -89,6 +89,7 @@
,remark2
,remark2
,remark3
,remark3
,remark4
,remark4
,status
FROM
FROM
gksite.joyful_rich_text
gksite.joyful_rich_text
WHERE
WHERE
...
@@ -97,7 +98,8 @@
...
@@ -97,7 +98,8 @@
<select
id=
"getJoyfulRichTextList"
resultType=
"com.dlbridge.jadp.plugins.cmpt.dao.model.JoyfulRichText"
>
<select
id=
"getJoyfulRichTextList"
resultType=
"com.dlbridge.jadp.plugins.cmpt.dao.model.JoyfulRichText"
>
SELECT
SELECT
title
id
,title
,address
,address
,lng
,lng
,lat
,lat
...
@@ -106,6 +108,8 @@
...
@@ -106,6 +108,8 @@
,remark2
,remark2
,remark3
,remark3
,remark4
,remark4
,type
,status
FROM
FROM
gksite.joyful_rich_text
gksite.joyful_rich_text
WHERE
WHERE
...
...
src/main/java/com/dlbridge/jadp/plugins/cmpt/service/JoyfulRichTextService.java
View file @
844c9782
...
@@ -7,6 +7,8 @@ import com.dlbridge.jadp.plugins.cmpt.utils.GpsUtil;
...
@@ -7,6 +7,8 @@ import com.dlbridge.jadp.plugins.cmpt.utils.GpsUtil;
import
com.dlbridge.jadp.plugins.cmpt.utils.QRCodeUtil
;
import
com.dlbridge.jadp.plugins.cmpt.utils.QRCodeUtil
;
import
com.google.gson.Gson
;
import
com.google.gson.Gson
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
...
@@ -25,6 +27,7 @@ import java.util.stream.Collectors;
...
@@ -25,6 +27,7 @@ import java.util.stream.Collectors;
@Service
@Service
public
class
JoyfulRichTextService
{
public
class
JoyfulRichTextService
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
JoyfulRichTextService
.
class
);
@Resource
@Resource
JoyfulRichTextMapper
joyfulRichTextMapper
;
JoyfulRichTextMapper
joyfulRichTextMapper
;
...
...
src/main/java/com/dlbridge/jadp/plugins/cmpt/web/JoyfulRoadController.java
View file @
844c9782
...
@@ -151,12 +151,13 @@ public class JoyfulRoadController {
...
@@ -151,12 +151,13 @@ public class JoyfulRoadController {
@PostMapping
(
value
=
"/getJoyfulRichTextList/{pageNo}/{pageCount}"
)
@PostMapping
(
value
=
"/getJoyfulRichTextList/{pageNo}/{pageCount}"
)
@ApiOperation
(
value
=
"自助服务管理条件检索"
,
notes
=
"自助服务管理条件检索"
,
tags
=
"自助服务管理条件检索"
)
@ApiOperation
(
value
=
"自助服务管理条件检索"
,
notes
=
"自助服务管理条件检索"
,
tags
=
"自助服务管理条件检索"
)
public
Result
<
List
<
JoyfulRichText
>>
getJoyfulRichTextList
(
@RequestBody
JoyfulRichTextBean
joyfulRichTextBean
,
@PathVariable
(
"pageNo"
)
int
pageNo
,
@PathVariable
(
"pageCount"
)
int
pageCount
)
{
public
Result
<
List
<
JoyfulRichText
>>
getJoyfulRichTextList
(
@RequestBody
JoyfulRichTextBean
joyfulRichTextBean
,
@PathVariable
(
"pageNo"
)
int
pageNo
,
@PathVariable
(
"pageCount"
)
int
pageCount
)
{
if
(
StringUtils
.
isNotBlank
(
joyfulRichTextBean
.
getType
()))
{
// TODO 先注释
}
else
if
(
StringUtils
.
isNotBlank
(
joyfulRichTextBean
.
getTitle
()))
{
//if (StringUtils.isNotBlank(joyfulRichTextBean.getType())) {
}
else
if
(
StringUtils
.
isNotBlank
(
joyfulRichTextBean
.
getDistance
())
&&
StringUtils
.
isNotBlank
(
joyfulRichTextBean
.
getLng
())
&&
StringUtils
.
isNotBlank
(
joyfulRichTextBean
.
getLat
()))
{
//} else if (StringUtils.isNotBlank(joyfulRichTextBean.getTitle())) {
}
else
{
//} else if (StringUtils.isNotBlank(joyfulRichTextBean.getDistance()) && StringUtils.isNotBlank(joyfulRichTextBean.getLng()) && StringUtils.isNotBlank(joyfulRichTextBean.getLat())) {
return
Result
.
fail
().
setMsg
(
"请输入检索条件。"
);
//} else {
}
// return Result.fail().setMsg("请输入检索条件。");
//}
List
<
JoyfulRichText
>
joyfulRichTextList
=
joyfulRichTextService
.
getJoyfulRichTextList
(
joyfulRichTextBean
);
List
<
JoyfulRichText
>
joyfulRichTextList
=
joyfulRichTextService
.
getJoyfulRichTextList
(
joyfulRichTextBean
);
int
fromIndex
=
pointService
.
getOffset
(
pageNo
,
pageCount
);
int
fromIndex
=
pointService
.
getOffset
(
pageNo
,
pageCount
);
joyfulRichTextList
=
JoyfulRichTextService
.
subList
(
joyfulRichTextList
,
fromIndex
,
fromIndex
+
pageCount
);
joyfulRichTextList
=
JoyfulRichTextService
.
subList
(
joyfulRichTextList
,
fromIndex
,
fromIndex
+
pageCount
);
...
...
src/main/java/com/dlbridge/jadp/plugins/cmpt/web/ServiceSettingController.java
0 → 100644
View file @
844c9782
package
com
.
dlbridge
.
jadp
.
plugins
.
cmpt
.
web
;
import
com.dlbridge.jadp.common.interceptor.PageView
;
import
com.dlbridge.jadp.plugins.cmpt.bean.CmptScoreRule
;
import
com.dlbridge.jadp.plugins.cmpt.dao.model.Cmpt
;
import
com.dlbridge.jadp.plugins.cmpt.service.CmptScoreRuleService
;
import
com.dlbridge.jadp.plugins.cmpt.service.CmptService
;
import
com.dlbridge.jadp.plugins.cmpt.service.RemoteService
;
import
com.neusoft.www.utils.web.Result
;
import
lombok.extern.log4j.Log4j2
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
org.springframework.web.servlet.ModelAndView
;
import
springfox.documentation.annotations.ApiIgnore
;
import
javax.annotation.Resource
;
import
java.util.List
;
@Controller
@Log4j2
@RequestMapping
(
"gk/service/"
)
@ApiIgnore
public
class
ServiceSettingController
{
@Resource
private
CmptService
cmptService
;
@RequestMapping
(
"index/{cmptId}"
)
@PageView
public
ModelAndView
outterLink
(
@PathVariable
(
"cmptId"
)
Integer
cmptId
,
ModelAndView
mv
)
{
Cmpt
cmpt
=
cmptService
.
queryCmptBycmptId
(
cmptId
);
mv
.
addObject
(
"cmpt"
,
cmpt
);
mv
.
setViewName
(
"cmpt/service"
);
return
mv
;
}
}
src/main/webapp/WEB-INF/views/cmpt/service.jsp
0 → 100644
View file @
844c9782
<%@ page
language=
"java"
contentType=
"text/html; charset=utf-8"
pageEncoding=
"utf-8"
%>
<%@ include
file=
"/WEB-INF/views/include/taglib.jsp"
%>
<%@ taglib
prefix=
"fn"
uri=
"http://java.sun.com/jsp/jstl/functions"
%>
<%@ taglib
prefix=
"c"
uri=
"http://java.sun.com/jsp/jstl/core"
%>
<%@ taglib
prefix=
"fmt"
uri=
"http://java.sun.com/jsp/jstl/fmt"
%>
<!doctype html>
<html>
<head>
<title>
自助服务
</title>
<!-- Bootstrap CSS-->
<link
rel=
"stylesheet"
href=
"${ctxStatic}/newdermon/vendor/bootstrap/css/bootstrap.min.css"
>
<!-- Font Awesome CSS-->
<link
rel=
"stylesheet"
href=
"${ctxStatic}/newdermon/vendor/font-awesome/css/font-awesome.min.css"
>
<!-- Fontastic Custom icon font-->
<link
rel=
"stylesheet"
href=
"${ctxStatic}/newdermon/css/fontastic.css"
>
<!-- Google fonts - Poppins -->
<link
rel=
"stylesheet"
href=
"${ctxStatic}/newdermon/css/font-css.css"
>
<!-- theme stylesheet-->
<link
rel=
"stylesheet"
href=
"${ctxStatic}/newdermon/css/style.default.css?v=
<%=
System
.
currentTimeMillis
()
%>
"
id=
"theme-stylesheet"
>
<!-- Custom stylesheet - for your changes-->
<link
rel=
"stylesheet"
href=
"${ctxStatic}/newdermon/css/custom.css?v=
<%=
System
.
currentTimeMillis
()
%>
"
>
<link
rel=
"stylesheet"
href=
"${ctxStatic}/newdermon/css/juery-ui-1.12.css"
>
<!-- Favicon-->
<link
rel=
"shortcut icon"
href=
"https://img.geexek.com/files/home/favicon.ico"
>
<link
rel=
"stylesheet"
href=
"${ctxStatic}/newdermon/css/custom.css?v=
<%=
System
.
currentTimeMillis
()
%>
"
>
<link
rel=
"stylesheet"
href=
"${ctxStatic}/newdermon/css/main.css?v=
<%=
System
.
currentTimeMillis
()
%>
"
>
<link
rel=
"stylesheet"
href=
"${ctxStatic}/cmpt/setting.css?v=
<%=
System
.
currentTimeMillis
()
%>
"
>
<link
rel=
"stylesheet"
href=
"${ctxStatic}/leaflet/css/leaflet.css?v=
<%=
System
.
currentTimeMillis
()
%>
"
/>
<link
rel=
"stylesheet"
href=
"${ctxStatic}/leaflet/css/leaflet_label.css"
/>
<script
src=
"${ctxStatic}/My97DatePicker/WdatePicker.js"
type=
"text/javascript"
></script>
<script
src=
"${ctxStatic}/newdermon/vendor/jquery/jquery.min.js"
></script>
<script
type=
"text/javascript"
charset=
"utf-8"
src=
"${ctxStatic}/layer/layer.js"
></script>
<link
rel=
"stylesheet"
href=
"${ctxStatic}/layer/skin/layer.css"
>
<link
rel=
"stylesheet"
href=
"/static/cmpt/score.css?
<%=
System
.
currentTimeMillis
()
%>
"
>
<style>
.action
{
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
justify-content
:
space-around
;
}
.action
div
{
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
justify-content
:
center
;
user-select
:
none
;
}
.submit
{
display
:
inline-block
;
width
:
120px
;
height
:
45px
;
text-align
:
center
;
line-height
:
45px
;
color
:
white
;
background
:
#ce3939
;
border-radius
:
4px
;
letter-spacing
:
1px
;
cursor
:
pointer
;
font-size
:
16px
;
}
.cancel
{
width
:
120px
;
height
:
45px
;
background
:
#949494
;
border-radius
:
4px
;
font-size
:
16px
;
color
:
#FFFFFF
;
line-height
:
45px
;
text-align
:
center
;
margin-right
:
20px
;
}
.input
{
width
:
100%
;
height
:
40px
!important
;
line-height
:
40px
!important
;
;
border
:
2px
solid
#F4F4F4
;
border-radius
:
4px
;
margin-right
:
30px
;
margin-left
:
0px
;
padding-left
:
12px
;
background
:
rgba
(
247
,
247
,
247
,
1
);
border-radius
:
4px
;
border
:
1px
solid
rgba
(
229
,
229
,
229
,
1
);
}
.title
{
font-size
:
24px
;
font-weight
:
500
;
color
:
rgba
(
51
,
51
,
51
,
1
);
}
.title-new
{
font-size
:
20px
;
color
:
rgba
(
51
,
51
,
51
,
1
);
margin-right
:
15px
;
margin-bottom
:
15px
;
width
:
80px
;
}
.section
{
display
:
flex
;
background
:
rgba
(
255
,
255
,
255
,
1
);
border-radius
:
4px
;
flex-direction
:
column
;
}
.func
{
display
:
flex
;
flex-direction
:
column
;
/* height: 90px; */
padding
:
5px
0
;
}
.tip
{
font-size
:
16px
;
color
:
rgba
(
51
,
51
,
51
,
1
);
position
:
absolute
;
right
:
45px
;
top
:
10px
;
}
.road-notice
{
top
:
16px
;
height
:
15px
;
width
:
15px
;
}
.road-notice-txt
{
color
:
rgb
(
206
,
57
,
57
);
font-size
:
16px
;
width
:
430px
;
display
:
inline-block
;
}
.saveDiv
{
display
:
flex
;
justify-content
:
flex-end
;
margin
:
0
20px
;
padding-top
:
10px
;
}
label
{
/* width: auto; */
/* width: 200px; */
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
}
.label-box
{
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
}
.dialog
input
{
width
:
100%
!important
;
}
.dialog
label
input
{
width
:
20px
!important
;
height
:
20px
!important
;
margin
:
0
10px
!important
;
}
.cover
{
width
:
100%
;
height
:
200px
;
background
:
rgba
(
247
,
247
,
247
,
1
);
border-radius
:
4px
;
border
:
1px
solid
rgba
(
238
,
238
,
238
,
1
);
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
cursor
:
pointer
;
background-repeat
:
no-repeat
;
background-position
:
center
;
background-size
:
auto
;
}
.icon-cover
{
width
:
34px
;
height
:
34px
;
background-image
:
url("/static/images/icon_cover.png")
;
background-size
:
100%
;
background-repeat
:
no-repeat
;
}
.section
{
width
:
100%
!important
;
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
}
.rule-field
tbody
tr
td
:first-child
{
padding-left
:
0
!important
;
height
:
auto
!
;
}
tbody
tr
td
{
font-size
:
15px
!important
;
}
</style>
</head>
<body>
<jsp:include
page=
"../common/header.jsp"
></jsp:include>
<div
class=
"page-content d-flex align-items-stretch main-body"
>
<jsp:include
page=
"../common/menu.jsp"
></jsp:include>
<div
class=
"rght"
id=
"sevice"
>
<div
class=
"section"
>
<h3
class=
"title"
>
自助服务
</h3>
<div
class=
"btn-toolbar mx-2 flex justify-between"
role=
"toolbar"
aria-label=
"Toolbar with button groups"
>
<div
class=
"btn-group mr-2"
role=
"group"
aria-label=
"First group"
>
<button
:class=
"[index==typeIndex?'btn-danger':'btn-default']"
@
click=
"changeType(index)"
type=
"button"
v-for=
"(type,index) in serviceTypes"
:key=
"type.name"
class=
"btn btn-sm"
>
{{type.name}}
</button>
</div>
<div
class=
"input-group mr-2"
>
<input
type=
"text"
class=
"form-control"
placeholder=
"请输入搜索关键字"
@
keyup
.
enter=
"queryAll"
v-model=
"keyword"
aria-label=
"Input group example"
aria-describedby=
"btnGroupAddon"
>
</div>
<button
class=
"btn btn-sm"
:class=
"{
'btn-danger':keyword
}"
@
click=
"queryAll"
>
搜索
</button>
</div>
<div
class=
"add-btn"
@
click=
"addService"
>
<span>
+
</span>
<span>
添加自助服务
</span>
</div>
</div>
<div
style=
"margin-top: -10px;margin-bottom: 50px"
>
<table
style=
"width: 100%"
class=
"rule-field"
>
<colgroup>
<col
style=
"width:20%;"
>
<col
style=
"width:40%;"
>
<col
style=
"width:10%;"
>
<col
style=
"width:15%;"
>
<col
style=
"width:15%;"
>
</colgroup>
<thead>
<tr>
<th
style=
"text-align: center"
>
封面
</th>
<th
style=
"text-align: left"
>
服务名称
</th>
<th
style=
"text-align: center"
>
类型
</th>
<th
style=
"text-align: center"
>
状态
</th>
<th
style=
"text-align: center"
>
操作
</th>
</tr>
</thead>
<tbody>
<tr
v-if=
""
v-for=
"item in list"
:data-id=
"item.id"
>
<td
style=
"text-align: center"
>
<img
:src=
"item.imgUrl"
style=
"width:80px;height:80px;"
/>
</td>
<td
class=
"name"
style=
"text-align: left;"
>
<span
v-text=
"item.title"
></span>
</td>
<td
style=
"text-align: center"
>
<span
v-text=
"serviceTypes[item.type].name"
></span>
</td>
<td
style=
"text-align: center"
>
<span
class=
"badge badge-pill"
:class=
"[item.status==1?'badge-success':'badge-default']"
v-text=
"statusType[item.status]"
></span>
</td>
<td
style=
"text-align: center"
>
<div
class=
"action"
>
<div
class=
"opt edit.opt"
@
click=
"showEdit(item.id)"
>
<span
class=
"icon-edit"
></span>
<span
class=
"edit"
>
编辑
</span>
</div>
<div
class=
"opt del"
@
click=
"delService(item)"
>
<span
class=
"icon-del"
></span>
<span
class=
"del"
>
删除
</span>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<nav
class=
"mt-2"
aria-label=
"Page navigation"
>
<ul
class=
"pagination"
>
<li
class=
"page-item"
v-if=
"page!==1"
@
click=
"preview"
><a
class=
"page-link"
href=
"#"
>
Previous
</a></li>
<li
@
click=
"changePage(item+1)"
v-for=
"item,index in totalPage"
:key=
"item+'page'"
class=
"page-item"
:class=
"{active:(index+1)==page}"
>
<a
class=
"page-link"
href=
"#"
>
{{item}}
</a>
</li>
<li
class=
"page-item"
v-if=
"list.length===pageSize"
@
click=
"next"
><a
class=
"page-link"
href=
"#"
>
Next
</a></li>
</ul>
</nav>
</div>
<div
class=
"dialog"
v-show=
"dialog"
style=
"width: 60vw; height: 80vh; z-index: 99;display: flex;flex-direction: column;"
>
<div>
<span
class=
"title"
style=
"margin-bottom: 10px; color: #CE3939"
>
{{title}}
</span>
</div>
<div
style=
"display: flex;flex-direction: column;flex:1;overflow-y: auto;"
>
<div
class=
"func"
>
<div>
<span
class=
"title-new"
>
名称
</span>
</div>
<div>
<input
class=
"input"
type=
"text"
v-model=
"service.title"
placeholder=
"请输入功能名称,最多五个字符"
>
</div>
</div>
<!-- 类型 (type) -->
<div
class=
"func"
>
<span
class=
"title-new"
>
类型
</span>
<div
class=
"label-box"
>
<label>
<input
type=
"radio"
v-model=
"service.type"
:value=
"1"
>
打卡点
</label>
<label>
<input
type=
"radio"
v-model=
"service.type"
:value=
"2"
>
服务驿站
</label>
<label>
<input
type=
"radio"
v-model=
"service.type"
:value=
"3"
>
民宿
</label>
<label>
<input
type=
"radio"
v-model=
"service.type"
:value=
"4"
>
景点
</label>
<label>
<input
type=
"radio"
v-model=
"service.type"
:value=
"5"
>
餐饮
</label>
</div>
</div>
<div
class=
"func"
>
<span
class=
"title-new"
>
地址
</span>
<div>
<input
class=
"input"
type=
"text"
v-model=
"service.address"
placeholder=
"请输入地址"
>
</div>
</div>
<div
class=
"func"
>
<span
class=
"title-new"
>
经度
</span>
<div>
<input
class=
"input"
type=
"number"
v-model=
"service.lng"
placeholder=
"请输入经度"
>
</div>
</div>
<div
class=
"func"
>
<span
class=
"title-new"
>
纬度
</span>
<div>
<input
class=
"input"
type=
"number"
v-model=
"service.lat"
placeholder=
"请输入纬度"
>
</div>
</div>
<div
class=
"func"
>
<span
class=
"title-new"
>
内容
</span>
<div>
<textarea
class=
"input"
v-model=
"service.content"
placeholder=
"请输入内容"
></textarea>
</div>
</div>
<div
class=
"func"
>
<span
class=
"title-new"
>
封面
</span>
<span
style=
"font-size: 16px;color: #ce3939;margin:10px 0;"
>
<span
style=
"font-size: 12px;display: inline-block;border-radius: 50%;height: 18px;width: 18px;background: #ce3939;color: white;text-align: center;"
>
注
</span>
<span
style=
"display: inline"
>
建议分辨率710*242
</span>
</span>
<div>
<label
for=
"file"
>
<div
v-if=
"!service.imgUrl"
class=
"cover"
>
<span
class=
"icon-cover"
></span>
</div>
<img
v-else
class=
"cover"
:src=
"service.imgUrl"
/>
</label>
<input
id=
"file"
type=
"file"
style=
"display: none"
@
change=
"uploadFile"
>
</div>
</div>
<div
class=
"func"
>
<span
class=
"title-new"
>
备注 1
</span>
<div>
<input
class=
"input"
type=
"text"
v-model=
"service.remark1"
placeholder=
"请输入备注 1"
>
</div>
</div>
<div
class=
"func"
>
<span
class=
"title-new"
>
备注 2
</span>
<div>
<input
class=
"input"
type=
"text"
v-model=
"service.remark2"
placeholder=
"请输入备注 2"
>
</div>
</div>
<div
class=
"func"
>
<span
class=
"title-new"
>
备注 3
</span>
<div>
<input
class=
"input"
type=
"text"
v-model=
"service.remark3"
placeholder=
"请输入备注 3"
>
</div>
</div>
<div
class=
"func"
>
<span
class=
"title-new"
>
备注 4
</span>
<div>
<input
class=
"input"
type=
"text"
v-model=
"service.remark4"
placeholder=
"请输入备注 4"
>
</div>
</div>
<!-- 状态 (status) -->
<div
class=
"func"
>
<span
class=
"title-new"
>
状态
</span>
<div
class=
"label-box"
>
<label>
<input
type=
"radio"
v-model=
"service.status"
value=
"0"
>
草稿
</label>
<label>
<input
type=
"radio"
v-model=
"service.status"
value=
"1"
>
发布
</label>
</div>
</div>
</div>
<div
class=
"saveDiv"
>
<span
@
click=
"cancel"
class=
"cancel"
>
取消
</span>
<span
@
click=
"submit"
class=
"submit"
>
保存
</span>
</div>
</div>
<div
v-show=
"dialog"
style=
"position: fixed;height: 100%;width: 100%;background: black;z-index: 10;opacity: 0.5;top:0px;left:0px"
>
</div>
</div>
<script
src=
"${ctxStatic}/vue/vue.js"
></script>
<script>
var
app
=
new
Vue
({
el
:
'#sevice'
,
data
:
{
list
:
[],
dialog
:
false
,
title
:
'新增自助服务'
,
service
:
{
"id"
:
null
,
"userId"
:
getUId
(),
"type"
:
1
,
// 子类型(1:打卡点,2:服务驿站,3:民宿:4:景点,5:餐饮)
"title"
:
null
,
"address"
:
null
,
"lng"
:
null
,
"lat"
:
null
,
"content"
:
null
,
"imgUrl"
:
null
,
"remark1"
:
null
,
"remark2"
:
null
,
"remark3"
:
null
,
"remark4"
:
null
,
"status"
:
1
,
// 状态(0:草稿 1:发布)
"delFlg"
:
null
// 删除状态(0:未删除 1:已删除)
},
typeIndex
:
0
,
keyword
:
''
,
page
:
1
,
pageSize
:
10
,
totalPage
:
1
,
serviceTypes
:
{
0
:
{
name
:
'全部'
,
value
:
0
,
},
1
:
{
name
:
'打卡点'
,
value
:
1
,
},
2
:
{
name
:
'服务驿站'
,
value
:
2
,
},
3
:
{
name
:
'民宿'
,
value
:
3
,
},
4
:
{
name
:
'景点'
,
value
:
4
,
},
5
:
{
name
:
'餐饮'
,
value
:
5
,
},
},
statusType
:
{
0
:
'草稿'
,
1
:
'发布'
}
},
methods
:
{
// 展示dialog
addService
()
{
this
.
dialog
=
!
this
.
dialog
;
this
.
resetForm
();
},
changePage
(
page
)
{
this
.
page
=
page
this
.
queryAll
()
},
changeType
(
index
)
{
this
.
page
=
1
this
.
typeIndex
=
index
this
.
queryAll
()
},
next
()
{
this
.
page
+=
1
this
.
queryAll
()
},
preview
()
{
this
.
page
-=
1
this
.
queryAll
()
},
// 重置表单
resetForm
()
{
this
.
service
=
{
id
:
null
,
userId
:
getUId
(),
type
:
1
,
title
:
''
,
address
:
null
,
lng
:
null
,
lat
:
null
,
content
:
null
,
imgUrl
:
null
,
remark1
:
null
,
remark2
:
null
,
remark3
:
null
,
remark4
:
null
,
status
:
1
,
delFlg
:
null
,
};
},
// 编辑
showEdit
(
id
)
{
this
.
getDetail
(
id
);
},
// 删除
delService
(
data
)
{
layer
.
confirm
(
"确认要删除吗?"
,
function
()
{
$
.
ajax
({
url
:
'/api/joyfulRoad/delJoyfulRichText'
,
data
:
JSON
.
stringify
(
data
),
// 将 data 转换为 JSON 字符串
type
:
'post'
,
contentType
:
'application/json'
,
beforeSend
:
()
=>
{
layer
.
load
()
},
success
:
()
=>
{
layer
.
msg
(
'删除成功!'
);
},
complete
:
()
=>
{
layer
.
closeAll
()
app
.
queryAll
();
}
});
});
},
// 保存
submit
()
{
const
service
=
this
.
service
// 假设 service 对象已经定义并初始化
if
(
!
service
.
imgUrl
)
{
layer
.
msg
(
"封面不能为空!"
,
{
icon
:
5
,
duration
:
1500
});
return
;
}
if
(
!
service
.
title
)
{
layer
.
msg
(
"标题不能为空!"
,
{
icon
:
5
,
duration
:
1500
});
return
;
}
if
(
!
service
.
address
)
{
layer
.
msg
(
"地址不能为空!"
,
{
icon
:
5
,
duration
:
1500
});
return
;
}
if
(
!
service
.
lng
||
!
service
.
lat
)
{
layer
.
msg
(
"经纬度不能为空!"
,
{
icon
:
5
,
duration
:
1500
});
return
;
}
if
(
!
service
.
content
)
{
layer
.
msg
(
"内容不能为空!"
,
{
icon
:
5
,
duration
:
1500
});
return
;
}
const
url
=
this
.
service
.
id
?
'/api/joyfulRoad/updJoyfulRichText'
:
'/api/joyfulRoad/insJoyfulRichText'
$
.
ajax
({
url
:
url
,
data
:
JSON
.
stringify
(
service
),
// 将 data 转换为 JSON 字符串
type
:
'post'
,
contentType
:
'application/json'
,
beforeSend
:
()
=>
{
layer
.
load
()
},
success
:
(
data
)
=>
{
layer
.
msg
(
'保存成功!'
);
app
.
$data
.
dialog
=
false
;
app
.
queryAll
();
},
complete
:
()
=>
{
layer
.
closeAll
()
}
})
},
// 返回
cancel
()
{
this
.
dialog
=
false
;
},
// 查询所有
queryAll
()
{
if
(
!
getCId
)
return
const
type
=
this
.
serviceTypes
[
this
.
typeIndex
].
value
===
0
?
null
:
this
.
serviceTypes
[
this
.
typeIndex
].
value
const
url
=
'/api/joyfulRoad/getJoyfulRichTextList/'
+
this
.
page
+
'/'
+
this
.
pageSize
$
.
ajax
({
type
:
'POST'
,
contentType
:
'application/json'
,
data
:
JSON
.
stringify
({
type
,
title
:
this
.
keyword
}),
url
,
beforeSend
:
()
=>
{
layer
.
load
()
},
complete
:
()
=>
{
layer
.
closeAll
()
},
success
:
(
data
)
=>
{
this
.
list
=
data
.
content
;
if
(
data
.
content
.
length
===
this
.
pageSize
)
this
.
totalPage
=
this
.
page
+
1
}
})
},
// 获取详情
getDetail
(
id
)
{
$
.
ajax
({
url
:
'/api/joyfulRoad/getJoyfulRichText/'
+
id
,
success
:
(
data
)
=>
{
if
(
data
.
content
)
{
this
.
service
=
data
.
content
;
this
.
dialog
=
true
;
}
},
beforeSend
:
()
=>
{
layer
.
load
()
},
complete
:
()
=>
{
layer
.
closeAll
()
},
});
},
//文件上传处理
uploadFile
(
obj
)
{
logoFile
=
obj
.
target
.
files
[
0
];
if
(
logoFile
.
type
&&
logoFile
.
type
.
indexOf
(
"image"
)
==
-
1
)
{
return
layer
.
msg
(
'请上传图片'
,
{
icon
:
5
})
}
var
reads
=
new
FileReader
();
reads
.
readAsDataURL
(
logoFile
);
reads
.
onload
=
function
()
{
//将处理完的图片文件上传到阿里云服务器
//上传LOGO图片
var
formData
=
new
FormData
();
formData
.
append
(
"uploadImg"
,
logoFile
);
$
.
ajax
({
url
:
'https://event.geexek.com/upload/file.do'
,
/*接口域名地址*/
type
:
'post'
,
data
:
formData
,
contentType
:
false
,
processData
:
false
,
success
:
function
(
res
)
{
if
(
res
.
code
==
"1"
)
{
layer
.
msg
(
'上传成功'
,
{
icon
:
1
,
time
:
1500
});
app
.
$data
.
service
.
imgUrl
=
res
.
result
}
else
{
console
.
log
(
res
);
}
},
beforeSend
:
()
=>
{
layer
.
load
()
},
complete
:
()
=>
{
layer
.
closeAll
()
},
})
};
}
}
});
app
.
queryAll
();
</script>
</body>
</html>
\ No newline at end of file
src/main/webapp/WEB-INF/views/common/menu.jsp
View file @
844c9782
...
@@ -291,6 +291,12 @@
...
@@ -291,6 +291,12 @@
<span
class=
"menu-txt"
>
排行榜
</span>
<span
class=
"menu-txt"
>
排行榜
</span>
</a>
</a>
</li>
</li>
<li
class=
"service menu-sub-item"
>
<a
href=
"/gk/service/index/${cmpt.cmptId}?uId=${uId}&cId=${cId}×tamp=${timestamp}&sign=${sign}"
>
<span
class=
"left-arrow"
></span>
<span
class=
"menu-txt"
>
自助服务
</span>
</a>
</li>
</ul>
</ul>
</li>
</li>
</ul>
</ul>
...
@@ -348,7 +354,7 @@
...
@@ -348,7 +354,7 @@
var
classes
=
[
'cmptSetting'
,
'nameList'
,
'manual'
,
'contact'
,
'manage'
,
var
classes
=
[
'cmptSetting'
,
'nameList'
,
'manual'
,
'contact'
,
'manage'
,
'route'
,
'road'
,
'equip'
,
'photo'
,
'news'
,
'cert'
,
'data'
,
'route'
,
'road'
,
'equip'
,
'photo'
,
'news'
,
'cert'
,
'data'
,
'banner'
,
'score'
,
'auto'
,
'scan'
,
'review'
,
'customer'
,
'rule'
,
'banner'
,
'score'
,
'auto'
,
'scan'
,
'review'
,
'customer'
,
'rule'
,
'outter-link'
,
'sure-letter'
,
'rankSetting'
];
'outter-link'
,
'sure-letter'
,
'rankSetting'
,
'service'
];
let
url
=
document
.
location
.
href
;
let
url
=
document
.
location
.
href
;
var
done
=
false
;
var
done
=
false
;
for
(
var
i
in
classes
)
{
for
(
var
i
in
classes
)
{
...
...
src/main/webapp/static/cmpt/score.css
View file @
844c9782
.section
{
.section
{
width
:
1010px
;
width
:
1010px
;
background
:
white
;
background
:
white
;
padding
:
20px
25px
;
padding
:
20px
25px
;
margin
:
10px
0px
;
margin
:
10px
0px
;
position
:
relative
;
position
:
relative
;
}
}
.title
{
.title
{
font-size
:
24px
;
font-size
:
24px
;
color
:
#333
;
color
:
#333
;
font-weight
:
normal
;
font-weight
:
normal
;
...
@@ -13,24 +14,29 @@
...
@@ -13,24 +14,29 @@
height
:
50px
;
height
:
50px
;
line-height
:
50px
;
line-height
:
50px
;
}
}
.count-input
{
.count-input
{
width
:
670px
;
width
:
670px
;
height
:
50px
;
height
:
50px
;
}
}
input
{
background
:
rgba
(
247
,
247
,
247
,
1
);
input
{
background
:
rgba
(
247
,
247
,
247
,
1
);
border-radius
:
4px
;
border-radius
:
4px
;
border
:
1px
solid
rgba
(
229
,
229
,
229
,
1
);
border
:
1px
solid
rgba
(
229
,
229
,
229
,
1
);
padding-left
:
7px
;
padding-left
:
7px
;
}
}
.tip
{
.tip
{
font-size
:
16px
;
font-size
:
16px
;
color
:
#333
;
color
:
#333
;
margin-right
:
10px
;
;
margin-right
:
10px
;
;
}
}
.rule-item
{
.rule-item
{
border-radius
:
4px
;
border-radius
:
4px
;
border
:
1px
solid
rgba
(
229
,
229
,
229
,
1
);
border
:
1px
solid
rgba
(
229
,
229
,
229
,
1
);
display
:
flex
;
display
:
flex
;
justify-content
:
space-between
;
justify-content
:
space-between
;
align-items
:
center
;
align-items
:
center
;
...
@@ -41,20 +47,24 @@ input{
...
@@ -41,20 +47,24 @@ input{
padding
:
0px
10px
;
padding
:
0px
10px
;
margin-top
:
10px
;
margin-top
:
10px
;
}
}
.search-group
{
.search-group
{
position
:
relative
;
position
:
relative
;
}
}
.search
{
width
:
317px
;
.search
{
height
:
50px
;
width
:
317px
;
background
:
rgba
(
247
,
247
,
247
,
1
);
height
:
50px
;
border-radius
:
4px
;
background
:
rgba
(
247
,
247
,
247
,
1
);
border
:
1px
solid
rgba
(
229
,
229
,
229
,
1
);
border-radius
:
4px
;
border
:
1px
solid
rgba
(
229
,
229
,
229
,
1
);
}
}
.clear
{
.clear
{
clear
:
both
;
clear
:
both
;
}
}
.search-btn
{
.search-btn
{
position
:
absolute
;
position
:
absolute
;
right
:
0px
;
right
:
0px
;
line-height
:
50px
;
line-height
:
50px
;
...
@@ -68,22 +78,25 @@ input{
...
@@ -68,22 +78,25 @@ input{
border-radius
:
0px
4px
4px
0pc
;
border-radius
:
0px
4px
4px
0pc
;
cursor
:
pointer
;
cursor
:
pointer
;
}
}
thead
tr
th
{
thead
tr
th
{
font-size
:
16px
;
font-size
:
16px
;
color
:
#999
;
color
:
#999
;
height
:
50px
;
height
:
50px
;
line-height
:
50px
;
line-height
:
50px
;
font-weight
:
normal
;
font-weight
:
normal
;
}
}
tbody
tr
td
{
tbody
tr
td
{
font-size
:
20px
;
font-size
:
20px
;
color
:
#333
;
color
:
#333
;
font-weight
:
400
;
font-weight
:
400
;
}
}
.add-btn
{
.add-btn
{
width
:
146px
;
width
:
146px
;
height
:
40px
;
height
:
40px
;
background
:
rgba
(
206
,
57
,
57
,
1
);
background
:
rgba
(
206
,
57
,
57
,
1
);
border-radius
:
4px
;
border-radius
:
4px
;
color
:
white
;
color
:
white
;
position
:
absolute
;
position
:
absolute
;
...
@@ -94,10 +107,11 @@ tbody tr td{
...
@@ -94,10 +107,11 @@ tbody tr td{
align-items
:
center
;
align-items
:
center
;
cursor
:
pointer
;
cursor
:
pointer
;
}
}
.deleteBtn
{
.deleteBtn
{
width
:
146px
;
width
:
146px
;
height
:
40px
;
height
:
40px
;
background
:
rgba
(
206
,
57
,
57
,
1
);
background
:
rgba
(
206
,
57
,
57
,
1
);
border-radius
:
4px
;
border-radius
:
4px
;
color
:
white
;
color
:
white
;
justify-content
:
center
;
justify-content
:
center
;
...
@@ -105,43 +119,55 @@ tbody tr td{
...
@@ -105,43 +119,55 @@ tbody tr td{
align-items
:
center
;
align-items
:
center
;
cursor
:
pointer
;
cursor
:
pointer
;
}
}
.rule-field
{
.rule-field
{
background
:
white
;
background
:
white
;
}
}
.rule-field
tr
{
.rule-field
tr
{
height
:
60px
;
height
:
60px
;
line-height
:
60px
;
line-height
:
60px
;
}
}
.rule-field
tbody
tr
td
:first-child
{
.rule-field
tbody
tr
td
:first-child
{
padding-left
:
25px
;
padding-left
:
25px
;
height
:
80px
;
height
:
80px
;
}
}
.rule-field
tbody
tr
td
:nth-child
(
2n
)
{
.rule-field
tbody
tr
td
:nth-child
(
2n
)
{
text-align
:
center
;
text-align
:
center
;
}
}
.rule-field
tbody
tr
:nth-child
(
odd
)
{
background
:
rgba
(
247
,
247
,
247
,
1
);
.rule-field
tbody
tr
:nth-child
(
odd
)
{
background
:
rgba
(
247
,
247
,
247
,
1
);
}
}
.del
,
.edit
{
.del
,
.edit
{
height
:
40px
;
height
:
40px
;
line-height
:
40px
;
;
line-height
:
40px
;
;
font-size
:
14px
;
font-size
:
14px
;
margin-right
:
0px
;
margin-right
:
0px
;
}
}
.edit
{
.edit
{
color
:
#ce3939
;
color
:
#ce3939
;
}
}
#score-body
tr
{
#score-body
tr
{
height
:
60px
;
height
:
60px
;
}
}
.opt
{
.opt
{
display
:
flex
;
display
:
flex
;
height
:
60px
;
height
:
60px
;
align-items
:
center
;
align-items
:
center
;
cursor
:
pointer
;
cursor
:
pointer
;
justify-content
:
center
;
justify-content
:
center
;
}
}
.rule-field
.opt
{
.rule-field
.opt
{
height
:
40px
;
height
:
40px
;
}
}
...
@@ -168,18 +194,22 @@ tbody tr td{
...
@@ -168,18 +194,22 @@ tbody tr td{
margin-right
:
8px
;
margin-right
:
8px
;
margin-top
:
-9px
;
margin-top
:
-9px
;
}
}
.line-tr
{
background
:
rgba
(
247
,
247
,
247
,
1
);
.line-tr
{
background
:
rgba
(
247
,
247
,
247
,
1
);
height
:
60px
;
height
:
60px
;
border-bottom
:
2px
rgba
(
229
,
229
,
229
,
1
)
solid
;
border-bottom
:
2px
rgba
(
229
,
229
,
229
,
1
)
solid
;
}
}
.line-tr
:last-child
{
.line-tr
:last-child
{
border-bottom
:
none
;
border-bottom
:
none
;
}
}
label
{
label
{
margin-bottom
:
0px
;
margin-bottom
:
0px
;
}
}
.save-btn
{
.save-btn
{
color
:
white
;
color
:
white
;
background
:
#ce3939
;
background
:
#ce3939
;
display
:
inline-block
;
display
:
inline-block
;
...
@@ -190,21 +220,24 @@ label{
...
@@ -190,21 +220,24 @@ label{
cursor
:
pointer
;
cursor
:
pointer
;
width
:
146px
;
width
:
146px
;
height
:
40px
;
height
:
40px
;
background
:
rgba
(
206
,
57
,
57
,
1
);
background
:
rgba
(
206
,
57
,
57
,
1
);
border-radius
:
4px
;
border-radius
:
4px
;
float
:
right
;
float
:
right
;
margin-right
:
16px
;
margin-right
:
16px
;
}
}
.input-group
{
.input-group
{
position
:
relative
;
position
:
relative
;
width
:
170px
;
width
:
170px
;
}
}
.time-input
{
.time-input
{
width
:
170px
;
width
:
170px
;
height
:
38px
;
height
:
38px
;
cursor
:
pointer
;
cursor
:
pointer
;
}
}
.down-arrow
{
.down-arrow
{
width
:
18px
;
width
:
18px
;
height
:
10px
;
height
:
10px
;
display
:
inline-block
;
display
:
inline-block
;
...
@@ -216,13 +249,15 @@ label{
...
@@ -216,13 +249,15 @@ label{
right
:
86px
;
right
:
86px
;
background-size
:
contain
;
background-size
:
contain
;
}
}
.line
{
.line
{
width
:
50px
;
width
:
50px
;
height
:
1px
;
height
:
1px
;
background
:
#E5E5E5
;
background
:
#E5E5E5
;
margin
:
0px
10px
;
margin
:
0px
10px
;
}
}
.export
{
.export
{
width
:
146px
;
width
:
146px
;
height
:
40px
;
height
:
40px
;
background
:
#ce3939
;
background
:
#ce3939
;
...
@@ -236,27 +271,30 @@ label{
...
@@ -236,27 +271,30 @@ label{
border-radius
:
4px
;
border-radius
:
4px
;
cursor
:
pointer
;
cursor
:
pointer
;
}
}
.mask
{
.mask
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
position
:
fixed
;
position
:
fixed
;
left
:
0px
;
left
:
0px
;
top
:
0px
;
top
:
0px
;
background
:
rgba
(
0
,
0
,
0
,
0.3
);
background
:
rgba
(
0
,
0
,
0
,
0.3
);
z-index
:
99
;
z-index
:
99
;
display
:
none
;
display
:
none
;
}
}
.maskErr
{
.maskErr
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
position
:
fixed
;
position
:
fixed
;
left
:
0px
;
left
:
0px
;
top
:
0px
;
top
:
0px
;
background
:
rgba
(
0
,
0
,
0
,
0.3
);
background
:
rgba
(
0
,
0
,
0
,
0.3
);
z-index
:
99
;
z-index
:
99
;
display
:
none
;
display
:
none
;
}
}
.dialog
{
.dialog
{
padding
:
30px
40px
;
padding
:
30px
40px
;
height
:
300px
;
height
:
300px
;
width
:
680px
;
width
:
680px
;
...
@@ -267,40 +305,46 @@ label{
...
@@ -267,40 +305,46 @@ label{
position
:
absolute
;
position
:
absolute
;
background
:
white
;
background
:
white
;
}
}
.dialog
h3
{
width
:
138px
;
.dialog
h3
{
height
:
30px
;
width
:
138px
;
font-size
:
22px
;
height
:
30px
;
font-weight
:
400
;
font-size
:
22px
;
color
:
rgba
(
206
,
57
,
57
,
1
);
font-weight
:
400
;
line-height
:
30px
;
color
:
rgba
(
206
,
57
,
57
,
1
);
}
line-height
:
30px
;
.dialog
input
{
}
width
:
610px
;
height
:
50px
;
.dialog
input
{
background
:
rgba
(
247
,
247
,
247
,
1
);
width
:
610px
;
border-radius
:
4px
;
height
:
50px
;
border
:
1px
solid
rgba
(
229
,
229
,
229
,
1
);
background
:
rgba
(
247
,
247
,
247
,
1
);
}
border-radius
:
4px
;
.btn
{
border
:
1px
solid
rgba
(
229
,
229
,
229
,
1
);
}
.btn
{
color
:
white
;
color
:
white
;
cursor
:
pointer
;
cursor
:
pointer
;
font-size
:
20px
;
/* font-size: 20px; */
}
.cancel
{
width
:
146px
;
height
:
42px
;
background
:
rgba
(
148
,
148
,
148
,
1
);
border-radius
:
4px
;
}
}
.cancel
{
width
:
146px
;
.sure
{
height
:
42px
;
width
:
146px
;
background
:
rgba
(
148
,
148
,
148
,
1
);
height
:
42px
;
border-radius
:
4px
;
background
:
rgba
(
206
,
57
,
57
,
1
);
}
border-radius
:
4px
;
.sure
{
width
:
146px
;
height
:
42px
;
background
:
rgba
(
206
,
57
,
57
,
1
);
border-radius
:
4px
;
margin-left
:
20px
;
margin-left
:
20px
;
}
}
.extra-item
{
.extra-item
{
height
:
80px
;
height
:
80px
;
display
:
flex
;
display
:
flex
;
justify-content
:
space-between
;
justify-content
:
space-between
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment