Browse Source

采集评论展示到知识库后台

pull/61/head
longchao 1 day ago
parent
commit
5234f31d4e
  1. 12
      config/define.php
  2. 1
      control/index.php
  3. 52
      control/weibo.php
  4. 34
      model/mWeiboComments.php
  5. 2
      queue/crontab/add_spider_weibo_comment_task.php
  6. 26
      queue/deal/spider_weibo_comment.php
  7. 8
      tools/filter_comments.py
  8. 17
      tools/set_weibo_login_cookie.php
  9. 17
      tools/test.py
  10. 14
      view/css/index.css
  11. 31
      view/js/index.js
  12. 3
      view/templates/include/header.html
  13. 210
      view/templates/weibo/comment_detail.html
  14. 170
      view/templates/weibo/comments.html

12
config/define.php

@ -93,4 +93,14 @@
define('_RS_SPIDER_WEIBO_COMMENT', 'rs_spider_weibo_comment');
define('_RC_WEIBO_LOGIN_COOKIE2', 'rc_weibo_login_cookie2');
define('WEIBO_LOGIN_COOKIE2', '_2A25FdJmRDeRhGeFG71sY9CbOyDuIHXVmC5NZrDV8PUNbmtAYLUj1kW9NeUknrDj_DFv7tUuAQqx1kWSg_y3B4Qe3');
define('WEIBO_LOGIN_COOKIE2', '_2A25FdJmRDeRhGeFG71sY9CbOyDuIHXVmC5NZrDV8PUNbmtAYLUj1kW9NeUknrDj_DFv7tUuAQqx1kWSg_y3B4Qe3');
//该条评论是否能被搜索 -1=未处理 0=否 1=是
define('SPIDER_COMMENT_SEARCH_STATUS_WAIT', -1);
define('SPIDER_COMMENT_SEARCH_STATUS_NO', 0);
define('SPIDER_COMMENT_SEARCH_STATUS_YES', 1);
$GLOBALS['SPIDER_COMMENT_SEARCH_STATUS_LIST'] = array(
SPIDER_COMMENT_SEARCH_STATUS_WAIT => '待筛选',
SPIDER_COMMENT_SEARCH_STATUS_NO => '已剔除',
SPIDER_COMMENT_SEARCH_STATUS_YES => '筛选通过',
);

1
control/index.php

@ -95,6 +95,7 @@ class index extends publicBase {
$this->ajax_json(true, '设置成功');
}
public function interlocution() {
}

52
control/weibo.php

