Browse Source

员工周报

liyuanpeng 3 years ago
parent
commit
4e2f579a3e

BIN
dist.zip


+ 322 - 318
public/static/js/exportExcel.js

@@ -1,351 +1,355 @@
 function colorRGBtoHex(color) {
-    var rgb = color.split(',');
-    var r = parseInt(rgb[0].split('(')[1]);
-    var g = parseInt(rgb[1]);
-    var b = parseInt(rgb[2].split(')')[0]);
-    var hex = "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
-    return hex;
+	var rgb = color.split(',');
+	var r = parseInt(rgb[0].split('(')[1]);
+	var g = parseInt(rgb[1]);
+	var b = parseInt(rgb[2].split(')')[0]);
+	var hex = "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
+	return hex;
 }
+
 function exportExcel(luckysheet, value) {
-    // 参数为luckysheet.getluckysheetfile()获取的对象
-    // 1.创建工作簿,可以为工作簿添加属性
-    var workbook = new ExcelJS.Workbook()
-    // 2.创建表格,第二个参数可以配置创建什么样的工作表
-    if (Object.prototype.toString.call(luckysheet) === '[object Object]') {
-        luckysheet = [luckysheet]
-    }
-    luckysheet.forEach(function (table) {
-        if (table.data.length === 0) return true
-        // ws.getCell('B2').fill = fills.
-        var worksheet = workbook.addWorksheet(table.name)
-        var merge = (table.config && table.config.merge) || {}
-        var borderInfo = (table.config && table.config.borderInfo) || {}
-        // 3.设置单元格合并,设置单元格边框,设置单元格样式,设置值
-        setStyleAndValue(table.data, worksheet)
-        setMerge(merge, worksheet)
-        setBorder(borderInfo, worksheet)
-		console.log(table)
-        return true
-    })
+	// 参数为luckysheet.getluckysheetfile()获取的对象
+	// 1.创建工作簿,可以为工作簿添加属性
+	var workbook = new ExcelJS.Workbook()
+	// 2.创建表格,第二个参数可以配置创建什么样的工作表
+	if (Object.prototype.toString.call(luckysheet) === '[object Object]') {
+		luckysheet = [luckysheet]
+	}
+	luckysheet.forEach(function(table) {
+		if (table.data.length === 0) return true
+		// ws.getCell('B2').fill = fills.
+		var worksheet = workbook.addWorksheet(table.name)
+		var merge = (table.config && table.config.merge) || {}
+		var borderInfo = (table.config && table.config.borderInfo) || {}
+		// 3.设置单元格合并,设置单元格边框,设置单元格样式,设置值
+		setStyleAndValue(table.data, worksheet)
+		setMerge(merge, worksheet)
+		setBorder(borderInfo, worksheet)
+		return true
+	})
 
-    // return
-    // 4.写入 buffer
-    var buffer = workbook.xlsx.writeBuffer().then(function (data) {
-        var blob = new Blob([data], {
-            type: 'application/vnd.ms-excel;charset=utf-8'
-        })
-        saveAs(blob, value + '.xlsx')
-    })
-    return buffer
+	// return
+	// 4.写入 buffer
+	var buffer = workbook.xlsx.writeBuffer().then(function(data) {
+		var blob = new Blob([data], {
+			type: 'application/vnd.ms-excel;charset=utf-8'
+		})
+		saveAs(blob, value + '.xlsx')
+	})
+	return buffer
 }
