6 changed files with 930 additions and 518 deletions
File diff suppressed because it is too large
@ -0,0 +1,151 @@ |
|||
<template> |
|||
<div> |
|||
<el-row> |
|||
<el-col> |
|||
<div class="top-con"> |
|||
<div class="top" v-for="item in top" :key="item">{{ item }}</div> |
|||
</div> |
|||
<!-- 日历号 --> |
|||
<div class="date-con"> |
|||
<div |
|||
class="date" |
|||
:class="[item.thisMonth, item.isToday, item.afterToday]" |
|||
v-for="(item, index) in visibleCalendar" |
|||
:key="index" |
|||
> |
|||
<div>{{ item.day }}</div> |
|||
<div class="morning">张三,李四</div> |
|||
<div class="evening">王五,赵六</div> |
|||
</div> |
|||
</div> |
|||
</el-col> |
|||
</el-row> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
props: { |
|||
time: { |
|||
type: Object, |
|||
default: () => { |
|||
return { |
|||
year: new Date().getFullYear(), |
|||
month: new Date().getMonth(), |
|||
}; |
|||
}, |
|||
}, |
|||
}, |
|||
data() { |
|||
return { |
|||
top: ["一", "二", "三", "四", "五", "六", "日"], |
|||
}; |
|||
}, |
|||
created() { |
|||
console.log("123", this.time); |
|||
}, |
|||
methods: { |
|||
// 获取 |
|||
}, |
|||
computed: { |
|||
// 获取当前月份显示日历,共42天 |
|||
visibleCalendar() { |
|||
// 获取今天的年月日 |
|||
const today = new Date(); |
|||
today.setHours(0); |
|||
today.setMinutes(0); |
|||
today.setSeconds(0); |
|||
today.setMilliseconds(0); |
|||
|
|||
const calendarArr = []; |
|||
// 获取当前月份第一天 |
|||
const currentFirstDay = new Date(this.time.year, this.time.month, 1); |
|||
// 获取第一天是周几 |
|||
const weekDay = currentFirstDay.getDay(); |
|||
// 用当前月份第一天减去周几前面几天,就是看见的日历的第一天 |
|||
const startDay = currentFirstDay - (weekDay - 1) * 24 * 3600 * 1000; |
|||
// 我们统一用42天来显示当前显示日历 |
|||
for (let i = 0; i < 42; i++) { |
|||
const date = new Date(startDay + i * 24 * 3600 * 1000); |
|||
calendarArr.push({ |
|||
date: new Date(startDay + i * 24 * 3600 * 1000), |
|||
year: date.getFullYear(), |
|||
month: date.getMonth(), |
|||
day: date.getDate(), |
|||
// 是否在当月 |
|||
thisMonth: |
|||
date.getFullYear() === today.getFullYear() && |
|||
date.getMonth() === today.getMonth() |
|||
? "thisMonth" |
|||
: "", |
|||
// 是否是今天 |
|||
isToday: |
|||
date.getFullYear() === today.getFullYear() && |
|||
date.getMonth() === today.getMonth() && |
|||
date.getDate() === today.getDate() |
|||
? "isToday" |
|||
: "", |
|||
// 是否在今天之后 |
|||
afterToday: date.getTime() >= today.getTime() ? "afterToday" : "", |
|||
}); |
|||
} |
|||
return calendarArr; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.top-con { |
|||
display: flex; |
|||
align-items: center; |
|||
.top { |
|||
width: 14.285%; |
|||
background-color: rgb(242, 242, 242); |
|||
padding: 10px 0; |
|||
margin: 5px; |
|||
text-align: center; |
|||
} |
|||
} |
|||
.date-con { |
|||
display: flex; |
|||
flex-wrap: wrap; |
|||
.date { |
|||
width: 14.285%; |
|||
text-align: center; |
|||
padding: 5px; |
|||
.morning { |
|||
padding: 10px 0; |
|||
background-color: rgba(220, 245, 253, 0.3); |
|||
} |
|||
.evening { |
|||
padding: 10px 0; |
|||
background-color: rgba(220, 244, 209, 0.3); |
|||
} |
|||
} |
|||
.thisMonth { |
|||
.morning { |
|||
background-color: rgb(220, 245, 253); |
|||
} |
|||
.evening { |
|||
background-color: rgb(220, 244, 209); |
|||
} |
|||
} |
|||
.isToday { |
|||
font-weight: 700; |
|||
.morning { |
|||
background-color: rgb(169, 225, 243); |
|||
} |
|||
.evening { |
|||
background-color: rgb(193, 233, 175); |
|||
} |
|||
} |
|||
} |
|||
.tip-con { |
|||
margin-top: 51px; |
|||
.tip { |
|||
margin-top: 21px; |
|||
width: 100%; |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,187 @@ |
|||
<template> |
|||
<el-dialog |
|||
:visible.sync="visible" |
|||
:title="'智能填表'" |
|||
:close-on-click-modal="true" |
|||
:close-on-press-escape="true" |
|||
width="850px" |
|||
:top="diaTop" |
|||
> |
|||
<el-table |
|||
v-loading="loading" |
|||
:data="list" |
|||
row-key="id" |
|||
border |
|||
:height="tableHeight" |
|||
style="width: 100%" |
|||
> |
|||
<el-table-column type="index" label="序号" width="50" /> |
|||
<el-table-column |
|||
prop="reportName" |
|||
label="模板名称" |
|||
header-align="center" |
|||
min-width="150" |
|||
></el-table-column> |
|||
<el-table-column |
|||
label="操作" |
|||
fixed="right" |
|||
header-align="center" |
|||
align="center" |
|||
width="150" |
|||
> |
|||
<template slot-scope="scope"> |
|||
<el-button type="text" size="small" @click="fillIn(scope.row)" |
|||
>填写</el-button |
|||
> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import { Loading } from "element-ui"; // 引入Loading服务 |
|||
import { requestPost, requestGet } from "@/js/dai/request"; |
|||
import { mapGetters } from "vuex"; |
|||
import axios from "axios"; |
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
loading: false, |
|||
|
|||
visible: false, |
|||
|
|||
list: [], //客户列表 |
|||
|
|||
elseParams: {}, |
|||
}; |
|||
}, |
|||
|
|||
computed: { |
|||
tableHeight() { |
|||
// return this.resolution === 'small' ? this.clientHeight - 210 : this.clientHeight - 220 |
|||
return this.clientHeight - 300; |
|||
}, |
|||
diaWidth() { |
|||
return this.resolution === "small" ? 60 : 50; |
|||
}, |
|||
diaHeight() { |
|||
return this.resolution === "small" ? 350 : 600; |
|||
}, |
|||
diaTop() { |
|||
return this.resolution === "small" ? "30px" : "100px"; |
|||
}, |
|||
...mapGetters(["clientHeight", "resolution"]), |
|||
}, |
|||
|
|||
mounted() {}, |
|||
|
|||
methods: { |
|||
async existsTemplate(row) { |
|||
console.log("baobiao----------existsTemplate", row); |
|||
const { elseParams } = row; |
|||
this.list = []; |
|||
this.elseParams = { ...elseParams }; |
|||
await this.getList(); |
|||
return this.list.length > 0; |
|||
}, |
|||
|
|||
async init(row) { |
|||
console.log("baobiao----------init", row); |
|||
const { elseParams } = row; |
|||
this.visible = true; |
|||
this.elseParams = { ...elseParams }; |
|||
|
|||
this.list = []; |
|||
|
|||
await this.getList(); |
|||
}, |
|||
|
|||
//获取所有客户列表 |
|||
async getList() { |
|||
this.loading = true; |
|||
const { elseParams } = this; |
|||
const { data, code, msg } = await requestPost( |
|||
"/oper/customize/icCustomerReport/report-list", |
|||
{ |
|||
...elseParams, |
|||
} |
|||
); |
|||
this.loading = false; |
|||
if (code === 0) { |
|||
this.list = data.map((item) => { |
|||
return item; |
|||
}); |
|||
} else { |
|||
this.$message.error(msg); |
|||
} |
|||
}, |
|||
|
|||
async fillIn(item) { |
|||
const { reportId, reportName } = item; |
|||
const url = "/oper/customize/icCustomerReport/preview"; |
|||
const parmas = { |
|||
...this.elseParams, |
|||
reportId, |
|||
}; |
|||
|
|||
const { data, code, msg } = await requestPost(url, parmas); |
|||
|
|||
if (code === 0) { |
|||
let token = localStorage.getItem("token"); |
|||
let prefix = window.SITE_CONFIG["apiURL"].slice(0, -4); |
|||
if (item.isList) { |
|||
this.exportAll(reportId, data.paramKey, reportName); |
|||
} else { |
|||
window.open( |
|||
`${prefix}/jmreport/view/${reportId}?token=${token}¶mKey=${data.paramKey}` |
|||
); |
|||
} |
|||
|
|||
// this.visible = false; |
|||
this.$emit("afterFillIn"); |
|||
} else { |
|||
this.$message.error(msg); |
|||
} |
|||
}, |
|||
|
|||
async exportAll(reportId, paramKey, reportName) { |
|||
const url = "/oper/customize/icCustomerReport/batch-export"; |
|||
axios({ |
|||
url: window.SITE_CONFIG["apiURL"] + url, |
|||
method: "post", |
|||
data: { |
|||
reportId, |
|||
paramKey, |
|||
}, |
|||
responseType: "blob", |
|||
}) |
|||
.then((res) => { |
|||
console.log("批量导出接口返回", res); |
|||
// let fileName = window.decodeURI( |
|||
// res.headers["content-disposition"].split(";")[1].split("=")[1] |
|||
// ); |
|||
let fileName = reportName; |
|||
console.log("filename", fileName); |
|||
let blob = new Blob([res.data], { type: "application/zip" }); |
|||
var url = window.URL.createObjectURL(blob); |
|||
var aLink = document.createElement("a"); |
|||
aLink.style.display = "none"; |
|||
aLink.href = url; |
|||
aLink.setAttribute("download", fileName); |
|||
document.body.appendChild(aLink); |
|||
aLink.click(); |
|||
document.body.removeChild(aLink); //下载完成移除元素 |
|||
window.URL.revokeObjectURL(url); //释放掉blob对象 |
|||
}) |
|||
.catch((err) => { |
|||
console.log("批量导出失败", err); |
|||
return this.$message.error("网络错误"); |
|||
}); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped></style> |
Loading…
Reference in new issue