调度计划导出、明日调令

master
xy 2 years ago
parent 635abed7e1
commit c57b4da371

@ -6,12 +6,12 @@
<div>{{ $moment(time).format('YYYY-MM-DD HH:mm:ss') }}</div> <div>{{ $moment(time).format('YYYY-MM-DD HH:mm:ss') }}</div>
<div> <div>
<div v-if="tomorrows && tomorrows.length > 0" style="cursor:pointer;" @click="$refs['tomorrow'].show()">明日调令 <i class="el-icon-d-arrow-right"></i></div> <div style="cursor:pointer;" @click="$refs['tomorrow'].show()"> <i class="el-icon-d-arrow-right"></i></div>
<div style="cursor:pointer;" @click="$emit('show-done')"> <i class="el-icon-d-arrow-right"></i></div> <div style="cursor:pointer;" @click="$emit('show-done')"> <i class="el-icon-d-arrow-right"></i></div>
</div> </div>
</div> </div>
<tomorrow ref="tomorrow" :tomorrows="tomorrows" @step-click="e => $emit('step-click', e)"></tomorrow> <tomorrow ref="tomorrow" :tomorrows="tomorrows" @step-click="e => $emit('step-click', e)" @dataPick="e => getTomorrow(e)"></tomorrow>
</div> </div>
</template> </template>
@ -29,7 +29,10 @@ export default {
} }
}, },
methods: { methods: {
async getTomorrow () { dataPick (e) {
console.log(e)
},
async getTomorrow (day) {
this.tomorrows = ( this.tomorrows = (
await index({ await index({
table_name: "transfers", table_name: "transfers",
@ -41,12 +44,12 @@ export default {
{ {
key: 'start_time', key: 'start_time',
op: 'range', op: 'range',
value: `${this.$moment().add(1,'day').startOf('days').format('YYYY-MM-DD HH:mm:ss')},${this.$moment().add(1,'days').endOf('days').format('YYYY-MM-DD HH:mm:ss')}` value: day ? `${this.$moment(day).startOf('days').format('YYYY-MM-DD HH:mm:ss')},${this.$moment(day).endOf('days').format('YYYY-MM-DD HH:mm:ss')}` : `${this.$moment().add(1,'day').startOf('days').format('YYYY-MM-DD HH:mm:ss')},${this.$moment().add(1,'days').endOf('days').format('YYYY-MM-DD HH:mm:ss')}`
}, },
{ {
key: "status", key: "status",
op: "eq", op: "range",
value: 2 value: "2,7"
} }
] ]
},false) },false)

@ -8,7 +8,7 @@
<div class="container"> <div class="container">
<div class="header"> <div class="header">
<p>明日调令</p> <p>明日调令</p>
<DatePicker :options="{ disabledDate: date => date.valueOf() < new Date().valueOf() }" style="width: 16rem;" placeholder="选择日期" @on-change="e => $emit('dataPick',e)"></DatePicker>
</div> </div>
<el-scrollbar ref="elScrollbar" class="scrollbar-wrapper"> <el-scrollbar ref="elScrollbar" class="scrollbar-wrapper">
@ -25,6 +25,8 @@
</div> </div>
<div class="list-item__time"> <div class="list-item__time">
执行时间{{ timeFormat(item.start_time) }}{{ timeFormat(item.end_time,'HH:mm') }} 执行时间{{ timeFormat(item.start_time) }}{{ timeFormat(item.end_time,'HH:mm') }}
<br>
发布时间{{ timeFormat(item.created_at,'YYYY-MM-DD HH:mm') }}
</div> </div>
<div class="list-item__last">预计时长 {{ $moment(item.end_time).diff($moment(item.start_time),'hours', true).toFixed(2) }}小时</div> <div class="list-item__last">预计时长 {{ $moment(item.end_time).diff($moment(item.start_time),'hours', true).toFixed(2) }}小时</div>
<div class="list-item__operate"> <div class="list-item__operate">
@ -292,7 +294,7 @@ $list-height: calc(#{$container-height} - 5.33rem);
} }
&__time { &__time {
flex-basis: 26.6%; flex-basis: 26.6%;
text-align: center; text-align: left;
} }
&__last { &__last {
flex-basis: 11%; flex-basis: 11%;

@ -93,12 +93,10 @@ export default {
start () { start () {
this.$refs['toDo'].isPaused = false; this.$refs['toDo'].isPaused = false;
this.$refs['doing'].isPaused = false; this.$refs['doing'].isPaused = false;
console.log('start',this.$refs['toDo'].isPaused)
}, },
pause () { pause () {
this.$refs['toDo'].isPaused = true; this.$refs['toDo'].isPaused = true;
this.$refs['doing'].isPaused = true; this.$refs['doing'].isPaused = true;
console.log('pause',this.$refs['toDo'].isPaused)
}, },
stepClick ({ data, isDetail }) { stepClick ({ data, isDetail }) {
this.$refs['detailTransfer'].setData(data); this.$refs['detailTransfer'].setData(data);
@ -141,7 +139,6 @@ export default {
},false) },false)
).data); ).data);
res.forEach(i => { res.forEach(i => {
console.log(i)
this.$notify({ this.$notify({
title: i.equipment?.name || '调令反馈', title: i.equipment?.name || '调令反馈',
message: `${ i.feedback_department_id_departments_id_relation?.name ? i.feedback_department_id_departments_id_relation?.name + '-' : '' }${ i.feedback_admin_id_admins_id_relation?.name ? i.feedback_admin_id_admins_id_relation?.name + '-' : '' }${ i.content }`, message: `${ i.feedback_department_id_departments_id_relation?.name ? i.feedback_department_id_departments_id_relation?.name + '-' : '' }${ i.feedback_admin_id_admins_id_relation?.name ? i.feedback_admin_id_admins_id_relation?.name + '-' : '' }${ i.content }`,
@ -192,6 +189,7 @@ export default {
this.transfers2 = transfers2; this.transfers2 = transfers2;
this.transfers3 = transfers3; this.transfers3 = transfers3;
} else { } else {
//
const res = ( const res = (
(await index({ (await index({
table_name: "transfers", table_name: "transfers",
@ -215,6 +213,38 @@ export default {
this.$audioPlay(2) this.$audioPlay(2)
this.transfers1.push(...res) this.transfers1.push(...res)
} }
//
const res1 = (await index({
table_name: "transfers",
page: 1,
page_size: 9999,
filter: [
{
key: "updated_at",
op: "range",
value: `${this.forwardRefreshTime.format('YYYY-MM-DD HH:mm:ss')},${this.$moment().format('YYYY-MM-DD HH:mm:ss')}`
},
{
key: "status",
op: "range",
value: "2,7"
}
]
})).data
if (res1.length > 0) {
res1.forEach(i => {
if (this.transfers1.findIndex(j => j.id === i.id) !== -1) {
this.transfers1.splice(this.transfers1.findIndex(j => j.id === i.id),1,i)
}
else if (this.transfers2.findIndex(j => j.id === i.id) !== -1) {
this.transfers2.splice(this.transfers2.findIndex(j => j.id === i.id),1,i)
}
else if (this.transfers3.findIndex(j => j.id === i.id) !== -1) {
this.transfers3.splice(this.transfers3.findIndex(j => j.id === i.id),1,i)
}
else {}
})
}
this.forwardRefreshTime = this.$moment() this.forwardRefreshTime = this.$moment()
} }
} }

@ -299,7 +299,7 @@
:span-method="objectSpanMethod" :span-method="objectSpanMethod"
:format-list-data="mergeData" :format-list-data="mergeData"
:is-page="false" :is-page="false"
:btn-width="300" :btn-width="360"
:auths="auths_auth_mixin" :auths="auths_auth_mixin"
:delay-req="true" :delay-req="true"
:destroy-action="destroy" :destroy-action="destroy"

@ -24,6 +24,13 @@
> >
</div> </div>
</template> </template>
<template #export>
<Button
type="primary"
@click="exportExcel(new Date().getTime().toString())"
>导出</Button
>
</template>
</header-content> </header-content>
</slot> </slot>
</LxHeader> </LxHeader>
@ -69,7 +76,7 @@
<!-- <span>3×5m3/s</span>--> <!-- <span>3×5m3/s</span>-->
<!-- </template>--> <!-- </template>-->
<!-- </el-table-column>--> <!-- </el-table-column>-->
<el-table-column :label="weekRange[i]" header-align="center" v-for="i in 6"> <el-table-column :label="weekRange[i]" header-align="center" v-for="(n,i) in 6">
<el-table-column prop="x1" :label="weekName[i]" min-width="220" header-align="center"> <el-table-column prop="x1" :label="weekName[i]" min-width="220" header-align="center">
<template #default="{ row }"> <template #default="{ row }">
<div> <div>
@ -97,6 +104,8 @@
import { authMixin } from "@/mixin/authMixin"; import { authMixin } from "@/mixin/authMixin";
import LxHeader from "@/components/LxHeader"; import LxHeader from "@/components/LxHeader";
import {AlignmentType, convertInchesToTwip, Document, HeadingLevel, Packer, Paragraph, TextRun} from "docx"; import {AlignmentType, convertInchesToTwip, Document, HeadingLevel, Packer, Paragraph, TextRun} from "docx";
import * as XLSX from "xlsx";
import { saveAs } from "file-saver";
export default { export default {
mixins: [authMixin], mixins: [authMixin],
components: { components: {
@ -246,87 +255,33 @@
} }
}, },
async exportDocx () { async exportExcel(sheetName) {
const makeText = (dayData) => { if (this.tableData) {
let children = []; const data = this.tableData.map(i => ([
children.push( this.areas.get(i.equipment.area),
new Paragraph({ i.equipment.name,
text: `${this.$moment(this.selectDate).format('YYYY年MM月DD日')}调度指令执行情况`, '河道处',
heading: HeadingLevel.HEADING_1, ...i._sortData.map(j => ((j.length > 0) ? j.map(k => (`${ this.$moment(k.act_start_time).format('HH:mm') } ~ ${ this.$moment(k.act_end_time).format('HH:mm') } ${ k.content || " " } ${ this.abilities.get(k.leibie) }\n`)).toString() : "")
alignment: AlignmentType.CENTER, )])
spacing: { );
after: 400 data.unshift(["所属区域","工程名称","管理单位",...this.weekName]);
data.unshift(["所属区域","工程名称","管理单位",...this.weekRange]);
const wb = XLSX.utils.book_new();
let ws = XLSX.utils.aoa_to_sheet(data);
ws["!merges"] = [{ s: { r: 0, c: 0 }, e: { r: 1, c: 0 } },{ s: { r: 0, c: 1 }, e: { r: 1, c: 1 } },{ s: { r: 0, c: 2 }, e: { r: 1, c: 2 } }]
ws["!cols"] = [{ wch: 30 }, { wch: 30 },{ wch: 10 },{ wch: 50 },{ wch: 50 },{ wch: 50 },{ wch: 50 },{ wch: 50 },{ wch: 50 },{ wch: 50 }]
XLSX.utils.book_append_sheet(wb, ws, sheetName);
const wbout = XLSX.write(wb, {
bookType: "xlsx",
bookSST: true,
type: "array",
});
saveAs(
new Blob([wbout], { type: "application/octet-stream" }),
`${sheetName}.xlsx`
);
} }
})
)
}
const document = new Document({
sections: [
{
children: [
new Paragraph({
text: `${this.$moment(this.selectDate).format('YYYY年MM月DD日')}调度指令执行情况`,
heading: HeadingLevel.HEADING_1,
alignment: AlignmentType.CENTER,
spacing: {
after: 400
}
}),
new Paragraph({
indent: {
firstLine: convertInchesToTwip(0.5)
},
spacing: {
before: 200,
line: 500
},
children: [
new TextRun({
text: "今日小雨转晴北风2级气温22℃~29℃。水情信息8:00新塘3.06m环城河北3.02m觅渡桥2.99m人民桥3.00m16:00新塘3.03m环城河北2.90m觅渡桥2.92m人民桥2.95m。",
size: 18,
})
]
}),
...this.transfers.map((i, index) => (
[
new Paragraph({
spacing: {
before: 200,
line: 400
}, },
children: [
new TextRun({
text: `${this.numberToChinese(index+1)}${i.equipment_id_equipments_id_relation?.name}`,
size: 28,
bold: true,
}),
]
}),
new Paragraph({
spacing: {
before: 200,
line: 400
},
indent: {
firstLine: convertInchesToTwip(0.5)
},
children: [
new TextRun({
text: `1、时间${this.$moment(i.act_start_time).format('YYYY-MM-DD HH:mm')} - ${this.$moment(i.act_end_time).format('YYYY-MM-DD HH:mm')} 2、实际执行情况${i.content}`,
size: 18,
})
]
})
]
)).flat()
]
},
]
})
const blob = await Packer.toBlob(document)
saveAs(blob, 'test.docx')
}
}, },
created() { created() {
this.getAbility() this.getAbility()

@ -14,7 +14,7 @@
<script> <script>
import { import {
listlog listlog
} from "../../../api/system/log.js"; } from "@/api/system/log";
export default { export default {
data() { data() {
return { return {

@ -35,7 +35,7 @@
import { import {
getInfo getInfo
} from '../../api/user.js' } from '@/api/user'
export default { export default {
name: 'Profile', name: 'Profile',

@ -35,10 +35,6 @@ module.exports = {
sass:{ sass:{
prependData: '@import "@/styles/index.scss";' prependData: '@import "@/styles/index.scss";'
} }
},
extract: { // 打包后css文件名称添加时间戳
filename: `static/css/[name].css`,
chunkFilename: `static/css/chunk.[id].css`
} }
}, },
lintOnSave: process.env.NODE_ENV === 'development', lintOnSave: process.env.NODE_ENV === 'development',
@ -70,10 +66,6 @@ module.exports = {
'@': resolve('src') '@': resolve('src')
} }
}, },
output: {
filename: 'static/js/[name].[hash].js',
chunkFilename: 'static/js/[name].[hash].js'
},
}, },
chainWebpack(config) { chainWebpack(config) {
// it can improve the speed of the first screen, it is recommended to turn on preload // it can improve the speed of the first screen, it is recommended to turn on preload

Loading…
Cancel
Save