若依——防止按钮重复点击

45 篇文章 0 订阅
7 篇文章 0 订阅

axios的封装文件中request.js请求拦截函数里

  1. 首先判断是post 或 put 请求,因为get请求无需处理(本身很快获取下次且不影响逻辑)
  2. 将本次请求的url、参数、当前时间戳组合为一个对象 requestObj
  3. 获取session中存储的对象 sessionObj,如果没有就将本次请求的对象存入session;
  4. 如果本地存储有对象,则取出备用,同时设置一个防重复点击的间隔时间
  5. 将本地取出的对象与本地请求的对象做对比,如果url和data都相同,说明是两次一样的请求,然后判断现在的时间戳与上次请求的时间戳的间隔,如果小于最小间隔,就提示请勿重复提交
  6. 如果比较发现不是快速重复提交,就将本次请求对象存入内存,覆盖上一次
if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
    const requestObj = {
      url: config.url,
      data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
      time: new Date().getTime()
    }
    const sessionObj = cache.session.getJSON('sessionObj')
    if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
      cache.session.setJSON('sessionObj', requestObj)
    } else {
      const s_url = sessionObj.url;                  // 请求地址
      const s_data = sessionObj.data;                // 请求数据
      const s_time = sessionObj.time;                // 请求时间
      const interval = 1000;                         // 间隔时间(ms),小于此时间视为重复提交
      if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
        const message = '数据正在处理,请勿重复提交';
        console.warn(`[${s_url}]: ` + message)
        return Promise.reject(new Error(message))
      } else {
        cache.session.setJSON('sessionObj', requestObj)
      }
    }
  }

整个请求封装

import axios from 'axios'
import { Notification, MessageBox, Message, Loading } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { tansParams, blobValidate } from "@/utils/ruoyi";
import cache from '@/plugins/cache'
import { saveAs } from 'file-saver'

let downloadLoadingInstance;
// 是否显示重新登录
export let isRelogin = { show: false };

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项,表示请求URL公共部分
  baseURL: process.env.VUE_APP_BASE_API,
  // 超时
  timeout: 10000
})