-var setMerge = function (luckyMerge, worksheet) {
-    var mergearr = Object.values(luckyMerge || {})
-    mergearr.forEach(function (elem) {
-        // elem格式:{r: 0, c: 0, rs: 1, cs: 2}
-        // 按开始行,开始列,结束行,结束列合并(相当于 K10:M12)
-        worksheet.mergeCells(
-            elem.r + 1,
-            elem.c + 1,
-            elem.r + elem.rs,
-            elem.c + elem.cs
-        )
-    })
+var setMerge = function(luckyMerge, worksheet) {
+	var mergearr = Object.values(luckyMerge || {})
+	mergearr.forEach(function(elem) {
+		// elem格式:{r: 0, c: 0, rs: 1, cs: 2}
+		// 按开始行,开始列,结束行,结束列合并(相当于 K10:M12)
+		worksheet.mergeCells(
+			elem.r + 1,
+			elem.c + 1,
+			elem.r + elem.rs,
+			elem.c + elem.cs
+		)
+	})
 }
 
-var setBorder = function (luckyBorderInfo, worksheet) {
-    if (!Array.isArray(luckyBorderInfo)) return
-    // console.log('luckyBorderInfo', luckyBorderInfo)
-    luckyBorderInfo.forEach(function (elem) {
-        // 现在只兼容到borderType 为range的情况
-        // console.log('ele', elem)
-        if (elem.rangeType === 'range') {
-            let border = borderConvert(elem.borderType, elem.style, elem.color)
-            let rang = elem.range[0]
-            // console.log('range', rang)
-            let row = rang.row
-            let column = rang.column
-            for (let i = row[0] + 1; i < row[1] + 2; i++) {
-                for (let y = column[0] + 1; y < column[1] + 2; y++) {
-                    worksheet.getCell(i, y).border = border
-                }
-            }
-        }
-        if (elem.rangeType === 'cell') {
-            // col_index: 2
-            // row_index: 1
-            // b: {
-            //   color: '#d0d4e3'
-            //   style: 1
-            // }
-            var col_index = elem.value.col_index
-            var row_index = elem.value.row_index
-            var borderData = Object.assign({}, elem.value)
-            delete borderData.col_index
-            delete borderData.row_index
-            let border = addborderToCell(borderData, row_index, col_index)
-            // console.log('bordre', border, borderData)
-            worksheet.getCell(row_index + 1, col_index + 1).border = border
-        }
-        // console.log(rang.column_focus + 1, rang.row_focus + 1)
-        // worksheet.getCell(rang.row_focus + 1, rang.column_focus + 1).border = border
-    })
+var setBorder = function(luckyBorderInfo, worksheet) {
+	if (!Array.isArray(luckyBorderInfo)) return
+	luckyBorderInfo.forEach(function(elem) {
+		// 现在只兼容到borderType 为range的情况
+		if (elem.rangeType === 'range') {
+			let border = borderConvert(elem.borderType, elem.style, elem.color)
+			let rang = elem.range[0]
+			let row = rang.row
+			let column = rang.column
+			for (let i = row[0] + 1; i < row[1] + 2; i++) {
+				for (let y = column[0] + 1; y < column[1] + 2; y++) {
+					worksheet.getCell(i, y).border = border
+				}
+			}
+		}
+		if (elem.rangeType === 'cell') {
+			// col_index: 2
+			// row_index: 1
+			// b: {
+			//   color: '#d0d4e3'
+			//   style: 1
+			// }
+			var col_index = elem.value.col_index
+			var row_index = elem.value.row_index
+			var borderData = Object.assign({}, elem.value)
+			delete borderData.col_index
+			delete borderData.row_index
+			let border = addborderToCell(borderData, row_index, col_index)
+			worksheet.getCell(row_index + 1, col_index + 1).border = border
+		}
+		// worksheet.getCell(rang.row_focus + 1, rang.column_focus + 1).border = border
+	})
 }
-var setStyleAndValue = function (cellArr, worksheet) {
-    if (!Array.isArray(cellArr)) return
-    cellArr.forEach(function (row, rowid) {
-        row.every(function (cell, columnid) {
-            if (!cell) return true
-            let fill = fillConvert(cell.bg)
+var setStyleAndValue = function(cellArr, worksheet) {
+	if (!Array.isArray(cellArr)) return
+	cellArr.forEach(function(row, rowid) {
+		row.every(function(cell, columnid) {
+			if (!cell) return true
+			let fill = fillConvert(cell.bg)
 
-            let font = fontConvert(
-                cell.ff,
-                cell.fc,
-                cell.bl,
-                cell.it,
-                cell.fs,
-                cell.cl,
-                cell.ul
-            )
-            let alignment = alignmentConvert(cell.vt, cell.ht, cell.tb, cell.tr)
-            let value = ''
+			let font = fontConvert(
+				cell.ff,
+				cell.fc,
+				cell.bl,
+				cell.it,
+				cell.fs,
+				cell.cl,
+				cell.ul
+			)
+			let alignment = alignmentConvert(cell.vt, cell.ht, cell.tb, cell.tr)
+			let value = ''
 
-            if (cell.f) {
-                value = { formula: cell.f, result: cell.v }
-            } else if (!cell.v && cell.ct && cell.ct.s) {
-                // xls转为xlsx之后,内部存在不同的格式,都会进到富文本里,即值不存在与cell.v,而是存在于cell.ct.s之后
-                // value = cell.ct.s[0].v
-                cell.ct.s.forEach(function (arr) {
-                    value += arr.v
-                })
-            } else {
-                value = cell.m//1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-				console.log(cell)
-            }
-            //  style 填入到_value中可以实现填充色
-            let letter = createCellPos(columnid)
-            let target = worksheet.getCell(letter + (rowid + 1))
-            // console.log('1233', letter + (rowid + 1))
-            for (var key in fill) {
-                target.fill = fill
-                break
-            }
-            target.font = font
-            target.alignment = alignment
-            target.value = value
+			if (cell.f) {
+				value = {
+					formula: cell.f,
+					result: cell.v
+				}
+			} else if (!cell.v && cell.ct && cell.ct.s) {
+				// xls转为xlsx之后,内部存在不同的格式,都会进到富文本里,即值不存在与cell.v,而是存在于cell.ct.s之后
+				// value = cell.ct.s[0].v
+				cell.ct.s.forEach(function(arr) {
+					value += arr.v
+				})
+			} else {
+				value = cell.m //
+				console.log(value)
+			}
+			//  style 填入到_value中可以实现填充色
+			let letter = createCellPos(columnid)
+			let target = worksheet.getCell(letter + (rowid + 1))
+			for (var key in fill) {
+				target.fill = fill
+				break
+			}
+			target.font = font
+			target.alignment = alignment
+			target.value = value
 
-            return true
-        })
-    })
+			return true
+		})
+	})
 }
 
-var fillConvert = function (bg) {
-    if (!bg) {
-        return {}
-    }
-    // var bgc = bg.replace('#', '')
-    if (bg.indexOf('#') == -1) {
-        bg = colorRGBtoHex(bg)
-    }
-    let fill = {
-        type: 'pattern',
-        pattern: 'solid',
-        fgColor: { argb: bg.replace('#', '') }
-    }
-    return fill
+var fillConvert = function(bg) {
+	if (!bg) {
+		return {}
+	}
+	// var bgc = bg.replace('#', '')
+	if (bg.indexOf('#') == -1) {
+		bg = colorRGBtoHex(bg)
+	}
+	let fill = {
+		type: 'pattern',
+		pattern: 'solid',
+		fgColor: {
+			argb: bg.replace('#', '')
+		}
+	}
+	return fill
 }
 
-var fontConvert = function (
-    ff,
-    fc,
-    bl,
-    it,
-    fs,
-    cl,
-    ul
+var fontConvert = function(
+	ff,
+	fc,
+	bl,
+	it,
+	fs,
+	cl,
+	ul
 ) {
-    // luckysheet:ff(样式), fc(颜色), bl(粗体), it(斜体), fs(大小), cl(删除线), ul(下划线)
-    var luckyToExcel = {
-        0: '微软雅黑',
-        1: '宋体(Song)',
-        2: '黑体(ST Heiti)',
-        3: '楷体(ST Kaiti)',
-        4: '仿宋(ST FangSong)',
-        5: '新宋体(ST Song)',
-        6: '华文新魏',
-        7: '华文行楷',
-        8: '华文隶书',
-        9: 'Arial',
-        10: 'Times New Roman ',
-        11: 'Tahoma ',
-        12: 'Verdana',
-        num2bl: function (num) {
-            return num === 0 ? false : true
-        }
-    }
-    // 出现Bug,导入的时候ff为luckyToExcel的val
+	// luckysheet:ff(样式), fc(颜色), bl(粗体), it(斜体), fs(大小), cl(删除线), ul(下划线)
+	var luckyToExcel = {
+		0: '微软雅黑',
+		1: '宋体(Song)',
+		2: '黑体(ST Heiti)',
+		3: '楷体(ST Kaiti)',
+		4: '仿宋(ST FangSong)',
+		5: '新宋体(ST Song)',
+		6: '华文新魏',
+		7: '华文行楷',
+		8: '华文隶书',
+		9: 'Arial',
+		10: 'Times New Roman ',
+		11: 'Tahoma ',
+		12: 'Verdana',
+		num2bl: function(num) {
+			return num === 0 ? false : true
+		}
+	}
+	// 出现Bug,导入的时候ff为luckyToExcel的val
 
-    let font = {
-        name: typeof ff === 'number' ? luckyToExcel[ff || 0] : ff || 0,
-        family: 1,
-        size: fs || 10,
-        color: { argb: (fc || '#000000').replace('#', '') },
-        bold: luckyToExcel.num2bl(bl || 0),
-        italic: luckyToExcel.num2bl(it || 0),
-        underline: luckyToExcel.num2bl(ul || 0),
-        strike: luckyToExcel.num2bl(cl || 0)
-    }
+	let font = {
+		name: typeof ff === 'number' ? luckyToExcel[ff || 0] : ff || 0,
+		family: 1,
+		size: fs || 10,
+		color: {
+			argb: (fc || '#000000').replace('#', '')
+		},
+		bold: luckyToExcel.num2bl(bl || 0),
+		italic: luckyToExcel.num2bl(it || 0),
+		underline: luckyToExcel.num2bl(ul || 0),
+		strike: luckyToExcel.num2bl(cl || 0)
+	}
 
-    return font
+	return font
 }
 
-var alignmentConvert = function (
-    vt,
-    ht,
-    tb,
-    tr
+var alignmentConvert = function(
+	vt,
+	ht,
+	tb,
+	tr
 ) {
-    // luckysheet:vt(垂直), ht(水平), tb(换行), tr(旋转)
-    var luckyToExcel = {
-        vertical: {
-            0: 'middle',
-            1: 'top',
-            2: 'bottom',
-            default: 'top'
-        },
-        horizontal: {
-            0: 'center',
-            1: 'left',
-            2: 'right',
-            default: 'left'
-        },
-        wrapText: {
-            0: false,
-            1: false,
-            2: true,
-            default: false
-        },
-        textRotation: {
-            0: 0,
-            1: 45,
-            2: -45,
-            3: 'vertical',
-            4: 90,
-            5: -90,
-            default: 0
-        }
-    }
+	// luckysheet:vt(垂直), ht(水平), tb(换行), tr(旋转)
+	var luckyToExcel = {
+		vertical: {
+			0: 'middle',
+			1: 'top',
+			2: 'bottom',
+			default: 'top'
+		},
+		horizontal: {
+			0: 'center',
+			1: 'left',
+			2: 'right',
+			default: 'left'
+		},
+		wrapText: {
+			0: false,
+			1: false,
+			2: true,
+			default: false
+		},
+		textRotation: {
+			0: 0,
+			1: 45,
+			2: -45,
+			3: 'vertical',
+			4: 90,
+			5: -90,
+			default: 0
+		}
+	}
 
-    let alignment = {
-        vertical: luckyToExcel.vertical[vt || 'default'],
-        horizontal: luckyToExcel.horizontal[ht || 'default'],
-        wrapText: luckyToExcel.wrapText[tb || 'default'],
-        textRotation: luckyToExcel.textRotation[tr || 'default']
-    }
-    return alignment
+	let alignment = {
+		vertical: luckyToExcel.vertical[vt || 'default'],
+		horizontal: luckyToExcel.horizontal[ht || 'default'],
+		wrapText: luckyToExcel.wrapText[tb || 'default'],
+		textRotation: luckyToExcel.textRotation[tr || 'default']
+	}
+	return alignment
 }
 
-var borderConvert = function (borderType, style, color) {
-    // 对应luckysheet的config中borderinfo的的参数
-    if (!borderType) {
-        return {}
-    }
-    var luckyToExcel = {
-        type: {
-            'border-all': 'all',
-            'border-top': 'top',
-            'border-right': 'right',
-            'border-bottom': 'bottom',
-            'border-left': 'left'
-        },
-        style: {
-            0: 'none',
-            1: 'thin',
-            2: 'hair',
-            3: 'dotted',
-            4: 'dashDot', // 'Dashed',
-            5: 'dashDot',
-            6: 'dashDotDot',
-            7: 'double',
-            8: 'medium',
-            9: 'mediumDashed',
-            10: 'mediumDashDot',
-            11: 'mediumDashDotDot',
-            12: 'slantDashDot',
-            13: 'thick'
-        }
-    }
-    let template = {
-        style: luckyToExcel.style[style || 1],
-        color: { argb: (color || '#000').replace('#', '') }
-    }
-    let border = {}
-    if (luckyToExcel.type[borderType] === 'all') {
-        border['top'] = template
-        border['right'] = template
-        border['bottom'] = template
-        border['left'] = template
-    } else {
-        border[luckyToExcel.type[borderType]] = template
-    }
-    // console.log('border', border)
-    return border
+var borderConvert = function(borderType, style, color) {
+	// 对应luckysheet的config中borderinfo的的参数
+	if (!borderType) {
+		return {}
+	}
+	var luckyToExcel = {
+		type: {
+			'border-all': 'all',
+			'border-top': 'top',
+			'border-right': 'right',
+			'border-bottom': 'bottom',
+			'border-left': 'left'
+		},
+		style: {
+			0: 'none',
+			1: 'thin',
+			2: 'hair',
+			3: 'dotted',
+			4: 'dashDot', // 'Dashed',
+			5: 'dashDot',
+			6: 'dashDotDot',
+			7: 'double',
+			8: 'medium',
+			9: 'mediumDashed',
+			10: 'mediumDashDot',
+			11: 'mediumDashDotDot',
+			12: 'slantDashDot',
+			13: 'thick'
+		}
+	}
+	let template = {
+		style: luckyToExcel.style[style || 1],
+		color: {
+			argb: (color || '#000').replace('#', '')
+		}
+	}
+	let border = {}
+	if (luckyToExcel.type[borderType] === 'all') {
+		border['top'] = template
+		border['right'] = template
+		border['bottom'] = template
+		border['left'] = template
+	} else {
+		border[luckyToExcel.type[borderType]] = template
+	}
+	return border
 }
 
 function addborderToCell(borders, row_index, col_index) {
-    let border = {}
-    var luckyExcel = {
-        type: {
-            l: 'left',
-            r: 'right',
-            b: 'bottom',
-            t: 'top'
-        },
-        style: {
-            0: 'none',
-            1: 'thin',
-            2: 'hair',
-            3: 'dotted',
-            4: 'dashDot', // 'Dashed',
-            5: 'dashDot',
-            6: 'dashDotDot',
-            7: 'double',
-            8: 'medium',
-            9: 'mediumDashed',
-            10: 'mediumDashDot',
-            11: 'mediumDashDotDot',
-            12: 'slantDashDot',
-            13: 'thick'
-        }
-    }
-    // console.log('borders', borders)
-    for (var bor in borders) {
-        console.log(bor)
-        if (borders[bor].color.indexOf('rgb') === -1) {
-            border[luckyExcel.type[bor]] = {
-                style: luckyExcel.style[borders[bor].style],
-                color: { argb: borders[bor].color.replace('#', '') }
-            }
-        } else {
-            border[luckyExcel.type[bor]] = {
-                style: luckyExcel.style[borders[bor].style],
-                color: { argb: borders[bor].color }
-            }
-        }
-    }
+	let border = {}
+	var luckyExcel = {
+		type: {
+			l: 'left',
+			r: 'right',
+			b: 'bottom',
+			t: 'top'
+		},
+		style: {
+			0: 'none',
+			1: 'thin',
+			2: 'hair',
+			3: 'dotted',
+			4: 'dashDot', // 'Dashed',
+			5: 'dashDot',
+			6: 'dashDotDot',
+			7: 'double',
+			8: 'medium',
+			9: 'mediumDashed',
+			10: 'mediumDashDot',
+			11: 'mediumDashDotDot',
+			12: 'slantDashDot',
+			13: 'thick'
+		}
+	}
+	for (var bor in borders) {
+		if (borders[bor].color.indexOf('rgb') === -1) {
+			border[luckyExcel.type[bor]] = {
+				style: luckyExcel.style[borders[bor].style],
+				color: {
+					argb: borders[bor].color.replace('#', '')
+				}
+			}
+		} else {
+			border[luckyExcel.type[bor]] = {
+				style: luckyExcel.style[borders[bor].style],
+				color: {
+					argb: borders[bor].color
+				}
+			}
+		}
+	}
 
-    return border
+	return border
 }
 
 function createCellPos(n) {
-    let ordA = 'A'.charCodeAt(0)
+	let ordA = 'A'.charCodeAt(0)
 
-    let ordZ = 'Z'.charCodeAt(0)
-    let len = ordZ - ordA + 1
-    let s = ''
-    while (n >= 0) {
-        s = String.fromCharCode((n % len) + ordA) + s
+	let ordZ = 'Z'.charCodeAt(0)
+	let len = ordZ - ordA + 1
+	let s = ''
+	while (n >= 0) {
+		s = String.fromCharCode((n % len) + ordA) + s
 
-        n = Math.floor(n / len) - 1
-    }
-    return s
-}
+		n = Math.floor(n / len) - 1
+	}
+	return s
+}

+ 8 - 8
public/static/views/ecClubWork.html

@@ -109,12 +109,10 @@
                     window.luckysheet.destroy();
                 }
 				var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
-				var r = window.top.location.href.split('?')[1];
+				var r = window.top.location.href.split('id=')[1];
 				var url = '/market/cbusiDeploy/load';
                 util.ajaxJson("数据加载中", ctx + url, {
-                    "id": id ? id : '',
-                    "opMonth": "",
-                    "sts": '0',
+                    "id": r ? r : '',
                 }, function (res) {
                     if (res.result == 0) {
                         // 查看和修改时 下拉框赋值
@@ -214,18 +212,20 @@
                 // 保存
                 $('#saves').off("click").click(function () {
                     //  当前工作表名
+					var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
+					var r = window.top.location.href.split('id=')[1];
                     var sheetName = luckysheet.getSheet().name
                     var data = luckysheet.getSheet(sheetName)
-                    data.id = id ? id : excelId
+                    data.id = r ? r : excelId
                     data.fileName = luckysheet.getWorkbookName()
                     data.powerFlag = powerFlag
                     data.powerFlagDev = powerFlag == '0' ? '开' : '关'
                     data.tempType = tempType
                     data.colHeaderNum = 1
                     data.tempTypeDesc = ''
-					var urlsave = '/market/cbusiDeploy/save';
-					var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
-					var r = window.top.location.href.split('?')[1];
+                    data.title = luckysheet.getWorkbookName()
+					var urlsave = ''
+					r?urlsave = '/market/cbusiDeploy/save':urlsave = '/market/cbusiDeploy/add'
                     util.ajaxJson("正在加载中", ctx + urlsave, {
                         data: data
                     }, function (data) {

+ 2 - 0
public/static/views/weeklyReport.html

@@ -253,8 +253,10 @@
 					}
 					if (usercho == userId) {
 						$('#saves').show()
+						$('#imports').show()
 					} else {
 						$('#saves').hide()
+						$('#imports').hide()
 					}
 					initHandel()
 				}

+ 1 - 1
src/components/p-menu.vue

@@ -5,7 +5,7 @@
 		<el-menu class="el-menu-vertical-demo" :default-active="getDefaultActive" router :collapse="collapse"
 			@open="handleOpen" @close="handleClose" active-text-color="#71A6FD">
 			<div class="menu-logo" style="height: 60px; line-height: 60px">
-				<img width="95%" style="text-align: center; vertical-align: middle" src="../assets/newlogo1.png"
+				<img width="95%" style="text-align: center; vertical-align: middle" src="../assets/newlogo.png"
 					alt="" />
 			</div>
 			<!-- 引入组件 -->

+ 1 - 1
src/components/upload.vue

@@ -46,7 +46,7 @@
             deforeUp(file) {
                 const isLt2M = file.size / 1024 / 1024 < 100;
                 if (!isLt2M) {
-                    this.$message.error('上传文件大小不能超过 100MB!');
+                    this.$message.error('上传文件大小不能超过 20MB!');
                     return false
                 }
                 if(this.fileInfo.type == 'img'){

+ 25 - 14
src/pages/main/competitor/addCompetitor.vue

@@ -70,9 +70,13 @@
                                 <span><i></i>酬金</span>
                                 <el-input v-model="infolist.remFee" placeholder="请输入酬金金额"></el-input>
                             </el-form-item>
-                            <el-form-item>
-                                <span><i></i>销售渠道</span>
-                                <el-input v-model="infolist.saleChnl" placeholder="请输入销售渠道"></el-input>
+                            <el-form-item prop="saleChnl">
+                                <span><i>*</i>销售渠道</span>
+								<el-select :popper-append-to-body="false" v-model="infolist.saleChnl" placeholder="请选择销售渠道">
+								    <el-option v-for="item in saleChnlopt" :key="item.dataName" :label="item.dataName"
+								        :value="item.dataName">
+								    </el-option>
+								</el-select>
                             </el-form-item>
                         </div>
                         <div class="info-line">
@@ -85,16 +89,7 @@
                                 <el-input v-model="infolist.monthSale" placeholder="请输入月销量"></el-input>
                             </el-form-item>
                         </div>
-                      <!--  <div class="info-line">
-                            <el-form-item prop="opName">
-                                <span><i>*</i>上报人</span>
-                                <el-input v-model="infolist.opName" placeholder="请输入上报人姓名" disabled="disabled"></el-input>
-                            </el-form-item>
-                            <el-form-item prop="contactPhone">
-                                <span><i>*</i>联系电话</span>
-                                <el-input v-model="infolist.contactPhone" placeholder="请输入联系电话" disabled="disabled"></el-input>
-                            </el-form-item>
-                        </div> -->
+   
                         <el-form-item prop="taffiffContent" class="info-line online">
                             <span><i>*</i>资费内容</span>
                             <el-input v-model="infolist.taffiffContent" placeholder="请输入资费内容" type="textarea" :rows="3"></el-input>
@@ -315,7 +310,7 @@
                     }],
                     saleChnl: [{
                         required: true,
-                        trigger: 'blur',
+                        trigger: 'change',
                         validator: saleChnl
                     }],
                     monthSale: [{
@@ -346,6 +341,7 @@
                 options3: [],
                 options4: [],
                 options5: [],
+                saleChnlopt: [],
                 fullscreen: false,
                 fileList: [],
                 fileLists: [],
@@ -448,6 +444,20 @@
                     this.options5 = res.data;
                 });
             },
+			getsaleChnl() {
+                this.$http({
+                    url: "/market/cfgDataDict/queryList",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {
+                        dictCode: 'saleChnl'
+                    },
+                }).then((res) => {
+                    this.saleChnlopt = res.data;
+                });
+            },
             //添加、取消
             submitList(v) {
                 if (v === 1) {
@@ -573,6 +583,7 @@
             this.getListsf();
             this.getListwgxx();
             this.getListregion();
+            this.getsaleChnl();
             this.getUser();
         },
         watch:{

+ 22 - 2
src/pages/main/competitor/changeCompet.vue

@@ -72,7 +72,11 @@
                             </el-form-item>
                             <el-form-item>
                                 <span>销售渠道</span>
-                                <el-input v-model="infolist.saleChnl" placeholder="销售渠道"></el-input>
+                                <el-select :popper-append-to-body="false" v-model="infolist.saleChnl" placeholder="请选择销售渠道">
+                                    <el-option v-for="item in saleChnlopt" :key="item.dataName" :label="item.dataName"
+                                        :value="item.dataName">
+                                    </el-option>
+                                </el-select>
                             </el-form-item>
                         </div>
                         <div class="info-line">
@@ -348,7 +352,7 @@
                     }],
                     saleChnl: [{
                         required: true,
-                        trigger: 'blur',
+                        trigger: 'change',
                         validator: saleChnl
                     }],
                     monthSale: [{
@@ -381,6 +385,7 @@
                 options3: [],
                 options4: [],
                 options5: [],
+                saleChnlopt: [],
                 fullscreen: false,
                 fileList: [],
                 fileLists: [],
@@ -528,6 +533,20 @@
                     this.options5 = res.data;
                 });
             },
+			getsaleChnl() {
+			    this.$http({
+			        url: "/market/cfgDataDict/queryList",
+			        method: "post",
+			        headers: {
+			            "Content-Type": "application/json",
+			        },
+			        data: {
+			            dictCode: 'saleChnl'
+			        },
+			    }).then((res) => {
+			        this.saleChnlopt = res.data;
+			    });
+			},
             //添加、取消
             submitList(v) {
                 if (v === 1) {
@@ -637,6 +656,7 @@
             this.getListsf();
             this.getListwgxx();
             this.getListregion();
+            this.getsaleChnl();
             this.getInfo(this.$route.query.id);
         }
     }

+ 1 - 0
src/pages/main/competitor/competitorInfo.vue

@@ -293,6 +293,7 @@
                         }
                     });
                 } else {
+					data.id = this.tableData.id;
                     this.$http({
                         url: "/market/cwcompetitor/write2Doc",
                         method: "post",

+ 1 - 0
src/pages/main/competitor/index.vue

@@ -420,6 +420,7 @@
                         monthSale: v.monthSale,
                         violationContent: v.violationContent,
                         recordRegionName: v.recordRegionName,
+						id: v.id,
                     }
                     this.$http({
                         url: "/market/cwcompetitor/write2Doc",

+ 10 - 0
src/pages/main/ecClubWork/checkclubwork.vue

@@ -0,0 +1,10 @@
+<template>
+  <div class="container">
+    <iframe
+      height="100%"
+      width="100%"
+      src="/static/views/ecClubWork.html"
+      frameborder="0"
+    ></iframe>
+  </div>
+</template>

+ 238 - 8
src/pages/main/ecClubWork/index.vue

@@ -1,10 +1,240 @@
 <template>
-  <div class="container">
-    <iframe
-      height="100%"
-      width="100%"
-      src="/static/views/ecClubWork.html"
-      frameborder="0"
-    ></iframe>
-  </div>
+
+	<fullscreen :fullscreen.sync="fullscreen" class="container">
+		<div class="container-box">
+			<toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
+			<div style="overflow: hidden;margin: 10px 0;" v-if="exa">
+				<el-button class="btn-check" style="float: right;" size="medium" type="primary" @click="dialogCheck(2)">
+					添加
+				</el-button>
+			</div>
+			<div class="tabbox">
+				<el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+					tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+					<el-table-column prop="deployName" label="清单表名称">
+					</el-table-column>
+					<el-table-column prop="opName" label="创建姓名">
+					</el-table-column>
+					<el-table-column prop="opNo" label="创建工号">
+					</el-table-column>
+					<el-table-column prop="opTime" label="创建时间">
+					</el-table-column>
+					<el-table-column label="操作" width="160px" align="center">
+						<template slot-scope="scope">
+							<el-button size="mini" type="primary" @click="dialogCheck(1,scope.row)">查看</el-button>
+						</template>
+					</el-table-column>
+				</el-table>
+				<el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+					:total="total">
+				</el-pagination>
+			</div>
+		</div>
+	</fullscreen>
+
 </template>
+<script>
+	import mySearch from "../../../components/search.vue";
+	import myUpload from '../../../components/upload'
+	import uploadDown from '../../../components/uploadDown'
+	import myMessage from "../../../components/myMessage.vue"
+	import toolList from '../../../components/toolList'
+
+	export default {
+		components: {
+			mySearch,
+			myUpload,
+			uploadDown,
+			myMessage,
+			toolList
+		},
+		data() {
+			return {
+				tooltit: '会议部署工作清单',
+				fullscreen: false,
+				total: 0,
+				pageSize: 1,
+				tableData: [{}],
+				dialogStatus: false,
+				disableStatus: false,
+				titname: '',
+				infolist: {},
+				userInfo: {},
+				params: {},
+				centerDialogVisible: false,
+				messTit: '',
+				delid: '',
+				loading: false,
+				loadinged: false,
+				exa: false
+			}
+		},
+		methods: {
+			//获取列表
+			getList(v, n) {
+				this.pageSize = n;
+				let _this = this;
+				this.loading = true;
+				this.tableData = [];
+				this.$http({
+					url: "/market/busiDeploy/queryPage",
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+						"page": '{"pageNo":"' + n + '","pageSize":"10"}'
+					},
+					data: v,
+				}).then((res) => {
+					console.log(res)
+					this.tableData = res.data.data;
+					this.total = res.data.totalRecord;
+					this.loading = false;
+				});
+			},
+			// 分页
+			currchange(v) {
+				this.pageSize = v;
+				this.getList(this.params, this.pageSize);
+			},
+			//申请
+			dialogCheck(v, n) {
+				if (v == 1) {
+					this.$router.push({
+						path: '/checkclubwork?id=' + n.id,
+					});
+					this.setabList('会议部署工作清单', '/checkclubwork?id=' + n.id);
+				} else {
+					this.$router.push({
+						path: '/checkclubwork',
+					});
+					this.setabList('会议部署工作清单', '/checkclubwork');
+				}
+			},
+			setabList(n, p) {
+				let params = {
+					children: "",
+					name: n,
+					rountPath: p,
+					target: "_self",
+				};
+				for (let i = 0; i < this.$store.state.tabList.length; i++) {
+					if (this.$store.state.tabList[i].name === params.name) {
+						this.$store.state.tabList[i] = params;
+					}
+				}
+				let set = new Set([...this.$store.state.tabList, params]);
+				set.add(params);
+				this.$store.commit("setDefaultActive", params.rountPath);
+				this.$store.commit("setTabList", Array.from(set));
+			},
+			//功能栏
+			iconCli(v) {
+				if (v === 1) {
+					this.getList(this.params, this.pageSize);
+				}
+				if (v === 2) {
+					this.fullscreen = !this.fullscreen
+				}
+			},
+			ctrlbtn() {
+				let menus = JSON.parse(window.sessionStorage.childrenMenus);
+				for (let i = 0; i < menus.length; i++) {
+					if (menus[i].jspUrl === '/ecClubWorkexa' && menus[i].systemflag === '1') {
+						this.exa = true;
+						return
+					}
+				}
+			},
+			getUser() {
+				let menus = JSON.parse(window.sessionStorage.menus);
+				this.ctrlbtn(menus);
+				this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+				this.infolist = {
+					opNo: '',
+					opName: '',
+				};
+				this.infolist.opNo = this.userInfo.loginNo;
+				this.infolist.opName = this.userInfo.loginName;
+
+			}
+		},
+		mounted() {
+			this.getList({}, 1);
+			this.getUser();
+		},
+		created() {
+
+		}
+	}
+</script>
+<style scoped lang="scss">
+	.onetab {
+		margin-bottom: 20px;
+		padding: 0 20px;
+	}
+
+	.titbox {
+		div {
+			float: right;
+
+			i {
+				font-size: 22px;
+				margin-left: 20px;
+				cursor: pointer;
+			}
+		}
+	}
+
+	.tabbox {
+		margin-top: 15px;
+	}
+
+	.pageBox {
+		text-align: right;
+		margin-top: 10px;
+	}
+
+	.info-line {
+		width: 100%;
+		display: block;
+		padding-left: 20px;
+
+		div {
+			width: 50%;
+			display: inline-block;
+		}
+
+		span {
+			width: 80px;
+			display: inline-block;
+			text-align: left;
+
+			i {
+				color: red;
+				display: inline-block;
+				padding-right: 5px;
+			}
+		}
+
+		.el-select,
+		.el-input {
+			width: calc(100% - 100px);
+		}
+	}
+
+	.online {
+		width: 100%;
+
+		.el-select {
+			width: calc(100% - 100px);
+		}
+
+		span {
+			vertical-align: top;
+		}
+
+		.el-textarea {
+			width: calc(100% - 100px);
+		}
+	}
+</style>

+ 2 - 1
src/pages/main/excel/export.js

@@ -115,7 +115,8 @@ var setStyleAndValue = function (cellArr, worksheet) {
                     value += arr.v
                 })
             } else {
-                value = cell.v
+				console.log('0603')
+                value = cell.m
             }
             //  style 填入到_value中可以实现填充色
             let letter = createCellPos(columnid)

+ 388 - 0
src/pages/main/groupMSsend/groupAdd.vue

@@ -0,0 +1,388 @@
+<template>
+	<div>
+		<div class="container">
+			<el-form :model="infolist" ref="infolist" :rules="rules" class="container-box">
+				<h2 style="display: block;margin-bottom: 20px;">营销类短信群发申请</h2>
+				<div style="height: calc(100% - 160px);overflow-y: scroll;">
+					<div class="info-line">
+						<el-form-item prop="terminalTypeName">
+							<span>文件名称</span>
+							<el-input v-model="infolist.tit" placeholder="文件名称" :disabled="disableStatus"></el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>申请流程</span>
+							<el-select clearable v-model="terminal" placeholder="申请流程">
+								<el-option v-for="items in options" :key="items.procId" :label="items.procName"
+									:value="items.procId">
+								</el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item>
+							<span>信息类型</span>
+							<el-input v-model="infolist.xxlx" placeholder="信息类型" :disabled="disableStatus"></el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>项目分类</span>
+							<el-input v-model="infolist.xmfl" placeholder="项目分类" :disabled="disableStatus"></el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>发送时间</span>
+							<el-date-picker  style="display: inline-flex;width: calc(100% - 100px);" v-model="infolist.fssj" type="daterange" placeholder="发送时间">
+							</el-date-picker>
+						</el-form-item>
+						<el-form-item>
+							<span>公务卡</span>
+							<el-input v-model="infolist.gwk" placeholder="是否已剔除公务卡" :disabled="disableStatus"></el-input>
+						</el-form-item>
+					</div>
+			       <el-form-item class="info-line online">
+						<span>背景说明</span>
+						<el-input v-model="infolist.bjsm" placeholder="背景说明" type="textarea" :rows="3"></el-input>
+					</el-form-item>
+					<el-form-item class="info-line online">
+						<span>文件内容</span>
+						<el-input v-model="infolist.wjnr" placeholder="补充说明" type="textarea" :rows="3"></el-input>
+					</el-form-item>
+					<div style="padding-left: 80px">
+						<myUpload @uploadBack="uploadBack" :fileInfo="fileInfo" :fileList="fileInfo.fileList">
+						</myUpload>
+					</div>
+				</div>
+				<div class="t-footer">
+					<el-button type="primary" @click="dialogCli(2)">确 定</el-button>
+					<el-button @click="dialogCli(1)">取 消</el-button>
+				</div>
+			</el-form>
+		</div>
+
+	</div>
+</template>
+<script>
+	import mySearch from "../../../components/search.vue";
+	import myUpload from "../../../components/upload.vue";
+
+	export default {
+		components: {
+			mySearch,
+			myUpload
+		},
+		data() {
+			const terminalTypeName = (rule, value, callback) => {
+				if (!this.infolist.tit) {
+					callback(new Error('不能为空'))
+				} else {
+					callback()
+				}
+			}
+			return {
+				rules: {
+					terminalTypeName: [{
+						required: true,
+						trigger: 'blur',
+						validator: terminalTypeName
+					}],
+				},
+				disableStatus: false,
+				infolist: {},
+				terminal: '',
+				userInfo: {},
+				params: {},
+				attList: [],
+				options: [],
+				overtime: '',
+				fileInfo: {
+				    limit: 5,
+				    url: '/bpm/api/upload',
+				    fileList: []
+				},
+			}
+		},
+		methods: {
+			//添加
+			dialogCli(v) {
+				if (v === 1) {
+					this.infolist = {};
+					return
+				}
+				let _this = this;
+				let info = {};
+				this.$http({
+					url: "/sysmgr/csysuserinfo/queryUserListByLoginNoAndDuty",
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+						"page": '{"pageNo":"' + 1 + '","pageSize":"100"}'
+					},
+					data: {"duty":"7"},
+				}).then((res) => {
+					this.infolist.secNo = res.data[0].loginNoStr;
+					this.infolist.secName = res.data[0].loginNameStr;
+					info.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD HH:mm:ss");
+					info.opNo = this.userInfo.loginNo;
+					info.opName = this.userInfo.loginName;
+					info.woTitle = this.infolist.tit;
+					info.params = {};
+					info.params.terminalRes = this.infolist;
+					info.procId = this.terminal;
+					for (let i = 0; i < this.options.length; i++) {
+						if (this.terminal == this.options[i].procId) {
+							info.procName = this.options[i].procName;
+							info.procVersion = this.options[i].procVersion;
+						}
+					}
+					let attList = [];
+					for (let i = 0; i < this.attList.length; i++) {
+					    attList.push({
+					        id: this.attList[i].id,
+					        fileCode: this.attList[i].fileCode,
+					        fileName: this.attList[i].fileName,
+					        opName: this.attList[i].opName,
+					        opNo: this.attList[i].opNo,
+					        opTime: this.attList[i].opTime,
+					        woNo: this.infolist.woNo,
+					        attchFileId: this.attList[i].attchFileId,
+					    });
+					}
+					info.params.attList = JSON.stringify(attList)
+					info.params.terminalRes = JSON.stringify(info.params.terminalRes);
+					this.submitInfo("/bpm/api/startProc", info);
+				});
+			},
+			submitInfo(u, v) {
+				let _this = this;
+				this.$refs.infolist.validate(valid => {
+					if (valid) {
+						this.$http({
+							url: u,
+							method: "post",
+							headers: {
+								"Content-Type": "application/json",
+							},
+							data: v,
+						}).then((res) => {
+							if (res.data.result === 1) {
+								_this.$message({
+									message: res.data.desc,
+									type: 'error'
+								});
+							} else {
+								_this.$message({
+									message: '成功',
+									type: 'success'
+								});
+								_this.dialogCli(1);
+							}
+
+						});
+					}
+				})
+			},
+			//流程
+			getTermianl() {
+				this.$http({
+					url: "/bpm/api/queryBpmProcList",
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+						"page": '{"pageNo":"' + 1 + '","pageSize":"100"}'
+					},
+					data: {},
+				}).then((res) => {
+					this.options = res.data.data;
+				});
+			},
+			getUser() {
+				this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+			},
+			uploadBack(v) {
+				this.attList = v;
+			},	
+		},
+		mounted() {
+			this.getTermianl();
+			this.getUser();
+		},
+		created() {
+
+		}
+	}
+</script>
+<style scoped lang="scss">
+	.img-box {
+		height: calc(100vh - 240px);
+		overflow-y: scroll;
+
+		.boximg {
+			display: flex;
+			flex-wrap: wrap;
+			margin-top: 20px;
+
+			div {
+				display: inline-block;
+				width: 18%;
+				margin-right: 2%;
+				margin-bottom: 20px;
+				overflow: hidden;
+				border: 1px solid #ddd;
+				border-radius: 3px;
+				background: #fff;
+				position: relative;
+				height: 100px;
+
+				img {
+					width: 100%;
+					position: absolute;
+					top: 0;
+					bottom: 0;
+					margin: auto;
+					// height: 100%;
+				}
+
+			}
+		}
+	}
+
+	.boximgc {
+		display: flex;
+		flex-wrap: wrap;
+		width: calc(100% - 80px) !important;
+		margin-left: 80px;
+
+		div {
+			display: inline-block;
+			width: 18% !important;
+			margin-right: 2%;
+			margin-bottom: 20px;
+			overflow: hidden;
+			border: 1px solid #ddd;
+			border-radius: 3px;
+			background: #fff;
+			position: relative;
+			height: 100px;
+
+			img {
+				width: 100%;
+				position: absolute;
+				top: 0;
+				bottom: 0;
+				margin: auto;
+				// height: 100%;
+			}
+
+		}
+	}
+
+	.typebox {
+		div {
+			border: 1px solid #ddd;
+			border-top: transparent;
+
+			span {
+				display: inline-block;
+				width: 20%;
+				line-height: 30px;
+				padding: 10px;
+				vertical-align: top;
+			}
+
+			.big {
+				width: 35%;
+				// background: #f4f4f4;
+			}
+
+			.small {
+				width: 5%;
+				text-align: center;
+				// border-right: 1px solid #ddd;
+			}
+
+			.gys {
+				width: 40%;
+			}
+		}
+	}
+
+	.t-footer {
+		text-align: right;
+		padding-right: 20px;
+		margin-top: 20px;
+	}
+
+	.onetab {
+		padding: 20px;
+		height: calc(100% - 180px);
+	}
+
+	.titbox {
+		div {
+			float: right;
+
+			i {
+				font-size: 22px;
+				margin-left: 20px;
+				cursor: pointer;
+			}
+		}
+	}
+
+	.tabbox {
+		margin-top: 15px;
+	}
+
+	.pageBox {
+		text-align: right;
+		margin-top: 10px;
+	}
+
+	.info-line {
+		width: 100%;
+		display: block;
+		padding-left: 20px;
+
+		div {
+			width: 50%;
+			display: inline-block;
+		}
+
+		span {
+			width: 80px;
+			display: inline-block;
+			text-align: left;
+
+			i {
+				color: red;
+				display: inline-block;
+				padding-right: 5px;
+			}
+		}
+
+		.el-select,
+		.el-input {
+			width: calc(100% - 100px);
+		}
+
+		.el-checkbox-group {
+			border: 1px solid #ddd;
+			padding-left: 20px;
+			height: 40px;
+			width: calc(100% - 100px);
+			border-radius: 5px;
+		}
+	}
+
+	.online {
+		width: 100%;
+
+		.el-select {
+			width: calc(100% - 100px);
+		}
+
+		span {
+			vertical-align: top;
+		}
+
+		.el-textarea {
+			width: calc(100% - 100px);
+		}
+	}
+</style>

+ 521 - 0
src/pages/main/groupMSsend/index.vue

@@ -0,0 +1,521 @@
+<template>
+	<fullscreen :fullscreen.sync="fullscreen" class="container">
+		<div class="container-box">
+			<toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
+			<div style="overflow: hidden;">
+				<el-button style="float: right;margin-top: 10px;" type="primary" @click="dialogCheck(3)">添加</el-button>
+			</div>
+			<div class="tabbox">
+				<el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+					tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+					<el-table-column prop="woTitle" label="业务名称">
+					</el-table-column>
+					<<!-- el-table-column prop="opNo" label="申请工号">
+						</el-table-column> -->
+						<el-table-column prop="opName" label="申请姓名">
+						</el-table-column>
+						<el-table-column prop="createTime" label="申请时间">
+						</el-table-column>
+						<el-table-column prop="stsDesc" label="状态">
+						</el-table-column>
+						<el-table-column label="操作" width="120px" align="center">
+							<template slot-scope="scope">
+								<el-button size="mini" type="primary" @click="dialogCheck(1,scope.row)">查看</el-button>
+								<el-button size="mini" type="danger" v-if="scope.row.sts != 1"
+									@click="dialogCheck(2,scope.row)">审批</el-button>
+								<!-- <el-button size="mini" type="danger" @click="delLine(scope.row)">删除</el-button> -->
+							</template>
+						</el-table-column>
+				</el-table>
+				<el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+					:total="total">
+				</el-pagination>
+			</div>
+		</div>
+
+		<el-dialog :title="titname" :visible.sync="dialogStatus" width="50%" :destroy-on-close="true"
+			:modal-append-to-body="false" :close-on-click-modal="false" :before-close="closedia" :fullscreen="true">
+			<div v-loading="loadinged">
+				<el-form :model="infolist" ref="infolist" style="height: calc(100vh - 180px);overflow-y: scroll;">
+
+					<div class="info-line">
+						<el-form-item>
+							<span>文件名称</span>
+							<el-input v-model="infoApply.tit" placeholder="文件名称" disabled></el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>信息类型</span>
+							<el-input v-model="infoApply.xxlx" placeholder="信息类型" disabled></el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>项目分类</span>
+							<el-input v-model="infoApply.xmfl" placeholder="项目分类" disabled></el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>发送时间</span>
+							<el-date-picker style="display: inline-flex;width: calc(100% - 100px);" disabled
+								v-model="infoApply.fssj" type="daterange" placeholder="发送时间">
+							</el-date-picker>
+						</el-form-item>
+						<el-form-item>
+							<span>公务卡</span>
+							<el-input v-model="infoApply.gwk" placeholder="是否已剔除公务卡" disabled>
+							</el-input>
+						</el-form-item>
+					</div>
+					<el-form-item class="info-line online">
+						<span>背景说明</span>
+						<el-input v-model="infoApply.bjsm" placeholder="背景说明" type="textarea" :rows="3" disabled>
+						</el-input>
+					</el-form-item>
+					<el-form-item class="info-line online">
+						<span>文件内容</span>
+						<el-input v-model="infoApply.wjnr" placeholder="补充说明" type="textarea" :rows="3" disabled>
+						</el-input>
+					</el-form-item>
+					<div style="padding:0 20px 0 100px;margin-bottom: 20px;">
+						<uploadDown :datalist="datalist" :dialogStatus="uploadstatus"></uploadDown>
+					</div>
+					<el-form-item class="info-line online">
+						<span>审批说明</span>
+						<el-input v-model="infolist.remark" placeholder="审批说明" type="textarea" :rows="3"
+							:disabled="disableStatus">
+						</el-input>
+					</el-form-item>
+					<div style="margin-bottom: 20px;padding: 0 20px;">
+						<el-table class="com-table" ref="multipleTable" :data="rovaList" tooltip-effect="dark" size="small"
+							border style="width: 100%">
+							<el-table-column prop="procId" label="编号">
+							</el-table-column>
+							<el-table-column prop="taskName" label="环节">
+							</el-table-column>
+							<el-table-column prop="opName" label="处理人">
+							</el-table-column>
+							<el-table-column prop="opNo" label="处理人工号">
+							</el-table-column>
+							<el-table-column prop="createTime" label="处理时间">
+							</el-table-column>
+							<el-table-column prop="remark" label="备注">
+							</el-table-column>
+						</el-table>
+					</div>
+				</el-form>
+				<div slot="footer" class="dialog-footer myfooter">
+					<el-button v-if="!disableStatus && vision != '在线公司操作'" type="primary" @click="dialogCli(2)">同 意
+					</el-button>
+					<el-button v-if="!disableStatus && vision != '在线公司操作'" type="primary" @click="dialogCli(1)">驳 回
+					</el-button>
+					<el-button v-if="disableStatus" @click="dialogCli(3)">确 定</el-button>
+					<el-button @click="dialogCli(3)">取 消</el-button>
+				</div>
+			</div>
+		</el-dialog>
+
+		<myMessage :messTit='messTit' @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible"
+			v-if="centerDialogVisible"></myMessage>
+	</fullscreen>
+
+</template>
+<script>
+	import mySearch from "../../../components/search.vue";
+	import myMessage from "../../../components/myMessage.vue"
+	import toolList from '../../../components/toolList'
+	import myUpload from '../../../components/upload'
+	import uploadDown from '../../../components/uploadDown.vue'
+
+	export default {
+		components: {
+			mySearch,
+			myMessage,
+			toolList,
+			myUpload,
+			uploadDown
+		},
+		data() {
+			return {
+				searchList: [{
+					type: 'input',
+					tit: '业务名称',
+					value: '',
+					width: '98%',
+				}, ],
+				tooltit: '营销类短信群发',
+				fullscreen: false,
+				total: 0,
+				pageSize: 1,
+				tableData: [{}],
+				dialogStatus: false,
+				disableStatus: false,
+				titname: '',
+				infolist: {},
+				userInfo: {},
+				params: {},
+				centerDialogVisible: false,
+				messTit: '',
+				delid: '',
+				loading: false,
+				loadinged: false,
+				fileInfo: {
+					limit: 10,
+					url: '/market/cwo/upload',
+					fileList: []
+				},
+				infoApply: {},
+				rovaList: [],
+				vision: '',
+				datalist: {
+					url: '/bpm/api/download',
+					type: 1
+				},
+				uploadstatus: false,
+				rovaList:[]
+			}
+		},
+		methods: {
+			closedia() {
+				this.infolist = {};
+				this.dialogStatus = false;
+			},
+			//搜索数据
+			searchInfo(v) {
+				this.params = {};
+				v[0] ? this.params.tit = v[0] : '';
+				this.getList(this.params, this.pageSize);
+			},
+			//获取列表
+			getList(v, n) {
+				this.pageSize = n;
+				let _this = this;
+				this.loading = true;
+				v.procName = "营销类短信群发";
+				this.$http({
+					url: "/bpm/api/queryToDoAndFinishTaskList",
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+						"page": '{"pageNo":"' + n + '","pageSize":"10"}'
+					},
+					data: v,
+				}).then((res) => {
+					this.tableData = res.data.data;
+					this.total = res.data.data.totalRecord;
+					this.loading = false;
+				});
+			},
+			// 分页
+			currchange(v) {
+				this.pageSize = v;
+				this.getList(this.params, this.pageSize);
+			},
+			//申请
+			dialogCheck(v, n) {
+				this.dialogStatus = true;
+				this.infolist = Object.assign({}, n);
+				if (v === 1) {
+					this.titname = '查看';
+					this.disableStatus = true;
+				} else if (v === 2) {
+					this.titname = '修改';
+					this.disableStatus = false;
+				} else if (v === 3) {
+					this.$router.push({
+						path: '/groupAdd',
+					});
+					this.setabList('营销类短信群发申请', '/groupAdd');
+					return
+				}
+				this.$http({
+					url: '/bpm/api/taskInit',
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+					},
+					data: {
+						woNo: n.woNo
+					},
+				}).then((res) => {
+					// this.infolist = Object.assign({}, res.data);
+					this.infoApply = JSON.parse(res.data.params.terminalRes);
+					if (res.data.taskList[res.data.taskList.length - 1].taskName == '需求审批') {
+						this.vision = '需求审批';
+					} else if (res.data.taskList[res.data.taskList.length - 1].taskName == '在线公司操作') {
+						this.vision = '在线公司操作';
+					} else {
+						this.vision = '';
+					}
+					this.datalist.attList = JSON.parse(res.data.params.attList);
+					this.rovaList = res.data.taskList;
+					this.uploadstatus = true;
+				});
+			},
+			//添加
+			dialogCli(v) {
+				this.dialogStatus = false;
+				if (v === 3) {
+					return
+				}
+				let _this = this;
+				this.infolist.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD HH:mm:ss")
+				this.infolist.opNo = this.userInfo.loginNo;
+				this.infolist.opName = this.userInfo.loginName;
+				console.log(this.infolist)
+				if (v === 1) {
+					let params = {
+						dealType: '1',
+						dealTypeDesc: '打回',
+						procId: this.infolist.procId,
+						procVersion: this.infolist.procVersion,
+						remark: this.infolist.remark,
+						stepId: this.infolist.stepId,
+						taskId: this.infolist.taskId,
+						taskName: this.infolist.taskName,
+						opName: this.infolist.opName,
+						opNo: this.infolist.opNo,
+						opTime: this.infolist.opTime,
+						params: {
+							procExeCondiVal: '不同意',
+							terminalRes: JSON.stringify(this.infoApply)
+						},
+						woNo: this.infolist.woNo,
+					}
+					this.submitInfo("/bpm/api/submitTask", params);
+				} else if (v === 2) {
+					let param = {
+						dealType: '0',
+						dealTypeDesc: '提交',
+						procId: this.infolist.procId,
+						procVersion: this.infolist.procVersion,
+						remark: this.infolist.remark,
+						stepId: this.infolist.stepId,
+						taskId: this.infolist.taskId,
+						taskName: this.infolist.taskName,
+						opName: this.infolist.opName,
+						opNo: this.infolist.opNo,
+						opTime: this.infolist.opTime,
+						params: {
+							terminalRes: JSON.stringify(this.infoApply)
+						},
+						woNo: this.infolist.woNo,
+					}
+					if (this.vision == '需求审批') {
+						param.params.assigneeNo = this.infoApply.secNo;
+						param.params.assigneeName = this.infoApply.secName;
+					}
+					this.submitInfo("/bpm/api/submitTask", param);
+				}
+			},
+			submitInfo(u, v) {
+				let _this = this;
+				this.$http({
+					url: u,
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+					},
+					data: v,
+				}).then((res) => {
+					if (res.data.result === 1) {
+						_this.$message({
+							message: res.data.desc,
+							type: 'error'
+						});
+					} else {
+						_this.$message({
+							message: '成功',
+							type: 'success'
+						});
+						_this.getList(this.params, this.pageSize);
+					}
+
+				});
+			},
+
+			setabList(n, p) {
+				let params = {
+					children: "",
+					name: n,
+					rountPath: p,
+					target: "_self",
+				};
+				for (let i = 0; i < this.$store.state.tabList.length; i++) {
+					if (this.$store.state.tabList[i].name === params.name) {
+						this.$store.state.tabList[i] = params;
+					}
+				}
+				let set = new Set([...this.$store.state.tabList, params]);
+				set.add(params);
+				this.$store.commit("setDefaultActive", params.rountPath);
+				this.$store.commit("setTabList", Array.from(set));
+			},
+			closeMessage(v) {
+				this.centerDialogVisible = false;
+				let _this = this;
+				if (v === 1) {
+					_this.$http({
+						url: "/bpm/api/deleteBpmPrePlugin",
+						method: "post",
+						headers: {
+							"Content-Type": "application/json",
+						},
+						data: {
+							id: this.delid
+						},
+					}).then((res) => {
+						if (res.data.result === 1) {
+							_this.$message({
+								message: res.data.desc,
+								type: 'error'
+							});
+						} else {
+							_this.$message({
+								message: '删除成功',
+								type: 'success'
+							});
+							_this.getList(this.params, this.pageSize);
+						}
+					});
+				}
+			},
+			//删除
+			delLine(v) {
+				this.centerDialogVisible = true;
+				this.messTit = '即将删除此条数据, 是否删除?';
+				this.delid = v.id;
+			},
+			//文件返回值
+			uploadBack(v) {
+				console.log(v)
+			},
+			//功能栏
+			iconCli(v) {
+				if (v === 1) {
+					this.getList(this.params, this.pageSize);
+				}
+				if (v === 2) {
+					this.fullscreen = !this.fullscreen
+				}
+			},
+			getUser() {
+				this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+
+			}
+		},
+		mounted() {
+			this.getList({}, 1);
+			this.getUser();
+		},
+		created() {
+
+		}
+	}
+</script>
+<style scoped lang="scss">
+	.onetab {
+		margin-bottom: 20px;
+		padding: 0 20px;
+	}
+
+	.titbox {
+		div {
+			float: right;
+
+			i {
+				font-size: 22px;
+				margin-left: 20px;
+				cursor: pointer;
+			}
+		}
+	}
+
+	.tabbox {
+		margin-top: 15px;
+	}
+
+	.pageBox {
+		text-align: right;
+		margin-top: 10px;
+	}
+
+	.info-line {
+		width: 100%;
+		display: block;
+		padding-left: 20px;
+
+		div {
+			width: 50%;
+			display: inline-block;
+		}
+
+		span {
+			width: 80px;
+			display: inline-block;
+			text-align: left;
+
+			i {
+				color: red;
+				display: inline-block;
+				padding-right: 5px;
+			}
+		}
+
+		.el-select,
+		.el-input {
+			width: calc(100% - 100px);
+		}
+	}
+
+	.online {
+		width: 100%;
+
+		.el-select {
+			width: calc(100% - 100px);
+		}
+
+		span {
+			vertical-align: top;
+		}
+
+		.el-textarea {
+			width: calc(100% - 100px);
+		}
+	}
+
+	.adv-type {
+		margin-top: 20px;
+		display: flex;
+		justify-content: space-between;
+		flex-wrap: wrap;
+		// border: 1px solid #ddd;
+		border-radius: 5px;
+		padding: 20px;
+		box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
+
+		div {
+			width: 33%;
+			text-align: center;
+			height: 80px;
+			overflow: hidden;
+			min-width: 100px;
+			cursor: pointer;
+			padding-top: 10px;
+			margin: 10px 0;
+		}
+
+		div:hover {
+			background: #CFE8FC;
+			border-radius: 5px;
+		}
+
+		span {
+			width: 100%;
+			display: inline-block;
+			height: 40px;
+
+			// line-height: 40px;
+			i {
+				color: #0074D9;
+				font-size: 36px;
+			}
+		}
+	}
+</style>

