123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 |
- 'use strict';
- /**
- * 材料调差 - 附件
- * @author LanJianRong
- * @date 2020/06/30
- * @version
- */
- $(document).ready(function () {
- // 每页最多几个附件
- const pageCount = 20;
- // 全局fileData初始化
- let fileData = fileList || []
- // let currPageFileData = [];
- handleFileList(fileData)
- getAllList()
- $('#upload-file-ok').click(function () {
- const files = Array.from($('#upload-fujian-file')[0].files)
- const valiData = files.map(v => {
- const ext = v.name.substring(v.name.lastIndexOf('.') + 1)
- return {
- size: v.size,
- ext
- }
- })
- if (validateFiles(valiData)) {
- if (files.length) {
- const formData = new FormData()
- files.forEach(file => {
- formData.append('name', file.name)
- formData.append('size', file.size)
- formData.append('file', file)
- })
- postDataWithFile(window.location.pathname + '/upload', formData, function (result) {
- $('#upload-fujian-file').val('');
- handleFileList(result)
- $('#addfujian').modal('hide');
- if (!$('#file-list tr').length) {
- getAllList();
- } else {
- const curPageNo = $('#file-pagination > li[class="page-item active"] > a').text() || 1
- getAllList(parseInt(curPageNo));
- }
- });
- }
- }
- })
- // 选择/未选所有期列表
- // $('#file-checkbox').click(function() {
- // getAllList()
- // })
- // 删除附件
- $('body').on('click', '.delete-file', function () {
- let attid = $(this).data('attid');
- const data = {id: attid};
- postData(window.location.pathname + '/delete', data, function () {
- const idx = fileData.findIndex(file => file.id === parseInt(attid))
- idx !== -1 && fileData.splice(idx, 1)
- const curPageNo = parseInt($('#file-pagination > li[class="page-item active"] > a').text()) || 1
- if ($('#file-list tr').length === 1) {
- getAllList(curPageNo - 1);
- } else {
- getAllList(curPageNo);
- }
- // self.parents('tr').remove();
- // // 重新排序
- // let newsort = 1;
- // $('#file-list tr').each(function(){
- // $(this).children('td').eq(0).text(newsort);
- // newsort++;
- // });
- });
- });
- // 切换页数
- $('#file-pagination').on('click', '.page-item a', function () {
- // 找到当前的pageNo
- const curPageNo = $('#file-pagination > li[class="page-item active"] > a').text() || 1
- const btnType = $(this).attr('aria-label')
- const total = calcCount();
- // btnType存在,说明点击的是前一个/后一个
- // btnType不存在,点击的是页数
- if (btnType) {
- if (btnType === 'Previous') {
- // 只有大于1时才处理
- if (parseInt(curPageNo) !== 1) {
- getAllList(curPageNo - 1)
- }
- } else if(btnType === 'Next') {
- if (parseInt(curPageNo) !== Math.ceil(total/pageCount)) {
- getAllList(parseInt(curPageNo) + 1)
- }
- } else if(btnType === 'Start') {
- getAllList(1)
- } else {
- getAllList(Math.ceil(total/pageCount))
- }
- } else {
- curPageNo !== $(this).text() && getAllList(parseInt($(this).text()))
- }
- });
- $('.dropdown-item').click(function() {
- const type = $('#dropdownMenuButton').attr('btn-type')
- if (type === 'curr') {
- $(this).text('当前期')
- $('#dropdownMenuButton').text('所有期')
- $('#dropdownMenuButton').attr('btn-type', 'all')
- } else {
- $(this).text('所有期')
- $('#dropdownMenuButton').text('当前期')
- $('#dropdownMenuButton').attr('btn-type', 'curr')
- }
- getAllList()
- })
- // 生成所有附件列表
- function getAllList(currPageNum = 1) {
- const isCheckAll = $('#dropdownMenuButton').attr('btn-type') === 'all'
- // 未选中checkbox,需要过滤出来当前期的数据
- const filterFileData = fileData && isCheckAll ? fileData : fileData.filter(file => file.mid === parseInt(mid) && file.tid === parseInt(tid))
- const total = calcCount();
- // 总页数
- const pageNum = Math.ceil(total/pageCount);
- // 当前页附件内容
- const currPageAttData = fileData && isCheckAll ? fileData.map((v, index) => {
- return {...v, index }
- }).slice((currPageNum-1)*pageCount, currPageNum*pageCount)
- : filterFileData.map((v, index) => {
- return {...v, index }
- }).slice((currPageNum-1)*pageCount, currPageNum*pageCount);
- currPageFileData = currPageAttData;
- renderHtml(currPageAttData);
- // 渲染分页器
- renderPagination(currPageNum, pageNum)
- };
- function renderPagination(pageNo, pageSize) {
- $('#file-pagination').empty()
- if (pageSize < 2) return
- const btnHtml = `
- <li class="page-item page-begin">
- <a class="page-link" href="#" aria-label="Start">
- <span aria-hidden="true">«</span>
- </a>
- </li>
- <li class="page-item page-back">
- <a class="page-link" href="#" aria-label="Previous">
- <span aria-hidden="true">‹</span>
- </a>
- </li>
- <li class="page-item page-next">
- <a class="page-link" href="#" aria-label="Next">
- <span aria-hidden="true">›</span>
- </a>
- </li>
- <li class="page-item page-end">
- <a class="page-link" href="#" aria-label="End">
- <span aria-hidden="true">»</span>
- </a>
- </li>`
- $('#file-pagination').append(btnHtml)
- let html = ''
- // 考虑极端情况
- if (pageNo - 2 <= 0 || pageNo + 2 >= pageSize) {
- if (pageNo < 3) {
- const max = pageSize > 5 ? 5 : pageSize
- for (let i = 0; i < max; i++) {
- html += pageNo === i + 1 ?
- `<li class="page-item active"><a class="page-link" href="#">${i+1}</a></li>` :
- `<li class="page-item"><a class="page-link" href="#">${i+1}</a></li>`
- }
- } else {
- for (let i = (pageSize-4 > 0 ? pageSize-4 : 1 ); i <= pageSize; i++) {
- html += pageNo === i ?
- `<li class="page-item active"><a class="page-link" href="#">${i}</a></li>` :
- `<li class="page-item"><a class="page-link" href="#">${i}</a></li>`
- }
- }
- } else {
- for (let i = 0; i < pageSize; i++) {
- if (i + 1 === pageNo) {
- // 当前
- html+=`<li class="page-item active"><a class="page-link" href="#">${i + 1}</a></li>`
- } else if(i + 2 === pageNo && i + 2 <= pageSize) {
- // 后一页
- html+=`<li class="page-item"><a class="page-link" href="#">${i + 1}</a></li>`
- } else if (i + 3 === pageNo && i + 3 <= pageSize) {
- // 后两页
- html+=`<li class="page-item"><a class="page-link" href="#">${i + 1}</a></li>`
- } else if(i === pageNo) {
- // 前一页
- html+=`<li class="page-item"><a class="page-link" href="#">${i + 1}</a></li>`
- } else if (i -1 === pageNo && i -1 >= 0) {
- // 前两页
- html+=`<li class="page-item"><a class="page-link" href="#">${i + 1}</a></li>`
- }
- }
- }
- $('.page-next').before(html)
- };
- function renderHtml(list) {
- let html = '';
- $('#check-all-file').prop("checked", false)
- list.forEach(fileInfo => {
- html += `<tr style="height: 31px;">
- <td width="25"><input type="checkbox" class="check-file" file-id=${fileInfo.id}></td>
- <td>${fileInfo.index + 1}</td>
- <td><a href="${fileInfo.filepath}" target="_blank">${fileInfo.file_name}</a></td>
- <td>${fileInfo.file_size}</td>
- <td>第${fileInfo.s_order}期</td>
- <td>${fileInfo.upload_time}</td>`
- if (fileInfo.showDel ) {
- html += `<td>
- <a href="file/${fileInfo.id}/download" class="btn btn-light btn-sm" title="下载"><span class="fa fa-download text-primary"></span></a>
- <a href="javascript:void(0);" class="btn btn-light btn-sm delete-file" data-attid="${fileInfo.id}" title="删除附件">
- <span class="fa fa-trash text-danger"></span>
- </a>
- </td></tr>`
- } else {
- html += `<td><a href="${fileInfo.filepath}" class="btn btn-light btn-sm" title="下载"><span class="fa fa-download text-primary"></span></a></td></tr>`
- }
- })
- $('#file-list').empty();
- $('#file-list').append(html);
- };
- $('#file-list').on('click', '.check-file', function() {
- const checkedList = $('#file-list').find('input:checked')
- const childs = $('#file-list').children().length
- const checkBox = $('#check-all-file')
- if (checkedList.length === childs) {
- checkBox.prop("checked", true)
- } else {
- checkBox.prop("checked", false)
- }
- })
- $('#check-all-file').click(function() {
- const isCheck = $(this).is(':checked')
- $('#file-list').children().each(function() {
- $(this).find('input:checkbox').prop("checked", isCheck)
- })
- });
- $('#bach-download').click(async function() {
- const fileIds = []
- $( '#file-list .check-file:checked').each(function() {
- const fileId = $(this).attr('file-id')
- fileId && fileIds.push(fileId)
- })
- // console.log('fileIds', fileIds)
- if (fileIds.length) {
- if (fileIds.length > 20) {
- return toastr.warning(`最大允许20个文件(当前${fileIds.length}个)`)
- }
- toastr.success('正在进行下载并压缩文件...', '', { timeOut: 0, extendedTimeOut: 0})
- $(this).attr('disabled', "true");
- const btn = $(this);
- const fileArr = [];
- for (const id of fileIds) {
- const fileInfo = _.find(currPageFileData, { id: parseInt(id) });
- fileArr.push({
- url: fileInfo.orginpath, //文件的oss存储路径 (必填)
- name: fileInfo.file_name.substring(0, fileInfo.file_name.lastIndexOf(".")), // 文件名 (可选, 不需要填扩展名)
- foldPath: '' // (可选, 文件在压缩包中的存储路径)
- });
- }
- const packageName = `${tender.name}-材料调差-第${order}期-附件.zip`;
- try {
- zipOss.downloadFromAliOss(fileArr, packageName, btn);
- } catch (e) {
- btn.removeAttr('disabled');
- toastr.clear();
- toastr.error('批量下载失败');
- }
- // postCompressFile(`/tender/${tid}/measure/material/${order}/file/download/compresse-file`, {fileIds}, function(result) {
- // toastr.clear()
- // toastr.success('压缩文件成功')
- // btn.removeAttr('disabled')
- // const href = window.URL.createObjectURL(result)
- // $('#zipDown').attr('href', href);
- // $('#zipDown').attr('download', `${tender.name}-材料调差-第${order}期-附件.zip`);
- // $("#zipDown")[0].click();
- // }, () => {
- // btn.removeAttr('disabled')
- // toastr.clear()
- // toastr.error('批量下载失败')
- // });
- // postData( `/tender/${tid}/measure/material/${order}/file/download/compresse-file`, { fileIds })
- // $('#downloadZip').attr('href', `/tender/${tid}/measure/material/${order}/file/download/compresse-file?fileIds=${JSON.stringify(fileIds)}`);
- // $('#downloadZip')[0].click();
- }
- });
- function handleFileList(fileList) {
- fileData = fileList.map((file, index) => {
- let showDel = false
- // 只判断当前期,因为以往期都是只读的
- if (file.mid === parseInt(mid) && file.tid === parseInt(tid) && file.user_id === parseInt(cur_uid)) {
- if (materialStatus === auditConst.status.checked) {
- showDel = Boolean(file.extra_upload )
- } else {
- showDel = true
- }
- // if (!curAuditor) {
- // materialStatus === auditConst.status.uncheck && parseInt(cur_uid) === materialUid && (showDel = true)
- // materialStatus === auditConst.status.checkNo && parseInt(cur_uid) === materialUid && (showDel = true)
- // } else {
- // curAuditor.aid === parseInt(cur_uid) && (showDel = true)
- // }
- }
- return {...file, index, showDel}
- })
- };
- function calcCount() {
- // 附件总数
- let total = fileData && fileData.length;
- if($('#dropdownMenuButton').attr('btn-type') === 'curr') {
- total = fileData && fileData.filter(file => file.mid === parseInt(mid) && file.tid === parseInt(tid)).length
- }
- return total
- };
- $.subMenu({
- menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
- toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
- key: 'menu.1.0.0',
- miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1',
- callback: function (info) {
- if (info.mini) {
- $('.panel-title').addClass('fluid');
- $('#sub-menu').removeClass('panel-sidebar');
- } else {
- $('.panel-title').removeClass('fluid');
- $('#sub-menu').addClass('panel-sidebar');
- }
- autoFlashHeight();
- }
- });
- });
- /**
- * 校验文件大小、格式
- * @param {Array} files 文件数组
- */
- function validateFiles(files) {
- if (files.length > 10) {
- toastr.error('至多同时上传10个文件');
- return false
- }
- return files.every(file => {
- if (file.size > 1024 * 1024 * 30) {
- toastr.error('文件大小限制为30MB');
- return false
- }
- if (whiteList.indexOf('.' + file.ext) === -1) {
- toastr.error('请上传正确的格式文件');
- return false
- }
- return true
- })
- };
|