// request拦截器
service.interceptors.request.use(config => {
  // 是否需要设置 token
  const isToken = (config.headers || {}).isToken === false
  // 是否需要防止数据重复提交
  const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
  if (getToken() && !isToken) {
    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
  }
  // get请求映射params参数
  if (config.method === 'get' && config.params) {
    let url = config.url + '?' + tansParams(config.params);
    url = url.slice(0, -1); // 去掉最后一位 ‘&’
    config.params = {};
    config.url = url;
  }
  if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
    const requestObj = {
      url: config.url,
      data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
      time: new Date().getTime()
    }
    const sessionObj = cache.session.getJSON('sessionObj')
    if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
      cache.session.setJSON('sessionObj', requestObj)
    } else {
      const s_url = sessionObj.url;                  // 请求地址
      const s_data = sessionObj.data;                // 请求数据
      const s_time = sessionObj.time;                // 请求时间
      const interval = 1000;                         // 间隔时间(ms),小于此时间视为重复提交
      if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
        const message = '数据正在处理,请勿重复提交';
        console.warn(`[${s_url}]: ` + message)
        return Promise.reject(new Error(message))
      } else {
        cache.session.setJSON('sessionObj', requestObj)
      }
    }
  }
  return config
}, error => {
    console.log(error)
    Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(res => {
    // 未设置状态码则默认成功状态
    const code = res.data.code || 200;
    // 获取错误信息
    const msg = errorCode[code] || res.data.msg || errorCode['default']
    // 二进制数据则直接返回
    if(res.request.responseType ===  'blob' || res.request.responseType ===  'arraybuffer'){
      return res.data
    }
    if (code === 401) {
      if (!isRelogin.show) {
        isRelogin.show = true;
        MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }
      ).then(() => {
        isRelogin.show = false;
        store.dispatch('LogOut').then(() => {
          location.href = '/index';
        })
      }).catch(() => {
        isRelogin.show = false;
      });
    }
      return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
    } else if (code === 500) {
      Message({
        message: msg,
        type: 'error'
      })
      return Promise.reject(new Error(msg))
    } else if (code !== 200) {
      Notification.error({
        title: msg
      })
      return Promise.reject('error')
    } else {
      return res.data
    }
  },
  error => {
    console.log('err' + error)
    let { message } = error;
    if (message == "Network Error") {
      message = "后端接口连接异常";
    }
    else if (message.includes("timeout")) {
      message = "系统接口请求超时";
    }
    else if (message.includes("Request failed with status code")) {
      message = "系统接口" + message.substr(message.length - 3) + "异常";
    }
    Message({
      message: message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

// 通用下载方法
export function download(url, params, filename) {
  downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
  return service.post(url, params, {
    transformRequest: [(params) => { return tansParams(params) }],
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    responseType: 'blob'
  }).then(async (data) => {
    const isLogin = await blobValidate(data);
    if (isLogin) {
      const blob = new Blob([data])
      saveAs(blob, filename)  // 保存文件
    } else {
      const resText = await data.text();
      const rspObj = JSON.parse(resText);
      const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
      Message.error(errMsg);
    }
    downloadLoadingInstance.close();
  }).catch((r) => {
    console.error(r)
    Message.error('下载文件出现错误,请联系管理员!')
    downloadLoadingInstance.close();
  })
}

export default service

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
编辑推荐 《精通AngularJS》指出AngularJS诞生于Google,已用于开发多款Google产品。它是一套JavaScript前端框架,用于开发当下流行的数据驱动的单页面Web应用。其核心特性是:MVC、模块化、自动双向数据绑定、语义化标签、依赖注入等。 作者简介 Pawel Kozlowski有15年以上的Web开发经验,接触过多种Web技术、语言和平台。他精通客户端和服务器端编程,并始终在寻找能提高生产率的工具和流程。Pawel是自由和开源软件的坚定支持者,他在AngularJS 社区非常活跃,为AngularJS项目贡献了大量的代码。他也对Angular UI (AngularJS的配套框架)有所贡献,并为AngularJS 提供了Twitter Bootstrap 相关的指令(directives)。不写代码时,Pawel 常在会议与活动上为AngularJS布道。 Peter Bacon Darwin已经积累了20年以上的编程经验,他在.NET发布之前,就已经用它工作了。他还对IronRuby的开发有所贡献。他曾在Avanade和IMGROUP做IT顾问。退休后,自由开发和照顾孩子占用了他大部分的时光。Peter是AngularJS社区的名人。他最近加入了Google的AngularJS团队。他还是Angular UI项目的创始成员。他曾在Devoxx UK和其他活动中发表过有关AngularJS的演讲,并开办过AngularJS的培训课程。他希望帮助企业更好地利用AngularJS。 目录 序1 第1章Angular之禅7 11邂逅AngularJS7 熟悉框架8 参与AngularJS项目8 社区8 在线学习资源9 库和扩展9 工具9 Batarang10 Plunker与jsFiddle10 IDE扩展和插件10 12AngularJS速成10 HelloWorld——AngularJS示例10 双向数据绑定12 AngularJS中的MVC模式12 鸟瞰13 深入作用域15 视图21 模块与依赖注入26 模块26 协作对象27 注册服务29 模块的生命周期33 模块依赖35 13AngularJS和其他框架38 jQuery与AngularJS39 苹果与橙子40 窥视未来41 14总结41 第2章构建与测试43 21介绍示例应用44 熟悉问题领域44 技术栈45 持久化存储46 MongoLab46 服务器端环境47 第三方JavaScript库48 BootstrapCSS48 22构建系统48 构建系统准则49 自动化所有事情49 尽早报错,清晰报错49 不同的工作流,不同的命令50 构建脚本同样是代码50 工具50 Gruntjs51 测试库与工具51 Jasmine51 Karmarunner52 23组织文件和目录52 根目录52 进入源代码目录54 AngularJS的特定文件54 轻装上路56 深入测试目录57 文件命名约定57 24AngularJS模块和文件57 一个文件,一个模块58 模块内部59 注册provider的不同语法59 声明配置和运行块的语法61 25自动化测试62 单元测试63 剖析Jasmine测试64 测试AngularJS对象65 测试服务65 测试控制器67 Mock对象和异步代码测试68 端对端测试70 日常工作流71 Karmarunner的提示与技巧72 执行测试子集73 调试73 26小结74 第3章与后端服务器通信75 31使用$http进行XHR和JSONP请求75 熟悉数据模型和MongoLabURLs76 $httpAPI快速导览76 配置对象说明77 转换请求数据78 处理HTTP响应79 转换响应数据79 处理同源政策约束79 利用JSONP克服同源政策约束80 JSONP的限制81 利用CORS克服同源政策约束81 服务器端代理83 32promiseAPI与$q84 工作中的promise和$q服务85 学习$q服务的基础知识85 promise是第一类JavaScript对象87 聚合回调88 注册回调和承诺的生命周期88 异步动作的链式调用89 关于$q的其他91 AngularJS中的$q集成93 33promiseAPI与$http94 34与RESTful端点通信95 $resource服务95 构造级与实例级方法97 $resource创建异步方法100 $resource服务的限制101 使用$http自定
仿世纪佳缘婚介交友系统5.3 ASP+SQL Nslove5使用手册 一、运行环境: 1、服务器要求:windows2000及更高系统版本,IIS5+以上! 2、组件要求:Jmail邮件组件、aspjpeg水印组件、上传组件(aspupload组件)、FSO读写权限(IIS_IUSRS,IUSR帐号读写)、ADODB.Stream组件。一般的虚拟主机都有这些组件,如果是本地调试必须先检查一下IIS的设置环境,并安装上面前三个组件,组件下载地址见本文附录。 3、数据库:SQL2000+以上!初始安装大约35Mb左右,完善支持SQL2005/2008! 4、空间大小:初始安装大于200Mb,随着会员数量增多,空间及数据库要求会逐渐增大! 5、IIS创建网站最好创建独立应用池,以提高程序运行速度! 二、网站搭建: 1、要求系统安装IIS即Internet 信息服务(IIS),XP(2003)系统是在控制面板——添加删除组件中添加! 2008、vista、win7是在控制面板——程序——打开或关闭windows功能中添加 2、启动IIS(以IIS6.0+为例),在网站新添加一个网站,设置正确物理路径确定保存。 3、其它详细设置可以参考:http://www.nslove.net/dispbbs.php?boardid=4&id=1023 4、如何登录Nslove系统后台: (1)前台入口:login.asp登录方式: 用户:[email protected] 密码:123456 (2)后台入口:admin_login.asp登录方式: 前台用户名:nslove 密码:123456 如果login.asp前台有管理员登录过,那么上面前台帐号不会显示。 后台用户:nslove 密码:123456 注意:后台所有生成操作都需要前台login.asp管理员登录! 三、程序使用: (一)常规管理: 1、系统设置(程序文件:setting.asp)   程序运行是否稳定、安全关键是后台系统设置。系统设置项分成几大类:[基本设置]、[网站信息]、[安全设置]、[用户选项设置]、[邮件选项设置]、[注册选项设置]、[系统选项设置]、[上传选项设置]、[验证码设置]、[官方通讯设置]、[服务升级设置]、[支持接口设置]   (1)基本设置:有模板缓存开关、系统定时开关等项,这里[缓存模板句柄]比较重要。如果IIS可以创建独立应用池,那么这里的缓存模板句柄可以自己加入其它模板名,提高程序运行速度!例如:日记模板名为:diary(其它模板名见附录2),加到句柄为:index|main|list|diary。也就是加“|”分隔符再加模板名。至于定时设置等其它几项根据项目底下说明,就可以很好设置。   (2)网站信息:这里设置一些前台显示底部版权信息、客服联系方式等。网站关键词、及描述关键到被网络搜索引擎(SEO)检索量,所以好的关键词及描述,往往可以提高浏览量。这里需要注意[客服联系邮箱]必须设置与邮件选项设置中的SMTP登录帐号一样的邮箱地址,否则发送邮件可能会出错。   (3)安全设置:这些涉及到网站安全主要有后台管理目录、入口。如何修改默认目录及入口呢?先在这里修改目录及入口名称提交保存,然后到网站目录中把admin重命名,及admin_login.asp重命名,与刚刚设置名称要相同。其它项可以默认使用即可!   (4)用户选项设置: <1>、一天可以取几次密码即为用户密码丢失或者遗忘,可以通过前台找回密码找回,但不是无限制的取回,通过这里可以设置次数; <2>、登录时显示注册步骤即当用户未完成所有注册步骤时,在用户登录时会提示步骤未完成,并指出是哪个步骤提供给用户继续完成。 <3>、登录每次赠送金币,会员每天登录赠送金币数,系统设计一天只能赠送一次。   (5)邮件选项设置: <1>、邮件组件选择(不支持、JMAIL、CDONTS、ASPEMAIL),一般虚拟主机都是安装Jmail组件。用鼠标选择下拉菜单会相应提示空间是否支持该组件。 <2>、SMTP邮件发送服务器如mail.nslove.com或者smtp.163.com等,但遗憾的是现在免费邮箱基本不支持smtp,最好用自己空间赠送的企业邮局做发送服务器。 <3>、SMTP登录帐号,需要完整的邮件地址,必须与客服联系邮箱相一致。 <4>、SMTP登录密码,即邮箱登录密码   (6)注册选项设置: <1>、唯一性开关,这里选择邮箱。即当用户提交帐号注册时,以该项为检查是否被占用,防止同一个帐号多个用户。 <2>、发送激活代码必须在发送注册邮件开启状态下才有效,系统会在用户注册时发送一串16位密码,用户只要登录邮箱,然后点击链接激活,即可激活邮箱地址及用户帐号。 <3>、是否必须激活,如果关闭,那么用户不需要激活邮箱,即可成为审核状态用户。 <4>、昵称只允许英文字符,开启时系统不允许注册除英文字母之外的任何用户名。 <5>、新注册用户必须审核,关闭时系统会自动审核通过用户,无须管理员手工审核通过。 <6>、限制注册邮件地址及注册过滤字符,限制帐号中含有邮件邮件及过滤昵称字符。比如要过滤所有用户名中有带:xxx小龙女xxx这样的用户,可以在注册过滤字符中加入逗号小龙女。   (7)系统选项设置: <1>、必须激活才可登录,开启状态时,用户必须是邮箱激活之后才能登录系统,否则无法登录。 <2>、用户在线超时时间即为统计记录用户在线,在超过一定时间系统会自动清空这些超时用户、或者已经长期不活动的用户!默认为40分钟即可。 <3>、金币操作记录天数,即会员在充值、消费操作时数据库记录的时间段,一般30天。 <4>、搜索中会员等级限制,即会员在搜索时显示等级最低的用户。这个开关影响到高级搜索、会员在线聊天、征婚大厅等列表。一般设置为4即可,除管理员之外都可以显示。 <5>、考题答案个数,即用户提交测试题及发送给用户测试的答案个数 <6>、群组等级默认人数,这个可以从等级组(等级)管理中对群组设置进行设置。 <7>、设置群组热贴,即为当然一个贴子点击超过这个数值时,会显示为热贴。   (8)上传选项设置:(非常重要) <1>、上传组件选择(关闭、无组件上传类、Aspupload3.0组件、SA-FileUp 4.0组件、DvFile-Up V1.0组件),点击选择根据提示文字选择允许的组件。一般选择Aspupload为上传组件! <2>、生成预览图片组件(关闭、CreatePreviewImage组件、AspJpeg组件、SA-ImgWriter组件),点击选择根据提示文字选择允许的组件。这里需要注意的是,AspJpeg组件必须!如在线图片截切需要用到它。 <3>、图片水印设置开关(关闭水印效果、水印文字效果、水印图片效果),当选择水印文字,时[添加水印文字信息]需要输入相就文字。当选择水印图片,那么[添加水印LOGO图片地址]需要正确输入图片的地址(必须以根目录为起点的路径) <4>、远程抓取即为会员相册可以通过其它网站上的图片地址,系统会抓取该图片并保存到空间中!   (9)验证码设置: 如果选择关闭,那么模板中所有相关的验证码表单都要手工去掉保存提交。   (10)服务升级设置: 这里可以设置升级VIP费用、明星榜费用、对认证会员打折设置等。包括人民币与金币汇率。 消费卡使用期限,即后台开卡之后,在一定期限之内有效,超过即为失效不能再使用。   (11)支付接口设置: 目前支持财付通、网银在线支付接口。从第3位元素开始分别为:财付通商户号、财付通32位密钥;网银商户号、网银32位密钥。这里提示银银32位密钥是通过md5加密32位,然后到网银在线设置。 其它未提及的设置项,基本可以从项目下文字说明理解到相关用途及含义。 2、二级域名管理(domain.asp) 很多客户初始安装之后都会发现很多网页都跳转到官方网站上,还以为是程序限制,其实并不是这样。原因就在二级域名没有修改为自己的域名,这里主要修改二级域名(静态文件访问地址)。修改完提交保存!然后到生成管理中进行生成,这部分在下面会详细讲到。 3、用户标签管理(usertag.asp) 该功能用途,主要是收集用户资料的一些基本信息,提供给搜索、资料列表时显示用!可以不必修改。 4、帮助公告管理(article.asp) 该模块包括:新闻公告、帮助中心、网站底部、新手指南、分类管理,可以通过快捷方式进行分类访问。从文章列表可以进入修改文章内容及重新生成。都可以通过列表下面的选择操作进行审核、生成等操作,根据各个管理列表,操作是一样的。下面如果不是特殊功能,就不在重复介绍。 重点说明:分类管理中[功能帮助]类别,初始建站都会遇到帮助中心的分类页无法更新生成为新网站信息,那么如何操作呢?首先进入该类,里面有个人资料完善和管理、沟通与交流等分类,然后全部选定各个分类,选择生成Html操作执行即可。 5、友情链接管理(link.asp) 如何在首页生成带有logo图标的友情链接呢?首先要在这里添加友情链接为图标链,然后在模板中分页模板(page_html)语言包中html_html(0).htm中,友情链接地方修改标签。可以参考通用标签附录3:Lk_List标签 6、首页调用管理(callnew.asp) 首页调用即为html中实时调用数据库中的数据,通过script调用。从后台的管理中可以对这些调用进行管理。调用方法为<script src="Ns_News.asp?sortid=ID号"></script>,其中ID号为记录号,即为该列表中的调用ID列中的数值。然后把该调用代码加到模板相应地方即可。例如要调用最新5个会员,ID号为1,那么调用代码为:<script src="Ns_News.asp?sortid=1"></script> (二)用户管理: 1、用户资料(权限)管理:(user.asp) (1)、如何修改用户资料,点击搜索结果列表中用户名进入即可以详细修改用户资料。例如要修改用户中的金币数值,进入该用户资料修改,找到用户金币之后点击[修改],可以显示出该项表单,就可以输入你想的金币数了。如何让用户注册步骤达到100%及认证项目呢?从这里也可以自由输入,注册步骤值:1|0|0|0|0|0|0|1|0|0|0|0,把0为改1即为是完成一个步骤。改变用户明星榜(VIP)开始时间、结束时间,都可以在这里进行修改。 (2)、搜索结果列表下有选择操作项比较多,这里主要介绍:修复、邮件激活、推荐榜三个特殊功能。 <1>、修复功能,数据库中的用户资料可能会出现更新不及时或者信息不正确,即可以从这里的修复进行修得,修复(用户数据、匹配数据、用户VIP时间、用户明星榜)。用户数据主要是根据常规管理中的用户标签,重新对用户进行更新用户数据,匹配数据则是根据用户提交的匹配条件重新更新匹配信息。 <2>、邮件激活,有些会员注册完并没有及时激活邮件,那么管理员可以通过该功能批量更新用户激活状态。 <3>、推荐榜,即为明星榜。如何批量设置首页明星榜及地区明星榜、并且要求是有头像会员呢? 首页明星榜设置:首先进入快捷方式——管理首页,在这个表单中选择上传头像复选框,如果需要设置是区分性别的,可以在这个表单中选定。然后点击[给我搜]按钮进入用户列表。然后在搜索结果列表中操作选定要设置的用户,最后点击推荐榜输入要推荐的天数,点击执行操作即可以完成推荐。 地区明星榜设置:首先进入快捷方式——管理首页,在这个表单中选择上传头像复选框,如果需要设置是区分性别的,可以在这个表单中选定。然后在所在地区中选择要推荐的省份,即为推荐该省的明星榜。然后点击[给我搜]按钮进入用户列表。后面操作与首页明星榜操作相同,这里不在重复讲解。 <4>、列表中的[权限],指的是对某一个用户进行独立设计权限,他的权限不受等级组权限管理,可以自定义设置用户权限。 <5>、列表中的[最后IP],点击该用户最后登录的IP可以限制该IP的访问,请谨慎。 2、用户组(等级)管理:(group.asp重中之重) 包括:注册用户组(等级)管理、系统用户组管理、Vip用户组管理、编辑注册默认组 、编辑VIP默认组、群组等级组管理。 (1)、注册用户组(等级),是会根据用户属性自动升级的组!当用户的日记、相册、金币数达到条件,会自动升级到下一个等级。 (2)、系统用户组,默认组不能删除否会出现严重错误。用途即为当新增加一个[注册用户组(等级)],那么默认的权限会根据系统用户组中的[注册用户]组中的权限赋值。新增加VIP用户组也一样根据系统用户组中的VIP默认组。 (3)、群组等级组管理,主要用途是群组升级时根据组的升级金币为条件进行升级,相应给予该群会员数及空间。 除群组等级之外,都可以点击每个等级之后的[编辑]链接进入权限编辑,里面有大约150项权限设置,详细到金币操作等。 这里客户经常会遇到一个问题:新注册用户无法上传照片或者相册?那么重点看一下[系统用户组管理]——邮件激活及审核状态两个组的权限,进入编辑可以设置。然后记得更新一下缓存,更新缓存方法下面会介绍到。 3、管理员添加 | 管理:(admin.asp) 顾名思义就是添加管理员功能模块,可以对新添加的管理员进行权限设置。 这里值得注意的三个地方: (1)、管理员添加:该表单中的“前台用户ID”,请注意是前台用户ID,而不是用户名或邮件地址,很多客户都遇到这个问题。 (2)、限制管理员登录的IP:点击已添加的管理名进入修改,可以添加该管理可访问的IP地址。用途即为当该管理员是公司员工,那么可以把该管理员的IP添加为公司IP,那么该管理员到其它地方就无法登录后台,提高安全防止破坏。 (3)、编辑权限可以对各个管理员进行权限设置访问,可以分权。例如有些管理员只负责风格设计,那么就让它有这个权限,有些管理员只负责管理用户资料,那么就让它可以访问用户资料管理。注意:如果是当前用户设置完要退出再登录后台。 4、重新统计各项数据(updata.asp) 模块功能包括:更新用户数据、修复用户数据、更新系统统计、更新缓存数据、更新群组数据、更新到期状态等。可根据名功能之下文字说明理解各自功能用途。这里主要介绍一下更新系统统计及更新缓存数据: (1)、更新系统统计,主要是系统表Ns_Setup表统计数据,比如全站所有用户数、日记数等。让其更准确一些,可以通过个入口进行更新统计。 (2)、更新缓存数据,上面有提到过更新缓存,这里有专门的入口更新缓存。主要有系统表缓存、外观模板缓存、 等级组缓存。 <1>、系统表缓存,更新Ns_Setup统计数据缓存。 <2>、外观模板缓存,即为模板缓存,当修改一些模板效果,需要通过这个更新一下,让系统立即运用新的模板风格。 <3>、等级组缓存,当重新编辑等级组中的权限,那么可以通过这个进行更新服务器中的缓存,达到立即运用。 这里有客户会遇到为什么我已经设计新的模板,但是生成之后还不是最新的模板呢?那么这里的外观模板缓存要执行一下,再生成就可以运用新模板风格了。 提醒:还有一个入口可以更新整站所有缓存,操作方法:您的网址+cleancache.asp,在浏览器地址栏输入该地址,然后回车(转到)访问执行一次,即可更新所有缓存。 5、邮件分发(mailto.asp) 主要功能提供给管理员在线发送邮件。可以输入邮件地址发送,也可以从用户数据中的邮件地址发 送,可以选择用户邮件、用户ID段、按等级组、所有女性、所有男性。该功能要能够使用,请确认常规设置中的邮件选项是否设置正确。 6、VIP/预付卡管理(prepaid.asp) 即提供网站创建卡片数据库,可以批量开卡,然后制作实物卡发放给会员。卡号格式:01类+8位日期+9位随机码,卡片是有使用期限。即当卡片超过使用期限,那么该卡即失效不能在使用里面的金额。 (三)频道管理: 博客日记 、网友相册、约会活动 、会员约会、拼客信息 、试客管理、婚庆联盟、群组圈子、恋爱诊所 、成功故事、辩论话题、 情感测试、鲜花配送、点歌中心、许愿墙管理。管理功能基本相同,可以看一下操作表单即可明白功能用途,有些列表中带一些链接可以点击进去详细看一下,或者你会发现有新的功能,这里不在介绍。 (四)生成管理: 模块功能包括:主页/频道首页、个人主页生成、生成页面记录、生成学校分站、生成地区分站 1、主页/频道首页主是首页及各个栏目首页生成!最好一天生成一次。 2、个人主页生成,即生成用户资料页。可能遇到用户长时间没有更新资料,可以通过这里生成。当然可以在用户资料管理列表中选定某个用户进行生成。批量生成方法是在这个表单中输入用户ID段:开始段至结束段,可以间隔1000,当然服务器性能好的话,可以一万或者更高,然后点击生成按钮。 3、数据页记录生成,网站所有信息页都在这里生成,例如日记内容页就是在这里生成,选择数据类别,可以分别生成各个类。可以只选择这个类别进行生成,其它表单可以不必选定。 4、地区分站生成,很多客户不知道省级分站生成方法?首先[生成类别]选择省辖分站——[国家名称]选择中国——[省辖名称]选择某个省,当然可以不选全部生成。 5、学校分站生成,选择[所在省区]——[学校名称](可选项),然后生成。另一种方法可以到学校数据管理中生成,方法:[学校数据]——[地区名称](如进入中国)——[省市名称]——可以选择某一个省进行生成,当然可以进入到学校列表再选择生成。 注意:生成管理如果要生成首先必须确认前台是否已经登录,即login.asp控制面板是否登录了。否则生成会出现错误。如果生成过程中遇到退出,需要重新登录。为什么会自动退出?很大原因是占用内存,被服务器被当掉了,当然可以提高应用池解决。 (五)模板管理: 即风格模板管理(template.asp),版本号5.2+ 模板名称对应栏目列表详细附录4,模板所在目录:Resource\Template_1,可以把整个目录下载到本地,用查找替换工具进行修改。 1、如何修改导航栏,去掉一些不需要的栏目或功能呢?操作方法:风格模板管理——分页模板(page_main)——语言包进入,可以看到0-6个模板号,这些都是主体模板。然后点击\Resource\Template_1\main_html0.htm进入编辑,如果修改坏如何恢复,可以点击获取官方模板,把那个页面下载下来就行。这里以要去掉“点歌中心”为例,在这里编辑器窗口中找到:<li><a href="/html/music/index.htm">点歌中心</a></li>这段代码去掉,然后提交保存。其它6个模板中也一样操作,即可完成去掉点歌中心。 2、如何修改控制面板中的不需要的栏目呢?操作方法:风格模板管理——分页模板(page_main)——语言包进入选择\Resource\Template_1\main_html2.htm进入编辑,即可以找到相应菜单列表。这里以要去掉“投票调查管理”,找到:<li><a href="setting.asp?action=vote">投票调查管理</a></li>这段代码去掉提交保存并更新缓存。 3、如何去掉版权信息?操作方法:风格模板管理——分页模板(page_main)——语言包进入0-6个模板号进入编辑窗口,在最底下找到标签:{$PowerTag}去掉并保存即可。当然这里也可以自己输入一些内容。 4、登录之后页面顶部有一行个人主页说明文字如何修改?打开js/foot.js,可以找到这些文字字符。提醒:如果用记事本编辑可能出现乱码或者排版乱的问题,可以用dreamweaver工具进行排版或者UltraEdit-32编辑。 5、如何批量修改某个字符如“佳缘”字样?可以用Dreamweaver或者UltraEdit-32等工具,进行文件夹查找替换,可以跨文件夹替换。主要还是查找Resource\Template_1目录下模板。也可以在各个模板语言包中去修改。 6、关于我们中的内容如何修改?可以在常规管理——帮助公告列表中找到相应文章进行编辑提交即可。 7、几个经常遇到的模板: (1)、地区分站模板(主体page_main语言包:\Resource\Template_1\main_html4.htm,内容页:page_html语言包:\Resource\Template_1\html_html34.htm) (2)、首页模板:(主体page_main语言包:\Resource\Template_1\main_html0.htm,内容页:page_html语言包:\Resource\Template_1\html_html0.htm) (3)、后台模板(\Resource\admin\admin_html0.htm),用户资料修改的模板(\Resource\admin\admin_html1.htm) (4)、修改注册模板中表单项,那么需要修改Resource\xml\select.xml文件,与之一一对应。 提示:凡是有修改过模板,记得要更新一下模板缓存,方法看用户管理第4点。要修改模板首先要找到模板中的相关样式,一般为<link href="/skins/xxxx.css" rel="stylesheet" type="text/css" />,打开修改。 (六)数据采集: 可以查看论坛教程:http://www.nslove.net/dispbbs.php?boardid=4&id=745 数据采集涉及到版权问题,请谨慎使用。采集对象网站可能实时在变化布局,所以每隔一段时间要重新去定位一下。 (七)过滤限制: 主要是一些敏感字符过滤,可以自由添加删除,添加方法:要过滤的字=替换掉的内容 IP限定添加,管理看说明就可以理解。 (八)数据库管理: 该管理有涉及到安全,请不要随意给其它人权限或者执行。 这里简要说明一下[执行SQL命令],通过该窗口可以批量修改数据库中数据,当然前提是你要懂得SQL命令。可以操作大部内容。要注意该操作是无法恢复的。 四、手册附录: 1、相应组件下载: Jmail4.5版:http://www.nslove.com/down/JMail4.5.rar AspJpeg1.5版:http://www.nslove.com/down/AspJpeg1.5.rar AspUpload3.0.0.6版:http://www.nslove.com/down/AspUploadv3.0.0.6.rar 2、模板命名方法: 后台分页模板采用page_xxxx为模板名,而每个分页模板都有语言包、字符集、循环体,这里先对这三者简单介绍如下: (1)语言包:即为显示在浏览器上的html源代码。 (2)字符集:即为用户在操作添加、删除等会提示一些操作性语句,如添加xxxx成功等。 (3)循环体:即为程序运行时显示的列表,经过程序循环处理显示出来! 三者关系:语言包主,字符集及循环体为辅并且替换语言包中的相关标签!三者相对应硬盘物理文件名分别:xxxx_html.htm、xxxx_strs.htm、xxxx_list.htm文件名称。如日记三者模板名:diary_html.htm,diary.strs.htm,diary_list.htm。如果遇到同一个模板名有多个模板,那么在diary_html0.htm加数字,diary_html1.htm方式。 3、通用标签: 访问官方论坛:http://www.nslove.net/dispbbs.php?boardid=4&id=775 4、模板名称对应说明: Page_Main:主体模板,网站头部及尾部信息都在这里修改; Page_Index:index不是首页模板,它包括登录页、成功及错误信息、用户控制面板几个模板; Page_Html:前台所有生成静态的模板都在这里,如首页就是第一个模板(请注意每个模板前都有 <!--xxxxx-->这样注释即为该栏目静态模板) Page_List:动态文件模板,如搜索结果显示的模板等。 以下是在用户控制面板中分栏目模板 Page_Pray:许愿墙 Page_admin:后台管理的模板 Page_flower:送花模板 Page_Mark:评论模板 Page_Join:报名模板 Page_Article:文章公告模板 Page_Diary:日记发布等模板 Page_Album:相册模板 Page_Group:群组 Page_Party:1+1约会 Page_Story:成功故事 Page_Klatch:活动聚会 Page_Try:试客 Page_Test:心理测试 Page_Pingk:拼客 Page_Ask:顾问 Page_Msg:短信 Page_Email:邮件模板,包括所有发送的邮件模板; Page_Reg:注册页表单模板; Page_Profile:会员资料修改表单; Page_Ava:头像 Page_Upload:上传模板,所有上传入口都在这里; Page_Apply:服务 Page_Friend:朋友 Page_Setting:设置 Page_Account:帐号 Page_Organ:机构婚介 Page_Company:公司联盟
本考试系统由前台考生考试部分和后台系统管理部分组成。 一、前台部分 1、 选择课程: (1)、考试部分 考试权限模式有两种:   1、课程管理员后台设定:由课程管理员在考生考试之前预先设定好每个的试卷 。   2、考生自己选择:考生在第一次登陆考试平台的时候,自己选择要参加的课程和试卷。 考试权限模式由最高管理员在后台设置。 考生要参加考试,必须满足几个前提: a.考生所在的有权限参加该试卷的考试。 b.该试卷呈“打开”状态。 c.该试卷所在课程呈“打开”状态。 d.该试卷所涉及的章节呈“打开”状态。 e.正好在试卷规定的时间内参加考试。 考生在考试过程中,应注意保存答案。试卷内每一种题型的后面都有一个保存按钮,只要考生做完此类型试题,应点击保存按钮。 试卷用倒计时方式扣减时间,如果考生在考试过程中不小心关闭窗口,可以重新进入考试系统,继续刚才的考试,以前保存的答案仍旧存在。 操作题一般来说用于信息化的考试,比如制作Word文档、Excel表格、网页制作等,考生在做完这些文件后上传到服务器上,等待管理员批改。具体上传参数,由最高管理员在后台设定。 在考试结束前一分钟和最后10秒种,系统会提示 考生保存答案,并提交试卷。    考试的次数由管理员或课程管理员设定。考生可以反复参加考试 (2)、竞赛部分 竞赛试卷可以由管理员出题,也可以由考生自由出题。考生在“练习部分”出“模拟试卷”的时候,可以把试卷类型设置为“竞赛”,让其他考生参加这份“模拟试卷”,进行竞赛。 (2)、练习部分 练习分两种:“分项练习”和“模拟试卷” “分项练习”:主要是针对各个章节,不同的题型进行练习。考生要参加练习,管理员或课程管理员必须首先在后台的“课程管理”——“练习管理”中设置好要练习章节的时间、状态。 练习时,以章为单位,按题型类别反复练习。只有在点击“本章已经练习完”之后,考生才可以在“查询成绩”中看到此章练习的标准答案和自己的答案。如果想再练习一次,请点击“重新练习”。       “模拟试卷”:考生可以按自己的想法出试卷,先设置试卷的属性,再设置各种题型的题量与分值,最后生成试卷。考生练习完即可查看成绩。 2、 成绩查询: (1)、考试部分 考生进入已经考过的试卷,可以了解每一种题型的得分情况。而且还可以深入了解到自己的答案与标准答案之间的差距。 因为试卷中的主观题需要课程管理员批改,可能需要一段时间才能查询到成绩。但如果试卷是由客观题型组成的,管理员或课程管理员就可以在后台的“试卷管理”——“查询方式”中,选择“考完查询”。这样,考生就可以在考试结束后立即看到自己的成绩了。 考生可以浏览整张试卷,并打印已经考过的试卷。 (3)、竞赛部分 和考试部分一样。 (2)、练习部分 “分项练习”只有在点击“本章已经练习完”之后,考生才可以在“查询成绩”中看到此章练习的标准答案和自己的答案。 3、 考试新闻  考生可以了解考试的相关信息,还可以看到公布的成绩。 二、后台管理部分 (一)、课程管理 1、课程管理: 课程分“专业课”、“公共课”和“基础课”。出试卷时,范围可以跨“公共课”。当本课程中如果有试卷呈“打开”状态时,请将此课程“打开”。 2、练习管理(章节管理): 用于设定练习的时间和状态,使用时必须为“打开”状态。如果想把题目录入到相应的章节,请在此添加章节序号。添加章节时必须输入数字,以防出错。“现有题量”显示了本章节所储存的“考试题”和“练习题”的总量。 3、试卷管理: 试卷类型分两类,随机试卷和人工出卷。随机试卷必须在“题型管理”中添加“题量”和“分值”。而人工出题的试卷在添加过程中需要从题库中选择试题,使试题呈“选中”状态,且在“题型管理”中只需填写“分值”即可,系统会自动计算“题量”。 使用试卷时,务必把试卷“打开”。  “题型管理”中的“分值”,除阅读理解外,都是指每道题目的分值。因为阅读理解是以大题为单位选题或是抽题,而每个大题都有不确定个小题,所以大题的总分值无法统计,只能输入小题的“分值”。注意:一旦修改试卷的“题量”和“分值”,将会清空已经考过此试卷的考生数据。 课程管理员最好在考试之前设定好试卷的“题量”和“分值”。 答案的保存方式有两种:整体保存和分部保存。整体保存是考试过程中一次性保存所有题型的试题答案。分部保存是仅

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小曲曲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值