@ -9,13 +9,63 @@ class weibo extends publicBase {
public function home() {}
public function comments() {}
public function comment_detail() {
$id = $this->get('id') + 0;
$obj = new mWeibo();
$weibo = $obj->getWeiboDetailById($id);
if (empty($weibo)) $this->show_message('微博不存在', 'goback');
$this->view['data'] = $weibo;
$cur_page = $this->get('page')+0 > 0 ? $this->get('page')+0 : 1;
$page_size = $this->get('size')+0 > 0 ? $this->get('size')+0 : 20;
$cond = array();
$is_search = $this->get('search_type') + 0;
if(isset($_GET['search_type']) && $is_search >= 0) $cond['is_search'] = $is_search;
$mobj = new mWeiboComments();
$total = $mobj->getCommentCountByWeiboId($id, $cond);
$this->view['last_page'] = ceil($total / $page_size);
$cur_page = $cur_page > $this->view['last_page'] ? $this->view['last_page'] : $cur_page;
$this->view['total'] = $total;
$this->view['per_page'] = $page_size;
$this->view['cur_page'] = $cur_page;
$comment_list = $mobj->getCommentByWeiboId($id, $cur_page, $page_size, 'id asc', $cond);
if(!empty($comment_list)) {
foreach ($comment_list as $k => $v) {
$comment_save_path = sprintf(ZHISHIKU_SPIDER_COMMENT_PATH, $weibo['wid'], $v['weibo_data_id']);
if(!file_exists($comment_save_path)) $this->show_message('评论数据文件不存在', 'goback');
$cdata = json_decode(file_get_contents($comment_save_path), true);
$comment_list[$k]['comment_time'] = date('Y-m-d H:i:s', strtotime($cdata['created_at']));
$comment_list[$k]['source'] = $cdata['source'];
$comment_list[$k]['screen_name'] = $cdata['user']['screen_name'];
}
$this->view['comment_list'] = $comment_list;
$this->view['search_status_list'] = $GLOBALS['SPIDER_COMMENT_SEARCH_STATUS_LIST'];
}
}
public function ajax_weibo_list() {
$status = $this->post('status') + 0;
$spider_comment_status = $this->post('spider_comment_status') + 0;
$cur_page = $this->post('currentPage') ? $this->post('currentPage') : 1;
$page_size = $this->post('pageSize') ? $this->post('pageSize') : 20;
$condition = array();
$condition['status'] = $status;
if ($spider_comment_status) {
$condition['spider_comment_status'] = $spider_comment_status;
$condition['uid'] = WEIBO_USER_ZHANG;
}else{
$condition['status'] = $status;
}
$obj = new mWeibo();
$total = $obj->getWeiboTotal($condition);

34
model/mWeiboComments.php

@ -14,10 +14,40 @@ class mWeiboComments extends mBase {
$this->tbl = 'spider_weibo_comments';
}
public function getCommentByWeiboId($weibo_id, $page = 0, $limit = 0, $order = 'id asc') {
public function getCommentByWeiboId($weibo_id, $page = 0, $limit = 0, $order = 'id asc', $condition = array()) {
$where = "1=1 ";
if (!empty($condition)) {
foreach ($condition as $key => $val) {
if (is_array($val)) {
$val = implode(',', $val);
$where .= " and {$key} in ({$val})";
} else {
$where .= " and {$key}={$val}";
}
}
}
$where.= " and `weibo_id`={$weibo_id}";
$limit_info = array();
if($page > 0 && $limit > 0) $limit_info = array(($page-1)*$limit, $limit);
return $this->obj->selectAll($this->tbl, array('sql' => '`weibo_id`=?', 'vals' => array($weibo_id)), $order, $limit_info);
return $this->obj->selectAll($this->tbl, array('sql' => $where, 'vals' => array()), $order, $limit_info);
}
public function getCommentCountByWeiboId($weibo_id, $condition = array()) {
$where = "1=1 ";
if (!empty($condition)) {
foreach ($condition as $key => $val) {
if (is_array($val)) {
$val = implode(',', $val);
$where .= " and {$key} in ({$val})";
} else {
$where .= " and {$key}={$val}";
}
}
}
$where.= " and `weibo_id`={$weibo_id}";
return $this->obj->count($this->tbl, array('sql' => $where, 'vals' => array()));
}
public function getCommentByWeiboDataId($weibo_data_id) {

2
queue/crontab/add_spider_weibo_comment_task.php

@ -15,7 +15,7 @@ class addSpiderWeiboCommentTask {
$obj = new mWeibo();
$rdobj = $obj->initRedis();
if($rdobj->llen(_RQ_SPIDER_WEIBO_COMMENT)+0 > 50) return true;
if($rdobj->llen(_RQ_SPIDER_WEIBO_COMMENT)+0 > 0) return true;
for($page_num=1;$page_num<=1;$page_num++) {
$weibo_data = $obj->getWeiboList($condition, $page_num, $page_size);

26
queue/deal/spider_weibo_comment.php

@ -16,6 +16,20 @@ class spiderWeiboComment extends dealBase {
$obj = new mSpider();
$rdobj = $obj->initRedis();
$cookie_json = $rdobj->get(_RC_WEIBO_LOGIN_COOKIE2);
$baselog = PROC_CODE . "|";
if(empty($cookie_json)) {
if($rdobj->llen($this->task_key) + 0 > 0) $obj->writeLog(ZHISHIKU_SPIDER_LOG, ZHISHIKU_SPIDER_COMMENT, 'cookie为空:'.$baselog);
exit;
}
$cookie_data = json_decode($cookie_json, true);
$cookie = $cookie_data[PROC_CODE];
if(empty($cookie)) {
if($rdobj->llen($this->task_key) + 0 > 0) $obj->writeLog(ZHISHIKU_SPIDER_LOG, ZHISHIKU_SPIDER_COMMENT, '未设置该进程cookie:'.$baselog.'|'.$cookie_json);
exit;
}
$ipinfo = $rdobj->get(_RC_SPIDER_WEIBO_COMMENT_USE_IP);
$ipdata = json_decode($ipinfo, true);
if (!$ipinfo && PROC_CODE == 0 && ($rdobj->llen($this->task_key) + 0 > 0 || !$this->is_while)) $ipdata = $obj->getZmhttpIp(_RC_SPIDER_WEIBO_COMMENT_USE_IP);
@ -48,9 +62,6 @@ class spiderWeiboComment extends dealBase {
exit;
}
$cookie = $rdobj->get(_RC_WEIBO_LOGIN_COOKIE2);
if(empty($cookie)) $cookie = WEIBO_LOGIN_COOKIE2;
$res = $obj->spiderComments($cookie, $weibo_info['uid'], $weibo_info['wid'], $weibo_info['mblogid'], $max_id);
if (!$res) {
$error = $obj->getError();
@ -58,8 +69,13 @@ class spiderWeiboComment extends dealBase {
if($error == 'cookie失效') {
$obj->sendMail(array('1432334894@qq.com'), date('Y年m月d日', time()) . '-微博评论数据抓取', $error);
$rdobj->del($this->task_key);
$rdobj->del(_RS_SPIDER_WEIBO_COMMENT);
unset($cookie_data[PROC_CODE]);
$rdobj->set(_RC_WEIBO_LOGIN_COOKIE2, json_encode($cookie_data));
$rdobj->lpush($this->task_key, json_encode($rq_data));
if ($obj->is_change_ip && PROC_CODE == 0) $rdobj->del(_RC_SPIDER_WEIBO_COMMENT_USE_IP);
// $rdobj->del($this->task_key);
// $rdobj->del(_RS_SPIDER_WEIBO_COMMENT);
exit;
}

8
tools/filter_comments.py

@ -4,6 +4,7 @@ from snownlp import SnowNLP
import pymysql
import configparser
import os
import re
def get_db_config():
config = configparser.ConfigParser()
@ -381,6 +382,13 @@ def filter_medical_comments(comments_list):
update_records.append((0, comment_id))
continue
img_pattern = re.compile(r'<img.*?\/>')
commentRemove = re.sub(img_pattern, '', comment)
commentRemove = re.sub(r'\s', '', commentRemove)
if len(commentRemove) <= 4:
update_records.append((0, comment_id))
continue
s = SnowNLP(comment)
sentiment_score = s.sentiments

17
tools/set_weibo_login_cookie.php

@ -0,0 +1,17 @@
<?php
include_once(dirname(dirname(__FILE__))."/library/publicBase.php");
date_default_timezone_set("Asia/Shanghai");
$obj = new mBase();
$rdobj = $obj->initRedis();
$cookies[] = '_2A25FcbH_DeRhGeFG71sY9CbOyDuIHXVmD0s3rDV8PUNbmtB-LROgkW9NeUknrDWZVELgZ5_bHazkmfeqimpsJvrC'; // 吴龙超
$cookies[] = '_2A25Fcc-2DeRhGeRJ6VAW9SvIzjiIHXVmD01-rDV8PUNbmtAYLRjzkW9NUqgeP0nu8ldMw0ltx31xfvHmVmqDM2xN'; // 王朋达
$cookies[] = '_2A25FakNADeRhGedJ71UQ9S7PzjyIHXVmBtqIrDV8PUJbkNB-LRX_kW1NVhe7zEjMdJLzXvbT9ck1Q-L9YYtLiCpV'; // 张琪
$cookies[] = '_2AkMfKU18f8NxqwFRmvoVzmPrZI11wwvEieKpdbynJRMxHRl-yT9xqmoitRB6NKljk7EQIbC2ibY-BOeJTItlu8LSPOXb'; // 刘梦琪
$cookies[] = '_2A25FcbInDeRhGeFK4lEU9ijJwzSIHXVmD0vvrDV8PUNbmtAYLVLTkW9NQtaHPZxefLemxY2kP3YN6l7tyfSJeWvl'; // 张宇鹏
$rdobj->set(_RC_WEIBO_LOGIN_COOKIE2, json_encode($cookies));
exit;

17
tools/test.py

@ -0,0 +1,17 @@
# -*- coding: utf-8 -*-
from snownlp import seg
from snownlp import SnowNLP
import pymysql
import configparser
import os
import re
comment = ' <img alt="[赞]" title="[赞]" src="https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/2018new_zan_org.png" /> <img alt="[赞]" title="[赞]" src="https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/2018new_zan_org.png" /> '
non_img_pattern = re.compile(r'<img.*?\/>')
comment = re.sub(non_img_pattern, '', comment)
comment = re.sub(r'\s', '', comment)
print(len(comment))
print(comment)

14
view/css/index.css

@ -494,7 +494,9 @@ button:hover {
}
.green,
.blue {
.blue,
.red,
.grey {
padding: 2px 10px;
border-radius: 4px;
opacity: 1;
@ -510,6 +512,16 @@ button:hover {
background: #F2F7FF;
border: 1px solid #BFDAFF;
}
.red {
color: #e91621;
background: #F2F7FF;
border: 1px solid #e91621;
}
.grey{
color: #626573;
background: #F2F7FF;
border: 1px solid #626573;
}
.form-item{
display: flex;
align-items: normal;

31
view/js/index.js

@ -3,6 +3,7 @@ $(document).ready(function () {
var tabActive = '1';
var cur_editdata = {}; //当前编辑数据
var vediourl = ''
var hidecomments = $('#hidecomments').length
$('.radio-wrap').on('click', '.radio_box input', function () {
var radio_val = $(this).attr('value')
@ -450,15 +451,24 @@ $(document).ready(function () {
var totalPages = 0;
function getRenderData(){
var param = {
status,
currentPage,
pageSize
}
if(hidecomments == 1) {
var param = {
currentPage,
pageSize,
spider_comment_status:2
}
}
$.ajax({
type: "post",
dataType: 'json',
url: '/weibo/ajax_weibo_list',
data: {
status,
currentPage,
pageSize
},
data: param,
success: function (res) {
if(!res.status){
alert(`请求失败`);
@ -509,11 +519,12 @@ $(document).ready(function () {
<span class="name">` + item.name + `</span>
<span>录入` + item.created_at + `</span>
${item.wid ? `<a href="https://m.weibo.cn/detail/`+ item.wid + `" target="_blank">微博地址</a>` :''}
${item.wid && hidecomments == 1 ? `<a href="/weibo/comment_detail?id=`+ item.id + `&search_type=-1" target="_blank">查看详情</a>` :''}
</div>
${
tabActive == '1' ? `<div class="list_item_top_r" id="${item.id}"><img src="../images/edit.svg" alt="">编辑</div>` :''
tabActive == '1' && hidecomments == 0 ? `<div class="list_item_top_r" id="${item.id}"><img src="../images/edit.svg" alt="">编辑</div>` :''
}
</div>
<p class="desc_text">
${item.text}
@ -523,9 +534,9 @@ $(document).ready(function () {
${imagesHTML}
</div>
<div class="flex btngroups">
${tabActive == '1' || tabActive == '2' ? '<button data-id="'+item.id+'" class="button button-normal deleteBtn">删除</button>' : ''}
${tabActive == '1' ? '<button data-id="'+item.id+'" class="button button-primary passBtn">通过</button>' : ''}
${tabActive == '3' || tabActive == '2' ? '<button data-id="'+item.id+'" class="button button-normal checkBtn">恢复待审批</button>' : ''}
${((tabActive == '1' || tabActive == '2') && hidecomments == 0) ? '<button data-id="'+item.id+'" class="button button-normal deleteBtn">删除</button>' : ''}
${(tabActive == '1' && hidecomments == 0) ? '<button data-id="'+item.id+'" class="button button-primary passBtn">通过</button>' : ''}
${((tabActive == '3' || tabActive == '2') && hidecomments == 0) ? '<button data-id="'+item.id+'" class="button button-normal checkBtn">恢复待审批</button>' : ''}
</div>
</div>`
$('#data-list').html(html1);

3
view/templates/include/header.html

@ -12,6 +12,9 @@
{if $_user_info.is_super_admin}
<a href="/index/user_list">子账号管理</a>
{/if}
{if $_user_info.is_super_admin}
<a href="/weibo/comments">微博评论</a>
{/if}
<a href="/loginout">退出</a>
</div>
</div>

210
view/templates/weibo/comment_detail.html

@ -0,0 +1,210 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>知识库</title>
<link rel="stylesheet" href="{$smarty.const.CSS_URL}/css/common.css?v={$smarty.const.CSS_JS_VERSION}">
<link rel="stylesheet" href="{$smarty.const.CSS_URL}/css/index.css?v={$smarty.const.CSS_JS_VERSION}8">
<script src="{$smarty.const.CSS_URL}/js/jquery-3.6.0.min.js"></script>
{literal}
<style>
.comment-con,.comment-detail,.small-image-wrapper,.small-video-cover{
margin-top: 20px;
}
.comment-title{
margin-bottom: 20px;
color: green;
}
.small-image-wrapper{
margin-bottom: 20px;
}
.small-image-wrapper{
display: flex;
flex-wrap: wrap;
column-gap: 10px;
row-gap: 10px;
}
.comment-txt img{
width: 20px;
height: 20px;
}
.small-image-img{
width: 100%;
height: 100%;
margin-bottom: 20px;
}
#next-page,#prev-page{
cursor: pointer;
}
</style>
{/literal}
</head>
<body>
<div class="home-page">
{include file="include/header.html"}
<div class="home-main-content">
<div class="tab-list index-nav-wrap flex">
<ul class="tab-wrap">
<li class="index-nav-wrap-li" type="1"><span {if $smarty.get.search_type == "1"}class="active"{/if}>选中评论</span></li>
<li class="index-nav-wrap-li" type="0"><span {if $smarty.get.search_type == "0"}class="active"{/if}>剔除评论</span></li>
<li class="index-nav-wrap-li" type="-1"><span {if $smarty.get.search_type == "-1"}class="active"{/if}>全部评论</span></li>
</ul>
</div>
<div class="comment-con">
<div class="comment-title">微博内容:</div>
<div class="list_item_top flex">
<div class="list_item_top_l">
<span class="green">微博</span>
<b class="refer_text"></b>
<span class="name">张宝旬</span>
<span>录入:{$data.created_at}</span>
<a href="https://m.weibo.cn/detail/{$data.wid}" target="_blank">微博地址</a>
</div>
</div>
<div class="comment-detail">
{$data.text}
</div>
{if $data.pic_arr}
<div class="small-image-wrapper">
{foreach from=$data.pic_arr item=item}
<div class="small-image">
<span class="small-image-desc">图片</span>
<img src="{$item}" alt="Small Image" class="small-image-img">
<img class="delete-btn hide" src="../images/delete-icon.svg" alt="Small Image">
</div>
{/foreach}
</div>
{/if}
{if $data.video_url}
<div class="small-video-cover" href="{$data.video_url}">
<span class="small-image-desc">视频</span>
<img class="small-video-show" src="{if $data.video_cover}{$data.video_cover}{else}'../images/vedio_img.png'{/if}" alt="Video Cover">
<img src="../images/play.svg" class="play-video" alt="...丢了">
</div>
{/if}
{if $comment_list}
<div class="comment-list">
<div class="comment-title">评论内容:</div>
{foreach from=$comment_list key=key item=item}
<div class="list_item_top flex" style="margin-top: 20px;" idattr="{$item.id}">
<div class="list_item_top_l">
<!-- <span class="green">评论</span> -->
<b class="refer_text"></b>
<span class="name">{$key+1}.{$item.screen_name}</span>
<span>{$item.comment_time} {$item.source}</span>
</div>
</div>
<div class="list_item_top flex" style="margin-top: 10px;">
<div class="list_item_top_l">
<span class="green">评论</span>
<b class="refer_text"></b>
<span class="name comment-txt">{$item.content}</span>
<span class="{if $item.is_search==1}green{elseif $item.is_search==0}red{elseif $item.is_search==0}grey{/if}">{$search_status_list[$item.is_search]}</span>
</div>
</div>
{/foreach}
</div>
{/if}
</div>
<div class="pagination" v-if="total > 0">
<img id="prev-page" src="/images/prev.svg" alt="">
<ul id="page-numbers">
{if $last_page <= 6}
{section name=num loop=$last_page}
<span class="{if $cur_page == ($smarty.section.num.index+1)}pagActive{/if}" page="{$smarty.section.num.index+1}">{$smarty.section.num.index+1}</span>
{/section}
{/if}
{if $last_page > 6}
{if $cur_page <= 5}
{section name=num loop=5}
<span class="{if $cur_page == ($smarty.section.num.index+1)}pagActive{/if}" page="{$smarty.section.num.index+1}">{$smarty.section.num.index+1}</span>
{/section}
<span>...</span>
<span page="{$last_page}">{$last_page}</span>
{elseif $cur_page > $last_page-5}
<span page="1">1</span>
<span>...</span>
{section name=num loop=5}
<span class="{if $cur_page == ($last_page-5+$smarty.section.num.index+1)}pagActive{/if}" page="{$last_page-5+$smarty.section.num.index+1}">{$last_page-5+$smarty.section.num.index+1}</span>
{/section}
{else}
<span page="1">1</span>
<span>...</span>
{section name=num loop=5}
<span class="{if $cur_page == ($cur_page-2+$smarty.section.num.index)}pagActive{/if}" page="{$cur_page-2+$smarty.section.num.index}">{$cur_page-2+$smarty.section.num.index}</span>
{/section}
<span>...</span>
<span page="{$last_page}">{$last_page}</span>
{/if}
{/if}
</ul>
<img id="next-page" src="/images/next.svg" alt="">
<div class="input-page">
<span>前往</span>
<input type="number" id="jump-to-page" min="1" placeholder="页码">
<span></span>
</div>
<button id="go-to-page">跳转</button>
</div>
</div>
{include file="include/footer.html"}
</div>
<div id="hidecomments" style="display: none;"></div>
<div id="last_page" style="display: none;">{$last_page}</div>
</body>
{literal}
<script>
$('.index-nav-wrap-li').click(function(){
var type = $(this).attr('type')
window.location.href = location.href.replace(/\&search\_type=(\-)?\d+/, '').replace(/\&page=\d+/, '') +'&search_type='+type
})
$('#page-numbers span').click(function(){
var page = $(this).attr('page')
if(!page) return;
location.href = location.href.replace(/\&page=\d+/, '') +'&page='+page
})
$('#next-page').click(function(){
var page = parseInt($('#page-numbers span.pagActive').attr('page')) + 1
if(page > parseInt($('#last_page').text())) return;
location.href = location.href.replace(/\&page=\d+/, '') +'&page='+page
})
$('#prev-page').click(function(){
var page = parseInt($('#page-numbers span.pagActive').attr('page')) - 1
if(page < 1) return;
location.href = location.href.replace(/\&page=\d+/, '') +'&page='+page
})
$('#go-to-page').click(function(){
var page = $('#jump-to-page').val()
if(page > parseInt($('#last_page').text())) page = parseInt($('#last_page').text())
if(page < 1) page = 1
location.href = location.href.replace(/\&page=\d+/, '') +'&page='+page
})
</script>
{/literal}
</html>

170
view/templates/weibo/comments.html

@ -0,0 +1,170 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>知识库</title>
<link rel="stylesheet" href="{$smarty.const.CSS_URL}/css/common.css?v={$smarty.const.CSS_JS_VERSION}">
<link rel="stylesheet" href="{$smarty.const.CSS_URL}/css/index.css?v={$smarty.const.CSS_JS_VERSION}">
<script src="{$smarty.const.CSS_URL}/js/jquery-3.6.0.min.js"></script>
</head>
<body>
<div class="home-page">
{include file="include/header.html"}
<div class="home-main-content">
<div class="home-main">
<div class="tab-list index-nav-wrap flex">
<ul class="tab-wrap" style="display: none;">
<li class="index-nav-wrap-li" type="1"><span class="active">待审批</span></li>
<li class="index-nav-wrap-li" type="2"><span>已审批</span></li>
<li class="index-nav-wrap-li" type="3"><span>已删除</span></li>
</ul>
<button class="addNewBtn" style="display: none;">
<img src="{$smarty.const.CSS_URL}/images/add.svg" alt="">新增自录入
</button>
</div>
<div class="list_all" id="data-list">
</div>
<!-- 数据列表 -->
<!-- <ul id="data-list"></ul> -->
<!-- 分页控件 -->
<div class="pagination hide">
<img id="prev-page" src="{$smarty.const.CSS_URL}/images/prev.svg" alt="">
<ul id="page-numbers"></ul>
<img id="next-page" src="{$smarty.const.CSS_URL}/images/next.svg" alt="">
<div class="input-page">
<span>前往</span>
<input type="number" id="jump-to-page" min="1" placeholder="页码">
<span></span>
</div>
<button id="go-to-page">跳转</button>
</div>
<!-- 放大后的图片容器 -->
<div id="large-image-container">
<h2>预览</h2>
<img id="large-image" src="{$smarty.const.CSS_URL}/images/viewimg1.png" alt="Large Image">
<span id="close-btn2">×</span>
</div>
<!-- 放大后的视频容器 -->
<div id="large-video-container">
<video id="large-video" controls>
<source id="large-viedo-url" src="" type="video/mp4">
Your browser does not support the video tag.
</video>
<button id="close-btn">×</button>
</div>
<!-- 弹框 -->
<div class="modal-overlay"></div>
<div class="modal">
<div class="modal_top">
<b id="header_title">编辑</b>
<img src="{$smarty.const.CSS_URL}/images/close_modal.svg" id="close_modal" alt="">
</div>
<div class="add-form">
<div class="form-item radio-form">
<input type="hidden" id="id" value="">
<div class="form-left">
录入形式
</div>
<div class="form-right radio-wrap flex">
<div class="radio_box radio_box_active">
<input value="1" type="radio"id="edu1">
<div></div>
<label >信息段录入</label>
</div>
<div class="radio_box">
<input value="2" type="radio"id="edu2">
<div></div>
<label >问答式录入</label>
</div>
</div>
</div>
<div class="form-item normal-form" style="display: none;">
<div class="form-left">
提问信息
</div>
<div class="form-right">
<div class="text-area-container">
<textarea class="edit-input normal-input" ></textarea>
<div class="char-count wordNum">0/200</div>
</div>
</div>
</div>
<div class="form-item">
<div class="form-left common-input">
回答信息
</div>
<div class="form-right">
<div class="text-area-container">
<textarea class="edit-input answer-input" ></textarea>
<div class="char-count1 wordNum">0/200</div>
</div>
</div>
</div>
</div>
{literal}
<script>
const maxLength = 100; // 设置最大字数限制
$('.normal-input').on('input', function () {
var currentLength = $(this).val().length;
$('.char-count').text(currentLength + '/' + maxLength);
if (currentLength > maxLength) {
$('.normal-input').val($('.normal-input').val().slice(0, maxLength))
$('.char-count').text(maxLength + '/' + maxLength);
}
});
$('.answer-input').on('input', function () {
var currentLength = $(this).val().length;
$('.char-count1').text(currentLength + '/' + maxLength);
if (currentLength > maxLength) {
$('.answer-input').val($('.answer-input').val().slice(0, maxLength))
$('.char-count1').text(maxLength + '/' + maxLength);
}
});
</script>
{/literal}
<div class="img_list2" style="display: none;"></div>
<div class="preview"></div>
<div class="modal_upload_btn flex hide">
<div class="flex modal_btns">
<button id="upload-image-btn" class="button upload_btn">
<img src="{$smarty.const.CSS_URL}/images/img_upload.svg" alt="">上传图片
</button>
<button id="upload-video-btn" class="button upload_btn">
<img src="{$smarty.const.CSS_URL}/images/vedio_upload.svg" alt="">上传视频
</button>
</div>
<p>支持 jpg、png、mp4 格式,单个文件不超过 10MB</p>
</div>
<input type="file" id="upload-image" accept="image/*" style="display: none;" multiple>
<input type="file" id="upload-video" accept="video/*" style="display: none;" multiple>
<div class="buttons flex">
<button id="submit" class="button ">仅保存</button>
<button id="savePass" class="button button-primary">保存并通过审批</button>
</div>
</div>
</div>
</div>
{include file="include/footer.html"}
</div>
<div id="hidecomments" style="display: none;"></div>
</body>
<script src="{$smarty.const.CSS_URL}/js/index.js?v={$smarty.const.CSS_JS_VERSION}89"></script>
</html>
Loading…
Cancel
Save