mirror of
https://github.com/ProudMuBai/GoFilm.git
synced 2026-02-03 22:44:47 +08:00
related movies sql modified
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="c_content" >
|
||||
<div class="item" v-for="item in list" :style="{width: `calc(${ list.length <= 12 ? 16 : 14}% - 16px)`}">
|
||||
<a :href="`/filmDetail?link=${item.id}`" class="default_image" >
|
||||
<a :href="`/filmDetail?link=${item.id}`" class="default_image link_content" >
|
||||
<div class="tag_group">
|
||||
<span class="cus_tag ">{{ item.year?item.year.slice(0,4):'未知' }}</span>
|
||||
<span class="cus_tag ">{{ item.cName }}</span>
|
||||
@@ -51,7 +51,7 @@ const handleImg =(e:Event)=>{
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.item a {
|
||||
.item .link_content {
|
||||
padding-top: 125%;
|
||||
position: relative;
|
||||
border-radius: 5px;
|
||||
@@ -115,7 +115,7 @@ const handleImg =(e:Event)=>{
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.item a {
|
||||
.item .link_content {
|
||||
border-radius: 5px;
|
||||
padding-top: 125%;
|
||||
background-size: cover;
|
||||
@@ -167,9 +167,10 @@ const handleImg =(e:Event)=>{
|
||||
width: 96%!important;
|
||||
padding: 2px 10px 2px 2px !important;
|
||||
text-align: left;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.cus_remark {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="container">
|
||||
<el-empty style="height: 100%; line-height: 100%; font-size: 20px" :image-size="400"
|
||||
image="/src/assets/image/404.png">
|
||||
:image="notFoundImg">
|
||||
<template #description>
|
||||
<p style="font-size: 32px;width: 100%;color: #a574b7;margin-bottom: 20px">你好像走错地方了哦!!!</p>
|
||||
<button @click="handleError('home')" >主页</button>
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import {useRouter} from "vue-router";
|
||||
import notFoundImg from '../../assets/image/404.png'
|
||||
|
||||
const router = useRouter()
|
||||
const handleError = (t:string) =>{
|
||||
|
||||
@@ -3,10 +3,11 @@
|
||||
<div class="header">
|
||||
<p>{{ d.category.name }}</p>
|
||||
<div class="c_header">
|
||||
<a :class="`nav ${d.list.length >0 && d.list[0].cid == c.id?'active':''}`" href="javascript:;"
|
||||
@click="changeCategory(c.id)"
|
||||
<!--默认全部-->
|
||||
<a :class="`nav ${d.cid == -1?'active':''}`" :href="`/categoryFilm?pid=${d.category.id}`">全部{{d.category.name}}</a>
|
||||
<!--子分类-->
|
||||
<a :class="`nav ${d.cid == c.id?'active':''}`" :href="`/categoryFilm?pid=${c.pid}&cid=${c.id}¤t=1`"
|
||||
v-for="c in d.category.children">{{ c.name }}</a>
|
||||
<!-- <a :class="`nav `" href="javascript:;" @click="changeCategory">{{ d.category.name }}</a>-->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -46,6 +47,7 @@ const d = reactive({
|
||||
page: {
|
||||
current: 0,
|
||||
},
|
||||
cid: -1
|
||||
|
||||
})
|
||||
// 获取路由参数查询对应数据
|
||||
@@ -63,11 +65,10 @@ const changeCurrent = (currentVal: number) => {
|
||||
}
|
||||
|
||||
// 点击分类事件
|
||||
const changeCategory = (cid?: any) => {
|
||||
let params = new URLSearchParams(location.search)
|
||||
// location.href = `/categoryFilm?pid=${params.get('pid')}&cid=${cid}¤t=${params.get('current')?params.get('current'):1}`
|
||||
location.href = cid ? `/categoryFilm?pid=${params.get('pid')}&cid=${cid}¤t=1` : `/categoryFilm?pid=${params.get('pid')}`
|
||||
}
|
||||
// const changeCategory = (cid?: any) => {
|
||||
// let params = new URLSearchParams(location.search)
|
||||
// location.href = cid ? `/categoryFilm?pid=${params.get('pid')}&cid=${cid}¤t=1` : `/categoryFilm?pid=${params.get('pid')}`
|
||||
// }
|
||||
|
||||
|
||||
const getFilmData = (param: any) => {
|
||||
@@ -76,6 +77,8 @@ const getFilmData = (param: any) => {
|
||||
d.category = resp.data.category
|
||||
d.list = resp.data.list
|
||||
d.page = resp.page
|
||||
// 设置当前请求的分类id
|
||||
d.cid = param.cid? param.cid:-1
|
||||
} else {
|
||||
ElMessage.error({message: "请先输入影片名称关键字再进行搜索", duration: 1000})
|
||||
}
|
||||
|
||||
@@ -7,10 +7,13 @@
|
||||
<div class="title_mt_right">
|
||||
<h3>{{ data.detail.name }}</h3>
|
||||
<ul class="tags">
|
||||
<li style="margin: 2px 0">{{ data.detail.descriptor.classTag?`${data.detail.descriptor.classTag}`.replaceAll(",", " | "):'未知' }}</li>
|
||||
<li style="margin: 2px 0">{{
|
||||
data.detail.descriptor.classTag ? `${data.detail.descriptor.classTag}`.replaceAll(",", " | ") : '未知'
|
||||
}}
|
||||
</li>
|
||||
</ul>
|
||||
<p><span>导演:</span> {{data.detail.descriptor.director }}</p>
|
||||
<p><span>主演:</span> {{handleLongText(data.detail.descriptor.actor)}}</p>
|
||||
<p><span>导演:</span> {{ data.detail.descriptor.director }}</p>
|
||||
<p><span>主演:</span> {{ handleLongText(data.detail.descriptor.actor) }}</p>
|
||||
<p><span>上映:</span> {{ data.detail.descriptor.releaseDate }}</p>
|
||||
<p><span>地区:</span> {{ data.detail.descriptor.area }}</p>
|
||||
<p v-if="data.detail.descriptor.remarks"><span>连载:</span>{{ data.detail.descriptor.remarks }}</p>
|
||||
@@ -27,12 +30,16 @@
|
||||
<h2>{{ data.detail.name }}</h2>
|
||||
<ul class="tags">
|
||||
<li class="t_c">
|
||||
<el-icon>
|
||||
<Promotion/>
|
||||
</el-icon>
|
||||
{{ data.detail.descriptor.cName }}
|
||||
<a :href="`/categoryFilm?pid=${data.detail.pid}`">
|
||||
<el-icon>
|
||||
<Promotion/>
|
||||
</el-icon>
|
||||
{{ data.detail.descriptor.cName }}
|
||||
</a>
|
||||
</li>
|
||||
<li v-if="data.detail.descriptor.classTag">
|
||||
{{ `${data.detail.descriptor.classTag}`.replaceAll(",", " ") }}
|
||||
</li>
|
||||
<li v-if="data.detail.descriptor.classTag">{{ `${data.detail.descriptor.classTag}`.replaceAll(",", " ") }}</li>
|
||||
<li>{{ data.detail.descriptor.year }}</li>
|
||||
<li>{{ data.detail.descriptor.area }}</li>
|
||||
</ul>
|
||||
@@ -130,11 +137,11 @@ const data = reactive({
|
||||
})
|
||||
|
||||
// 对部分信息过长进行处理
|
||||
const handleLongText = (t:string):string=>{
|
||||
const handleLongText = (t: string): string => {
|
||||
let res = ''
|
||||
t.split(',').forEach((s,i)=>{
|
||||
t.split(',').forEach((s, i) => {
|
||||
console.log(s)
|
||||
if (i <3) {
|
||||
if (i < 3) {
|
||||
res += `${s} `
|
||||
}
|
||||
})
|
||||
@@ -398,10 +405,13 @@ const showContent = (flag: boolean) => {
|
||||
|
||||
.tags > .t_c {
|
||||
background: rgba(155, 73, 231, 0.72);
|
||||
color: #c4c2c2;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.t_c a {
|
||||
color: #c4c2c2;
|
||||
}
|
||||
|
||||
.title p {
|
||||
text-align: left;
|
||||
font-size: 14px;
|
||||
|
||||
@@ -7,31 +7,31 @@ import {ElementPlusResolver} from "unplugin-vue-components/resolvers";
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
// 本地测试环境
|
||||
// server: {
|
||||
// host: '0.0.0.0',
|
||||
// port: 3600,
|
||||
// proxy: {
|
||||
// "/api": {
|
||||
// target: `http://127.0.0.1:3601`,
|
||||
// changeOrigin: true, // 允许跨域
|
||||
// rewrite: path => path.replace(/^\/api/,'')
|
||||
// }
|
||||
// },
|
||||
// },
|
||||
|
||||
// nginx发布构建时使用此配置
|
||||
server: {
|
||||
host: 'localhost',
|
||||
host: '0.0.0.0',
|
||||
port: 3600,
|
||||
proxy: {
|
||||
"/api": {
|
||||
target: `http://localhost`,
|
||||
target: `http://127.0.0.1:3601`,
|
||||
changeOrigin: true, // 允许跨域
|
||||
rewrite: path => path.replace(/^\/api/,'')
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
// nginx发布构建时使用此配置
|
||||
// server: {
|
||||
// host: 'localhost',
|
||||
// port: 3600,
|
||||
// proxy: {
|
||||
// "/api": {
|
||||
// target: `http://localhost`,
|
||||
// changeOrigin: true, // 允许跨域
|
||||
// rewrite: path => path.replace(/^\/api/,'')
|
||||
// }
|
||||
// },
|
||||
// },
|
||||
|
||||
plugins: [
|
||||
vue(),
|
||||
AutoImport({
|
||||
|
||||
1
film/data/nginx/html/assets/index-9cc0aebd.css
Normal file
1
film/data/nginx/html/assets/index-9cc0aebd.css
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -11,8 +11,8 @@
|
||||
<meta charset="UTF-8"/>
|
||||
<title>(╥﹏╥)</title>
|
||||
<link rel="stylesheet" href="//at.alicdn.com/t/c/font_3992367_aj8j1lxiqyw.css">
|
||||
<script type="module" crossorigin src="/assets/index-abd35057.js"></script>
|
||||
<link rel="stylesheet" href="/assets/index-df719233.css">
|
||||
<script type="module" crossorigin src="/assets/index-d8b9e3a3.js"></script>
|
||||
<link rel="stylesheet" href="/assets/index-9cc0aebd.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
@@ -18,7 +18,11 @@ func SpiderRe(c *gin.Context) {
|
||||
})
|
||||
return
|
||||
}
|
||||
logic.SL.ReZero()
|
||||
go logic.SL.ReZero()
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"status": StatusOk,
|
||||
"message": "ReZero 任务执行已成功开启",
|
||||
})
|
||||
}
|
||||
|
||||
// FixFilmDetail 修复因网络异常造成的影片详情数据丢失
|
||||
@@ -33,7 +37,11 @@ func FixFilmDetail(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
// 如果指令正确,则执行详情数据获取
|
||||
logic.SL.FixDetail()
|
||||
go logic.SL.FixDetail()
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"status": StatusOk,
|
||||
"message": "FixDetail 任务执行已成功开启",
|
||||
})
|
||||
}
|
||||
|
||||
// RefreshSitePlay 清空附属站点影片数据并重新获取
|
||||
@@ -49,6 +57,9 @@ func RefreshSitePlay(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 执行多站点播放数据重置
|
||||
logic.SL.SpiderMtPlayRe()
|
||||
|
||||
go logic.SL.SpiderMtPlayRe()
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"status": StatusOk,
|
||||
"message": "SpiderMtPlayRe 任务执行已成功开启",
|
||||
})
|
||||
}
|
||||
|
||||
@@ -280,29 +280,40 @@ func GetRelateMovieBasicInfo(search SearchInfo, page *Page) []MovieBasicInfo {
|
||||
// sql 拼接查询条件
|
||||
sql := ""
|
||||
// 优先进行名称相似匹配
|
||||
re := regexp.MustCompile("第.{1,3}季")
|
||||
if re.MatchString(search.Name) {
|
||||
search.Name = re.ReplaceAllString(search.Name, "")
|
||||
sql = fmt.Sprintf(`select * from %s where name LIKE "%%%s%%" or sub_title LIKE "%%%[2]s%%" union`, search.TableName(), search.Name)
|
||||
}
|
||||
// 执行后续匹配内容
|
||||
//search.Name = regexp.MustCompile("第.{1,3}季").ReplaceAllString(search.Name, "")
|
||||
search.Name = regexp.MustCompile(`[第.{1,3}季\s~!@#$%^&*()+={}\[\]|\\:;"'<,>·.?/\-_].*`).ReplaceAllString(search.Name, "")
|
||||
regexp.MustCompile(`[\s~!@#$%^&*()+={}\[\]|\\:;"'<,>.?/\-_]+`)
|
||||
sql = fmt.Sprintf(`select * from %s where (name LIKE "%%%s%%" or sub_title LIKE "%%%[2]s%%") AND cid=%d union`, search.TableName(), search.Name, search.Cid)
|
||||
// 执行后续匹配内容, 匹配结果过少,减少过滤条件
|
||||
//sql = fmt.Sprintf(`%s select * from %s where cid=%d AND area="%s" AND language="%s" AND`, sql, search.TableName(), search.Cid, search.Area, search.Language)
|
||||
|
||||
// 地区限制取消, 过滤掉的影片太多
|
||||
sql = fmt.Sprintf(`%s select * from %s where cid=%d AND language="%s" AND`, sql, search.TableName(), search.Cid, search.Language)
|
||||
// 根据当前影片的分类查找相似影片
|
||||
sql = fmt.Sprintf(`%s (select * from %s where cid=%d AND `, sql, search.TableName(), search.Cid)
|
||||
// 根据剧情标签查找相似影片, classTag 使用的分隔符为 , | /
|
||||
// 首先去除 classTag 中包含的所有空格
|
||||
search.ClassTag = strings.ReplaceAll(search.ClassTag, " ", "")
|
||||
// 如果 classTag 中包含分割符则进行拆分匹配
|
||||
if strings.Contains(search.ClassTag, ",") {
|
||||
s := "("
|
||||
for _, t := range strings.Split(search.ClassTag, ",") {
|
||||
s = fmt.Sprintf(`%s class_tag = "%s" OR`, s, t)
|
||||
s = fmt.Sprintf(`%s class_tag like "%%%s%%" OR`, s, t)
|
||||
}
|
||||
sql = fmt.Sprintf("%s %s)", sql, strings.TrimSuffix(s, "OR"))
|
||||
} else if strings.Contains(search.ClassTag, "/") {
|
||||
s := "("
|
||||
for _, t := range strings.Split(search.ClassTag, "/") {
|
||||
s = fmt.Sprintf(`%s class_tag like "%%%s%%" OR`, s, t)
|
||||
}
|
||||
sql = fmt.Sprintf("%s %s)", sql, strings.TrimSuffix(s, "OR"))
|
||||
} else {
|
||||
sql = fmt.Sprintf(`%s class_tag = "%s"`, sql, search.ClassTag)
|
||||
sql = fmt.Sprintf(`%s class_tag like "%%%s%%"`, sql, search.ClassTag)
|
||||
}
|
||||
// 除名称外的相似影片使用随机排序
|
||||
sql = fmt.Sprintf("%s ORDER BY RAND() limit %d,%d)", sql, page.Current, page.PageSize)
|
||||
// 条件拼接完成后加上limit参数
|
||||
sql = fmt.Sprintf("(%s) limit %d,%d", sql, page.Current, page.PageSize)
|
||||
// 执行sql
|
||||
list := []SearchInfo{}
|
||||
var list []SearchInfo
|
||||
db.Mdb.Raw(sql).Scan(&list)
|
||||
// 根据list 获取对应的BasicInfo
|
||||
var basicList []MovieBasicInfo
|
||||
|
||||
@@ -18,7 +18,11 @@ func SpiderRe(c *gin.Context) {
|
||||
})
|
||||
return
|
||||
}
|
||||
logic.SL.ReZero()
|
||||
go logic.SL.ReZero()
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"status": StatusOk,
|
||||
"message": "ReZero 任务执行已成功开启",
|
||||
})
|
||||
}
|
||||
|
||||
// FixFilmDetail 修复因网络异常造成的影片详情数据丢失
|
||||
@@ -33,7 +37,11 @@ func FixFilmDetail(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
// 如果指令正确,则执行详情数据获取
|
||||
logic.SL.FixDetail()
|
||||
go logic.SL.FixDetail()
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"status": StatusOk,
|
||||
"message": "FixDetail 任务执行已成功开启",
|
||||
})
|
||||
}
|
||||
|
||||
// RefreshSitePlay 清空附属站点影片数据并重新获取
|
||||
@@ -49,6 +57,9 @@ func RefreshSitePlay(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 执行多站点播放数据重置
|
||||
logic.SL.SpiderMtPlayRe()
|
||||
|
||||
go logic.SL.SpiderMtPlayRe()
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"status": StatusOk,
|
||||
"message": "SpiderMtPlayRe 任务执行已成功开启",
|
||||
})
|
||||
}
|
||||
|
||||
@@ -280,29 +280,40 @@ func GetRelateMovieBasicInfo(search SearchInfo, page *Page) []MovieBasicInfo {
|
||||
// sql 拼接查询条件
|
||||
sql := ""
|
||||
// 优先进行名称相似匹配
|
||||
re := regexp.MustCompile("第.{1,3}季")
|
||||
if re.MatchString(search.Name) {
|
||||
search.Name = re.ReplaceAllString(search.Name, "")
|
||||
sql = fmt.Sprintf(`select * from %s where name LIKE "%%%s%%" or sub_title LIKE "%%%[2]s%%" union`, search.TableName(), search.Name)
|
||||
}
|
||||
// 执行后续匹配内容
|
||||
//search.Name = regexp.MustCompile("第.{1,3}季").ReplaceAllString(search.Name, "")
|
||||
search.Name = regexp.MustCompile(`[第.{1,3}季\s~!@#$%^&*()+={}\[\]|\\:;"'<,>·.?/\-_].*`).ReplaceAllString(search.Name, "")
|
||||
regexp.MustCompile(`[\s~!@#$%^&*()+={}\[\]|\\:;"'<,>.?/\-_]+`)
|
||||
sql = fmt.Sprintf(`select * from %s where (name LIKE "%%%s%%" or sub_title LIKE "%%%[2]s%%") AND cid=%d union`, search.TableName(), search.Name, search.Cid)
|
||||
// 执行后续匹配内容, 匹配结果过少,减少过滤条件
|
||||
//sql = fmt.Sprintf(`%s select * from %s where cid=%d AND area="%s" AND language="%s" AND`, sql, search.TableName(), search.Cid, search.Area, search.Language)
|
||||
|
||||
// 地区限制取消, 过滤掉的影片太多
|
||||
sql = fmt.Sprintf(`%s select * from %s where cid=%d AND language="%s" AND`, sql, search.TableName(), search.Cid, search.Language)
|
||||
// 根据当前影片的分类查找相似影片
|
||||
sql = fmt.Sprintf(`%s (select * from %s where cid=%d AND `, sql, search.TableName(), search.Cid)
|
||||
// 根据剧情标签查找相似影片, classTag 使用的分隔符为 , | /
|
||||
// 首先去除 classTag 中包含的所有空格
|
||||
search.ClassTag = strings.ReplaceAll(search.ClassTag, " ", "")
|
||||
// 如果 classTag 中包含分割符则进行拆分匹配
|
||||
if strings.Contains(search.ClassTag, ",") {
|
||||
s := "("
|
||||
for _, t := range strings.Split(search.ClassTag, ",") {
|
||||
s = fmt.Sprintf(`%s class_tag = "%s" OR`, s, t)
|
||||
s = fmt.Sprintf(`%s class_tag like "%%%s%%" OR`, s, t)
|
||||
}
|
||||
sql = fmt.Sprintf("%s %s)", sql, strings.TrimSuffix(s, "OR"))
|
||||
} else if strings.Contains(search.ClassTag, "/") {
|
||||
s := "("
|
||||
for _, t := range strings.Split(search.ClassTag, "/") {
|
||||
s = fmt.Sprintf(`%s class_tag like "%%%s%%" OR`, s, t)
|
||||
}
|
||||
sql = fmt.Sprintf("%s %s)", sql, strings.TrimSuffix(s, "OR"))
|
||||
} else {
|
||||
sql = fmt.Sprintf(`%s class_tag = "%s"`, sql, search.ClassTag)
|
||||
sql = fmt.Sprintf(`%s class_tag like "%%%s%%"`, sql, search.ClassTag)
|
||||
}
|
||||
// 除名称外的相似影片使用随机排序
|
||||
sql = fmt.Sprintf("%s ORDER BY RAND() limit %d,%d)", sql, page.Current, page.PageSize)
|
||||
// 条件拼接完成后加上limit参数
|
||||
sql = fmt.Sprintf("(%s) limit %d,%d", sql, page.Current, page.PageSize)
|
||||
// 执行sql
|
||||
list := []SearchInfo{}
|
||||
var list []SearchInfo
|
||||
db.Mdb.Raw(sql).Scan(&list)
|
||||
// 根据list 获取对应的BasicInfo
|
||||
var basicList []MovieBasicInfo
|
||||
|
||||
Reference in New Issue
Block a user