123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487 |
- function currentTime() {
- var now = new Date()
- var year = now.getFullYear() //年
- var month = now.getMonth() + 1 //月
- var day = now.getDate() //日
- var hh = now.getHours() //时
- var mm = now.getMinutes() //分
- var clock = year + ''
- if (month < 10) clock += '0'
- clock += month + ''
- if (day < 10) clock += '0'
- clock += day + ''
- if (hh < 10) clock += '0'
- clock += hh + ''
- if (mm < 10) clock += '0'
- clock += mm
- return clock
- }
- /**
- * 解析返回response的参数
- * @param {*} resp
- * @return {*} body
- */
- function handleResultBody(resp) {
- var result = ''
- if (resp.Body) {
- // 解析返回response的参数
- }
- return result
- }
- /**
- * 判断WPS中的文件个数是否为0,若为0则关闭WPS函数
- * @param {*} name
- */
- function closeWpsIfNoDocument() {
- var wpsApp = wps.WpsApplication()
- var docs = wpsApp.Documents
- if (!docs || docs.Count == 0) {
- setTimeout(function () {
- //修复国产环境启动WPS后状态未重置的问题
- wps
- .WpsApplication()
- .CommandBars.ExecuteMso('KsoEx_RevisionCommentModify_Enable')
- wpsApp.Quit()
- }, 200)
- }
- }
- /**
- * 隐藏掉wps应用
- * @param {number} num beforeclose:1 afterclose:0
- */
- function hiddenIfNoDocument(num) {
- var wpsApp = wps.WpsApplication()
- var docs = wpsApp.Documents
- if (!docs || docs.Count == num) {
- loginfo('hidden')
- wps.Application.Visible = false
- }
- }
- function activeTab() {
- //启动WPS程序后,默认显示的工具栏选项卡为ribbon.xml中某一tab WeOfficeWPSExtTab
- if (wps.ribbonUI) wps.ribbonUI.ActivateTab('WeOfficeWPSExtTab')
- }
- function showOATab() {
- wps.PluginStorage.setItem('ShowOATabDocActive', pCheckIfOADoc()) //根据文件是否为OA文件来显示OA菜单
- wps.ribbonUI.Invalidate() // 刷新Ribbon自定义按钮的状态
- }
- function pGetParamName(data, attr) {
- var start = data.indexOf(attr)
- data = data.substring(start + attr.length)
- return data
- }
- function GetRequest(url) {
- if (url.indexOf('?') != -1) {
- //判断是否有参数
- var str = url.substr(1) //从第一个字符开始 因为第0个是?号 获取所有除问号的所有符串
- strs = str.split('=') //用等号进行分隔 (因为知道只有一个参数 所以直接用等号进分隔 如果有多个参数 要用&号分隔 再用等号进行分隔)
- return strs[1] //直接弹出第一个参数 (如果有多个参数 还要进行循环的)
- } else {
- return ''
- }
- }
- /**
- * 从requst中获取文件名(确保请求中有filename这个参数)
- * @param {*} request
- * @param {*} url
- */
- function pGetFileName(request, url) {
- var disposition = request.getResponseHeader('Content-Disposition')
- var filename = ''
- if (disposition && GetRequest(url) == '') {
- var matchs = disposition.match(/filename[^;\n=]*=((['"]).*?\2|[^;\n]*)/)
- if (matchs != null && matchs[1]) {
- filename = decodeURIComponent(
- matchs[1].replace('UTF-8', '').replace("'", '')
- )
- } else {
- filename = 'petro' + Date.now()
- }
- } else {
- //var filename = url.substring(url.lastIndexOf("/") + 1);
- var filename = GetRequest(url)
- }
- return filename
- }
- /**
- *
- * @param {String} params OA传递过来的字符串
- * @returns 文件名称
- */
- function GetFileNameByParams(params) {
- return getParamFormIndiDocxForm(params.fileInfo, 'file_name')
- }
- function GetFileNameByFileInfo(fileInfo) {
- return getParamFormIndiDocxForm(fileInfo, 'file_name')
- }
- /**
- * 获取落地文件地址
- * @param {*} url
- * @param {*} filename
- * @param {boolean} 生成随机dir
- * @returns
- */
- function GetLocalFileName(url, filename, random) {
- var match = url.match(/(?<id>\d*)(\?fileName=(?<filename>.*))?$/)
- var customerdir = OACustomer.getCustomerDir('word')
- var dir =
- (customerdir || wps.Env.GetTempPath()) +
- constStrEnum.DirSeparator +
- match.groups.id
- mkdir(dir)
- if (!!filename) return dir + constStrEnum.DirSeparator + filename
- if (random) {
- dir +=
- constStrEnum.DirSeparator +
- Number(Math.random().toString().substr(3, 3) + Date.now()).toString(36)
- mkdir(dir)
- }
- return dir + constStrEnum.DirSeparator + match.groups.filename
- }
- /**
- * WPS下载文件到本地打开(业务系统可根据实际情况进行修改)
- * @param {*} url 文件流的下载路径
- * @param {*} callback 下载后的回调
- * @param {boolean} random 是否随机目录名称 如果fileName为空这个参数才生效
- */
- function DownloadFile(url, fileName, random = false) {
- return new Promise((resolve, reject) => {
- var xhr = new XMLHttpRequest()
- xhr.onreadystatechange = function () {
- if (this.readyState == 4) {
- if (this.status == 200) {
- try {
- var path = GetLocalFileName(url, fileName, random)
- var sourceName = pGetFileName(this, url)
- loginfo(`下载文件[${sourceName}]完成`)
- var reader = new FileReader()
- reader.onload = function () {
- wps.FileSystem.writeAsBinaryString(path, reader.result)
- loginfo(`下载文件[${sourceName}]写入磁盘完成`)
- resolve(path)
- }
- reader.readAsBinaryString(xhr.response)
- } catch (err) {
- toggleBeforeOAfterLoading()
- loginfo(err)
- reject(err)
- }
- } else {
- toggleBeforeOAfterLoading()
- loginfo(`下载文件[${fileName}]报错:${xhr.status}`)
- reject(xhr.status)
- }
- }
- }
- GetToken().then(function (token) {
- xhr.open('GET', url)
- xhr.setRequestHeader('Authorization', token)
- xhr.responseType = 'blob'
- loginfo(`开始下载文件[${fileName}]`)
- xhr.send()
- })
- })
- }
- function getParamFormIndiDocxForm(initStr, paramName) {
- if (initStr == null || initStr == '' || initStr.indexOf(paramName) < 0) {
- return ''
- }
- var startTag = '<' + paramName + '>'
- var endTag = '</' + paramName + '>'
- var value = ''
- value = initStr.split(startTag)[1]
- value = value.split(endTag)[0]
- return value
- }
- /**
- * WPS上传文件到服务端(业务系统可根据实际情况进行修改,为了兼容中文,服务端约定用UTF-8编码格式)
- * @param {*} strFileName 上传到服务端的文件名称(包含文件后缀)
- * @param {*} strPath 上传文件的文件路径(文件在操作系统的绝对路径)
- * @param {*} uploadPath 上传文件的服务端地址
- * @param {*} strFieldName 业务调用方自定义的一些内容可通过此字段传递,默认赋值'file'
- * @param {*} OnSuccess 上传成功后的回调
- * @param {*} OnFail 上传失败后的回调
- * @param {*} l_doc 当前操作的doc对象
- */
- function UploadFile(
- strFileName,
- strPath,
- uploadPath,
- strFieldName = 'file',
- l_doc,
- OnSuccess,
- OnFail,
- OnComplated
- ) {
- var params = GetDocParamsValues(l_doc)
- //统一名称
- var filename = strFileName // getParamFormIndiDocxForm(params.fileInfo, 'file_name')
- //只读文档
- if (l_doc.ProtectionType == WdProtectionType.wdAllowOnlyFormFields) {
- return
- }
- loginfo('文件内容读取')
- var fileData = wps.FileSystem.readAsBinaryString(strPath)
- loginfo('文件内容读取完成')
- var data = new FakeFormData()
- if (params.action != null && params.action != '') {
- data.append('action', utf16ToUtf8(params.action))
- }
- if (params.trackFileName != null && params.trackFileName != '') {
- data.append('trackFileName', utf16ToUtf8(params.trackFileName))
- }
- data.append('querystring', utf16ToUtf8(params.fileInfo))
- data.append('FileName', utf16ToUtf8(filename))
- if (params.uploadParam != '' && params.uploadParam != 'undefined') {
- var arrParams = params.uploadParam.split('|')
- for (var i = 0; i < arrParams.length; i++) {
- if (arrParams[i] != '') {
- data.append(
- arrParams[i].split('=')[0],
- utf16ToUtf8(arrParams[i].split('=')[1])
- )
- }
- }
- }
- if (!strFieldName) {
- //如果业务方没定义,默认设置为'file'
- strFieldName = 'file'
- }
- data.append(strFieldName, {
- name: utf16ToUtf8(strFileName), //主要是考虑中文名的情况,服务端约定用utf-8来解码。
- type: 'application/octet-stream',
- getAsBinary: function () {
- return fileData
- },
- })
- var xhr = new XMLHttpRequest()
- xhr.open('POST', uploadPath, true)
- //添加回调来刷新前端列表 青格勒 2021年4月16日
- xhr.onreadystatechange = function () {
- if (this.readyState == 4) {
- OnComplated && OnComplated()
- //接口会返回多种结构的信息
- //平台异常返回json;eq:{"message":"groupId参数格式不正确","errors":null,"code":400} httpCode为code元素
- //成功返回true|XXXXX|XXXXXXX httpCode 200
- //悲观锁异常返回 lockError|lock failure httpCode 200
- if (this.status === 200 || this.status === 0) {
- loginfo(`上传文件[${filename}]完成`)
- if (this.responseText.startsWith('true')) {
- OnSuccess && OnSuccess(this.response)
- } else {
- OnFail && OnFail(l_doc, this.response)
- }
- } else {
- loginfo(`上传文件[${l_doc.Name}]报错:${this.response}`)
- OnFail && OnFail(l_doc, this.response)
- }
- }
- }
- if (OnFail)
- xhr.timeout = function () {
- OnFail(l_doc, 'timeout')
- }
- GetToken().then(function (token) {
- xhr.setRequestHeader('Cache-Control', 'no-cache')
- xhr.setRequestHeader('Authorization', token)
- xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest')
- if (data.fake) {
- xhr.setRequestHeader(
- 'Content-Type',
- 'multipart/form-data; boundary=' + data.boundary
- )
- loginfo(`开始编码[${filename}]`)
- var arr = StringToUint8Array(data.toString())
- loginfo(`编码[${filename}]完成`)
- try {
- loginfo(`上传文件[${filename}]`)
- xhr.send(arr)
- } catch (e) {
- logerr('刷新授权错误:' + e)
- OnFail && OnFail(this.response)
- }
- } else {
- try {
- loginfo(`上传文件[${filename}]`)
- xhr.send(data)
- } catch (e) {
- logerr('刷新授权错误:' + e)
- OnFail && OnFail(this.response)
- }
- }
- })
- }
- /**
- * 上传并删除action和trackFileName
- * @param {*} doc
- * @param {*} uploadName
- * @param {*} uploadPath
- * @param {*} docPath
- * @param {*} fieldName
- */
- function UploadAndRemoveAction(
- doc,
- uploadName,
- uploadPath,
- docPath,
- fieldName
- ) {
- try {
- doc.Save()
- //调用OA助手的上传方法
- UploadFile(
- uploadName,
- docPath,
- uploadPath,
- fieldName,
- doc,
- function () {
- SetDocParamsValue(doc, 'action', null)
- SetDocParamsValue(doc, 'trackFileName', null)
- var params = GetDocParamsValues(doc)
- if (params.fileparam.IsMaximization == false) {
- //静默模式
- doc.Close()
- }
- },
- function (doc, rps) {
- OnUploadFileFail(doc, rps, false)
- }
- )
- } catch (err) {
- alert('上传文件失败!请检查系统上传参数及网络环境!')
- }
- }
- /**
- * 根据传入Document对象,获取OA传入的参数的某个Key值的Value
- * @param {*} Doc
- * @param {*} Key
- * 返回值:返回指定 Key的 Value
- */
- function GetDocParamsValue(Doc, Key) {
- if (!Doc) {
- return ''
- }
- var l_Params = wps.PluginStorage.getItem(GetUniqueId(Doc))
- if (!l_Params) {
- return ''
- }
- var l_objParams = JSON.parse(l_Params)
- if (typeof l_objParams == 'undefined') {
- return ''
- }
- var l_rtnValue = l_objParams[Key]
- if (typeof l_rtnValue == 'undefined' || l_rtnValue == null) {
- return ''
- }
- return l_rtnValue
- }
- /**
- * 根据传入Document对象,获取OA传入的参数的所有参数
- * @param {*} Doc
- * @param {*} Key
- * 返回值 Object
- */
- function GetDocParamsValues(Doc) {
- if (!Doc) {
- return ''
- }
- var l_Params = wps.PluginStorage.getItem(GetUniqueId(Doc))
- if (!l_Params) {
- return ''
- }
- return JSON.parse(l_Params)
- }
- /**
- * 设置文档参数的属性值
- * @param {*} Doc
- * @param {*} Key
- * @param {*} Value
- */
- function SetDocParamsValue(Doc, Key, Value) {
- if (!Doc || !Key) {
- return
- }
- var docid = GetUniqueId(Doc)
- var l_Params = wps.PluginStorage.getItem(docid) || '{}'
- var l_objParams = JSON.parse(l_Params)
- if (!(typeof l_objParams == 'undefined')) {
- l_objParams[Key] = Value
- }
- //把属性值整体再写回原来的文档ID中
- wps.PluginStorage.setItem(docid, JSON.stringify(l_objParams))
- }
- /**
- * 批量设置文档oa参数
- * @param {wps.document} Doc
- * @param {Object} values
- * @returns
- */
- function SetDocParamsValues(Doc, values) {
- if (!Doc) {
- return
- }
- var docid = GetUniqueId(Doc)
- var l_Params = wps.PluginStorage.getItem(docid) || '{}'
- var l_objParams = JSON.parse(l_Params)
- if (!(typeof l_objParams == 'undefined')) {
- Object.keys(values).forEach((key) => {
- l_objParams[key] = values[key]
- })
- }
- //把属性值整体再写回原来的文档ID中
- wps.PluginStorage.setItem(docid, JSON.stringify(l_objParams))
- }
- function GetCurrentDocument() {
- return wps.Application.ActiveDocument
- }
|