+ 0 - 18
src/pages/main/terminal/components/advert.vue

@@ -389,24 +389,6 @@
                         },
                         woNo: this.infolist.woNo,
                     }
-                    // if (!this.cdisable) {
-                    //     param.params = {};
-                    //     param.params.terminalRes = [];
-                    //     for (let i = 0; i < this.infoApply.length; i++) {
-                    //         let terminal = {
-                    //             terminalNo: this.infoApply[i].terminalNo,
-                    //             terminalTypeName: this.infoApply[i].terminalTypeName,
-                    //             brandName: this.infoApply[i].brandName,
-                    //             modelType: this.infoApply[i].modelType,
-                    //             id: this.infoApply[i].id,
-                    //         }
-                    //         param.params.terminalRes.push(terminal)
-                    //     }
-                    //     param.params.reqBackTime = _this.$formatDate(_this.reqBackTime, "YYYY-MM-DD HH:mm:ss")
-                    //     param.params.procName = this.infolist.procName;
-                    //     param.params.terminalRes = JSON.stringify(param.params.terminalRes);
-                    // }
-                    // console.log(param)
                     this.submitInfo("/bpm/api/submitTask", param);
                 }
             },

+ 19 - 1
src/router/index.js

@@ -10,6 +10,18 @@ const routes = [{
     redirect: '/leader',
     children: [
         {
+            meta: { name:  '营销类短信群发', keepAlive: false },
+            path: '/groupMSsend',
+            name: 'groupMSsend',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/groupMSsend/index.vue'], resolve)
+        },
+		{
+            meta: { name:  '营销类短信群发申请', keepAlive: false },
+            path: '/groupAdd',
+            name: 'groupAdd',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/groupMSsend/groupAdd.vue'], resolve)
+        },
+		{
             meta: { name:  '公众号图文协推', keepAlive: false },
             path: '/officialAccount',
             name: 'officialAccount',
@@ -28,6 +40,12 @@ const routes = [{
             component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/ecClubWork/index.vue'], resolve)
         },
 		{
+            meta: { name:  '经分会部署工作', keepAlive: false },
+            path: '/checkclubwork',
+            name: 'checkclubwork',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/ecClubWork/checkclubwork.vue'], resolve)
+        },
+		{
             meta: { name:  '公众号图文协推资料下发', keepAlive: false },
             path: '/officialAccountadd',
             name: 'officialAccountadd',
@@ -160,7 +178,7 @@ const routes = [{
             meta: { name:  '部门预算', keepAlive: false },
             path: '/budget',
             name: 'budget',
-            redirect: 'budgetList',
+            redirect: 'monthExcel',
             component: (resolve) => require( /* webpackChunkName: "system" */
                 ['../pages/main/budget/budgetIndex.vue'], resolve),
             children: [