| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243 |
- <template>
- <div class="app-container-list">
- <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
- <el-form-item :label="$t('文件名称')" prop="filename">
- <el-input
- v-model="queryParams.filename"
- :placeholder="$t('请输入') + $t('文件名称')"
- clearable
- size="small"
- @input="handleQuery"
- />
- </el-form-item>
- <el-form-item :label="$t('更新负责人')" prop="filename">
- <el-input
- v-model="queryParams.responsibility"
- :placeholder="$t('请输入') + $t('更新负责人')"
- clearable
- size="small"
- @input="handleQuery"
- />
- </el-form-item>
- <el-form-item>
- <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('搜索') }}</el-button>
- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('重置') }}</el-button>
- </el-form-item>
- </el-form>
- <el-row :gutter="10" class="mb8">
- <el-col :span="1.5">
- <el-button
- type="primary"
- icon="el-icon-plus"
- size="mini"
- @click="handleAdd"
- v-hasPermi="['document:plantproglist:add']"
- >{{ $t('新增') }}
- </el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="success"
- icon="el-icon-edit"
- size="mini"
- :disabled="single"
- @click="handleUpdate"
- v-hasPermi="['document:plantproglist:edit']"
- >{{ $t('修改') }}
- </el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="danger"
- icon="el-icon-delete"
- size="mini"
- :disabled="multiple"
- @click="handleDelete"
- v-hasPermi="['document:plantproglist:remove']"
- >{{ $t('删除') }}
- </el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="info"
- icon="el-icon-upload2"
- size="mini"
- @click="handleImport"
- v-hasPermi="['document:plantproglist:edit']"
- >{{ $t('导入') }}
- </el-button>
- </el-col>
- <!-- <el-col :span="1.5">-->
- <!-- <el-button-->
- <!-- type="warning"-->
- <!-- icon="el-icon-download"-->
- <!-- size="mini"-->
- <!-- @click="handleExport"-->
- <!-- v-hasPermi="['document:plantproglist:export']"-->
- <!-- >{{ $t('导出') }}</el-button>-->
- <!-- </el-col>-->
- <el-col :span="1.5">
- <el-button
- type="warning"
- icon="el-icon-download"
- size="mini"
- @click="handleExport"
- v-hasPermi="['document:plantproglist:export']"
- >{{ $t('导出') }}
- </el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="primary"
- icon="el-icon-s-data"
- size="mini"
- @click="handleData"
- >{{ $t('数据分析') }}
- </el-button>
- </el-col>
- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
- </el-row>
- <form ref="downloadExportForm" :action="downloadExportAction" target="FORMSUBMIT">
- </form>
- <el-table v-loading="loading" class="table" :data="plantproglistList" @selection-change="handleSelectionChange"
- @sort-change="sortList"
- :cell-class-name="tableCellClassName" :height="clientHeight" border>
- <el-table-column type="selection" width="55" align="center"/>
- <el-table-column :label="$t('文件编号')" align="center" prop="fileno" width="150" :show-overflow-tooltip="true"/>
- <el-table-column :label="$t('文件名称')" align="center" width="220" prop="filename" :show-overflow-tooltip="true"/>
- <el-table-column :label="$t('版次')" align="center" prop="revision" :show-overflow-tooltip="true"/>
- <el-table-column :label="$t('RC代码')" align="center" prop="rccode" :show-overflow-tooltip="true"/>
- <el-table-column :label="$t('更新负责人')" align="center" prop="responsibility" :show-overflow-tooltip="true"/>
- <el-table-column :label="$t('修订日期')" align="center" prop="filedate" width="100">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.filedate, '{y}-{m}-{d}') }}</span>
- </template>
- </el-table-column>
- <el-table-column :label="$t('下次修订日期')" align="center" sortable="custom" prop="nexteditdate" width="100">
- <template slot-scope="scope">
- <span v-if="scope.row.nexteditdate == null">按需</span>
- <span style="vertical-align:middle">{{ parseTime(scope.row.nexteditdate, '{y}-{m}-{d}') }}</span>
- <svg-icon :icon-class="changeColorPiont(scope.row.nexteditdate)"
- style="font-size: 8px"></svg-icon>
- </template>
- </el-table-column>
- <el-table-column :label="$t('回顾频率')" align="center" prop="reviewFrequency" :show-overflow-tooltip="true"
- v-if="this.itemNum !== '5'"/>
- <el-table-column :label="$t('回顾日期')" align="center" prop="reviewdate" width="100" v-if="this.itemNum !== '5'">
- <template slot-scope="scope">
- <span v-if="scope.row.reviewdate == null">NA</span>
- <span>{{ parseTime(scope.row.reviewdate, '{y}-{m}-{d}') }}</span>
- </template>
- </el-table-column>
- <el-table-column :label="$t('回顾结果')" align="center" prop="reviewResult" width="150" :show-overflow-tooltip="true"
- v-if="this.itemNum !== '5'"/>
- <el-table-column :label="$t('下次回顾日期')" align="center" sortable="custom" prop="nextreviewdate" width="100"
- >
- <template slot-scope="scope">
- <span style="vertical-align:middle">{{ parseTime(scope.row.nextreviewdate, '{y}-{m}-{d}') }}</span>
- <svg-icon :icon-class="changeColorPiont(scope.row.nextreviewdate)"
- style="font-size: 8px"></svg-icon>
- </template>
- </el-table-column>
- <el-table-column :label="$t('密级分类')" align="center" prop="classify" width="100" v-if="this.itemNum !== '5'"
- :formatter="classifyFormat"/>
- <el-table-column :label="$t('文件更新状态(控制室)')" align="center" v-if="[5,6].includes(this.itemNum)">
- <template slot-scope="scope">
- <span v-if="scope.row.revision == scope.row.versionKzs"></span>
- <span v-else style="color: #ff6d6d">{{ $t('未更新') }}</span>
- </template>
- </el-table-column>
- <el-table-column :label="$t('文件更新状态(公共盘)')" align="center" v-if="this.itemNum !== '5'">
- <template slot-scope="scope">
- <span v-if="scope.row.revision == scope.row.versionPan">{{ $t('已更新') }}</span>
- <span v-else style="color: #ff6d6d">{{ $t('未更新') }}</span>
- </template>
- </el-table-column>
- <el-table-column :label="$t('附件编号')" align="center" prop="attachmentNo" v-if="this.itemNum === '5'"
- :show-overflow-tooltip="true"/>
- <el-table-column :label="$t('附件名称')" align="center" prop="attachmentName" v-if="this.itemNum === '5'"
- :show-overflow-tooltip="true"/>
- <el-table-column :label="$t('附件版次')" align="center" prop="attachmentRevision" v-if="this.itemNum === '5'"
- :show-overflow-tooltip="true"/>
- <el-table-column :label="$t('附件修改日期')" align="center" prop="revisionDate" v-if="this.itemNum === '5'" width="100">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.revisionDate, '{y}-{m}-{d}') }}</span>
- </template>
- </el-table-column>
- <el-table-column :label="$t('备注')" align="center" prop="remarks" :show-overflow-tooltip="true"/>
- <el-table-column :label="$t('操作')" align="center" fixed="right" width="190"
- class-name="small-padding fixed-width">
- <template slot-scope="scope">
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleUpdate(scope.row)"
- v-hasPermi="['document:plantproglist:edit']"
- >{{ $t('修改') }}
- </el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.row)"
- v-hasPermi="['document:plantproglist:remove']"
- >{{ $t('删除') }}
- </el-button>
- <el-button v-if="scope.row.deptId == 103"
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleTraining(scope.row)"
- v-hasPermi="['document:plantproglist:remove']"
- >培训
- </el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-document"
- @click="handleDoc(scope.row)"
- v-hasPermi="['document:plantproglist:edit']"
- >{{ $t('报告附件') }}
- </el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination
- v-show="total>0"
- :total="total"
- :page.sync="queryParams.pageNum"
- :limit.sync="queryParams.pageSize"
- @pagination="getList"
- />
- <!-- 添加或修改装置程序清单对话框 -->
- <el-dialog :close-on-click-modal="false" v-dialogDrag :title="title" :visible.sync="open" width="1200px" append-to-body>
- <el-form ref="form" :model="form" :rules="rules" label-width="150px">
- <el-form-item :label="$t('文件编号')" prop="fileno">
- <el-input v-model="form.fileno" :placeholder="$t('请输入') + $t('文件编号')"/>
- </el-form-item>
- <el-form-item :label="$t('文件名称')" prop="filename">
- <el-input v-model="form.filename" :placeholder="$t('请输入') + $t('文件名称')" @change="changeRevisionDate"/>
- </el-form-item>
- <el-row>
- <el-col :span="12">
- <el-form-item :label="$t('版次')" prop="revision">
- <el-input v-model="form.revision" :placeholder="$t('请输入') + $t('版次')"/>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item :label="$t('RC代码')" prop="rccode">
- <el-input v-model="form.rccode" :placeholder="$t('请输入') + $t('RC代码')"/>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item :label="$t('更新负责人')" prop="responsibility">
- <el-input v-model="form.responsibility" :placeholder="$t('请输入') + $t('更新负责人')"/>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item :label="$t('修订日期')" prop="filedate">
- <el-date-picker clearable size="small" style="width: 200px"
- v-model="form.filedate"
- type="date"
- value-format="yyyy-MM-dd"
- :placeholder="$t('请选择') + $t('修订日期')"
- @change="changeRevisionDate">
- </el-date-picker>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item :label="$t('下次修订日期')" prop="nexteditdate">
- <el-date-picker clearable size="small" style="width: 200px"
- v-model="form.nexteditdate"
- type="date"
- value-format="yyyy-MM-dd"
- :placeholder="$t('请选择') + $t('下次修订日期')">
- </el-date-picker>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item :label="$t('回顾频率')" prop="reviewFrequency" v-if="this.itemNum !== '5'">
- <el-input v-model="form.reviewFrequency" :placeholder="$t('请输入') + $t('回顾频率')" @change="getNextDate()"/>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item :label="$t('回顾日期')" prop="reviewdate" v-if="this.itemNum !== '5'">
- <el-date-picker clearable size="small" style="width: 200px"
- v-model="form.reviewdate"
- type="date"
- value-format="yyyy-MM-dd"
- @change="getNextDate()"
- :placeholder="$t('请选择') + $t('回顾日期')">
- </el-date-picker>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item :label="$t('回顾结果')" prop="reviewResult" v-if="this.itemNum !== '5'">
- <el-input v-model="form.reviewResult" :placeholder="$t('请输入') + $t('回顾结果')"/>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item :label="$t('下次回顾日期')" prop="nextreviewdate" >
- <el-date-picker clearable size="small" style="width: 200px"
- v-model="form.nextreviewdate"
- type="date"
- value-format="yyyy-MM-dd"
- :placeholder="$t('请选择') + $t('下次回顾日期')">
- </el-date-picker>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item :label="$t('密级分类')" prop="classify" v-if="this.itemNum !== '5'">
- <el-select v-model="form.classify" :placeholder="$t('请选择') + $t('密级分类')">
- <el-option
- v-for="dict in classifyOptions"
- :key="dict.dictValue"
- :label="dict.dictLabel"
- :value="dict.dictValue"
- ></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item :label="$t('公共盘文件版本')" prop="versionPan" v-if="this.itemNum !== '5'">
- <el-input v-model="form.versionPan" :placeholder="$t('请输入') + $t('公共盘文件版本')"/>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item :label="$t('附件编号')" prop="attachmentNo" v-if="this.itemNum === '5'">
- <el-input v-model="form.attachmentNo" :placeholder="$t('请输入') + $t('附件编号')"/>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item :label="$t('附件名称')" prop="attachmentName" v-if="this.itemNum === '5'">
- <el-input v-model="form.attachmentName" :placeholder="$t('请输入') + $t('附件名称')"/>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item :label="$t('附件版次')" prop="attachmentRevision" v-if="this.itemNum === '5'">
- <el-input v-model="form.attachmentRevision" :placeholder="$t('请输入') + $t('附件版次')"/>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item :label="$t('附件修改日期')" prop="revisionDate" v-if="this.itemNum === '5'">
- <el-date-picker clearable size="small" style="width: 200px"
- v-model="form.revisionDate"
- type="date"
- value-format="yyyy-MM-dd"
- :placeholder="$t('请选择') + $t('附件修改日期')">
- </el-date-picker>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item :label="$t('备注')" prop="remarks">
- <el-input v-model="form.remarks" :placeholder="$t('请输入') + $t('备注')"/>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item :label="$t('归属部门')" prop="deptId">
- <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true"
- :placeholder="$t('请选择') + $t('归属部门')"/>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <div slot="footer" class="dialog-footer">
- <el-button type="primary" @click="submitForm">{{ $t('确 定') }}</el-button>
- <el-button @click="cancel">{{ $t('取 消') }}</el-button>
- </div>
- </el-dialog>
- <!-- 用户导入对话框 -->
- <el-dialog :close-on-click-modal="false" v-dialogDrag :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
- <el-upload
- ref="upload"
- :limit="1"
- accept=".xlsx, .xls"
- :headers="upload.headers"
- :action="upload.url"
- :disabled="upload.isUploading"
- :on-progress="handleFileUploadProgress"
- :on-success="handleFileSuccess"
- :auto-upload="false"
- drag
- >
- <i class="el-icon-upload"></i>
- <div class="el-upload__text">
- {{ $t('将文件拖到此处,或') }}
- <em>{{ $t('点击上传') }}</em>
- </div>
- <div class="el-upload__tip" slot="tip">
- <!--<el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据-->
- <el-link type="info" style="font-size:12px" @click="importTemplate">{{ $t('下载模板') }}</el-link>
- </div>
- <form ref="downloadFileForm" :action="upload.downloadAction" target="FORMSUBMIT">
- <input name="type" :value="upload.type" hidden/>
- </form>
- <div class="el-upload__tip" style="color:#ff0000" slot="tip">{{ $t('提示:仅允许导入“xls”或“xlsx”格式文件!') }}</div>
- </el-upload>
- <div slot="footer" class="dialog-footer">
- <el-button type="primary" @click="submitFileForm">{{ $t('确 定') }}</el-button>
- <el-button @click="upload.open = false">{{ $t('取 消') }}</el-button>
- </div>
- </el-dialog>
- <!-- 报告附件对话框 -->
- <el-dialog :close-on-click-modal="false" v-dialogDrag :title="doc.title" :visible.sync="doc.open" width="700px" append-to-body>
- <el-upload
- ref="doc"
- :limit="500"
- :headers="doc.headers"
- :action="doc.url + '?pType=' + doc.pType + '&pId=' + doc.pId"
- :disabled="doc.isUploading"
- :on-progress="handleFileDocProgress"
- :on-success="handleFileDocSuccess"
- :auto-upload="true"
- drag
- >
- <i class="el-icon-upload"></i>
- <div class="el-upload__text">
- {{ $t('将文件拖到此处,或') }}
- <em>{{ $t('点击上传') }}</em>
- </div>
- </el-upload>
- <el-table :data="doc.commonfileList" border>
- <el-table-column :label="$t('文件名')" align="center" prop="fileName" :show-overflow-tooltip="true">
- <template slot-scope="scope">
- <a class="link-type" @click="handleDownload(scope.row)">
- <span>{{ scope.row.fileName }}</span>
- </a>
- </template>
- </el-table-column>
- <el-table-column :label="$t('大小(Kb)')" align="center" prop="fileSize" :show-overflow-tooltip="true" width="80"/>
- <el-table-column :label="$t('上传人')" align="center" prop="creator" :show-overflow-tooltip="true" width="120"/>
- <el-table-column :label="$t('操作')" align="center" width="150" class-name="small-padding fixed-width">
- <template slot-scope="scope">
- <el-button
- v-if="scope.row.fileName.endsWith('pdf')||scope.row.fileName.endsWith('xlsx')||scope.row.fileName.endsWith('md')
- ||scope.row.fileName.endsWith('docx')||scope.row.fileName.endsWith('doc')||scope.row.fileName.endsWith('txt')
- ||scope.row.fileName.endsWith('jpg')||scope.row.fileName.endsWith('png')||scope.row.fileName.endsWith('csv')
- ||scope.row.fileName.endsWith('mp4')||scope.row.fileName.endsWith('svg')||scope.row.fileName.endsWith('dwg')
- ||scope.row.fileName.endsWith('flv')||scope.row.fileName.endsWith('swf')||scope.row.fileName.endsWith('gif')
- ||scope.row.fileName.endsWith('3gp')||scope.row.fileName.endsWith('mkv')||scope.row.fileName.endsWith('tif')"
- size="mini"
- type="text"
- icon="el-icon-view"
- @click="handleSee(scope.row)"
- > {{ $t('预览') }}
- </el-button>
- <el-button
- v-if="scope.row.fileName.endsWith('ppt')||scope.row.fileName.endsWith('pptx') "
- size="mini"
- type="text"
- icon="el-icon-view"
- @click="handleSeePPT(scope.row)"
- > {{ $t('ppt预览') }}
- </el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-download"
- @click="handleDownload(scope.row)"
- >{{ $t('下载') }}
- </el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDeleteDoc(scope.row)"
- >{{ $t('删除') }}
- </el-button>
- </template>
- </el-table-column>
- </el-table>
- <div slot="footer" class="dialog-footer">
- <!-- <el-button type="primary" @click="submitFileForm">{{ $t('确 定') }}</el-button>-->
- <el-button @click="doc.open = false">{{ $t('返 回') }}</el-button>
- </div>
- </el-dialog>
- <el-dialog :close-on-click-modal="false" v-loading="loadingFlash" element-loading-background="rgba(0,0,0,0.2)" v-dialogDrag :title="pdf.title"
- :visible.sync="pdf.open" width="1300px" :center="true" append-to-body>
- <div style="margin-top: -60px;float: right;margin-right: 40px;">
- <el-button size="mini" type="text" @click="openPdf">{{ $t('新页面打开PDF') }}</el-button>
- </div>
- <div style="margin-top: -30px">
- <iframe id="iFrame" class="iframe-html" :src="pdf.pdfUrl" frameborder="0" width="100%" height="700px"
- v-if="ppt"></iframe>
- </div>
- <div style="padding: 30px; width: 100%; height: 100%;">
- <el-carousel class="" ref="carousel" arrow="always" v-if="pptView"
- height="700px" trigger="click" :autoplay="false" indicator-position="outside">
- <el-carousel-item class="lun_img" v-for="item in imgs" v-bind:key="item">
- <img :src="item" width="100%" height="100%" object-fit="cover"/>
- </el-carousel-item>
- </el-carousel>
- </div>
- </el-dialog>
- <el-drawer
- :title="$t('数据分析')"
- size="600px"
- :visible.sync="drawer"
- :direction="direction">
- <el-row>
- <el-col>
- <el-card class="box-card" shadow="hover">
- <div slot="header" class="clearfix">
- <span>{{ $t('RC代码统计') }}</span>
- </div>
- <div class="text item">
- <rc-data :item=this.item v-if="sonRefresh"></rc-data>
- </div>
- </el-card>
- </el-col>
- </el-row>
- <el-row>
- <el-col>
- <el-card class="box-card" shadow="hover">
- <div slot="header" class="clearfix">
- <span>{{ $t('分级统计') }}</span>
- </div>
- <div class="text item">
- <classify-data :item=this.item v-if="sonRefresh"></classify-data>
- </div>
- </el-card>
- </el-col>
- </el-row>
- </el-drawer>
- </div>
- </template>
- <script>
- import {
- addPlantproglist,
- delPlantproglist,
- exportPlantproglist,
- getPlantproglist,
- listPlantproglist,
- updatePlantproglist,
- addProglistTraining,
- addProglistTrainingForce
- } from "@/api/document/plantproglist";
- import {allFileList, delCommonfile} from "@/api/common/commonfile";
- import {treeselect} from "@/api/system/dept";
- import {getToken} from "@/utils/auth";
- import Treeselect from "@riophae/vue-treeselect";
- import "@riophae/vue-treeselect/dist/vue-treeselect.css";
- import RcData from "./rcData";
- import ClassifyData from "./classifyData";
- import {formatDate} from "../../../utils";
- import dayjs from "dayjs";
- export default {
- name: "index",
- props: ['item', 'typename'],
- components: {ClassifyData, RcData, Treeselect},
- data() {
- return {
- imgs: [],
- jpgList: [],
- ppt: false,
- pptView: false,
- drawer: false,
- direction: 'rtl',
- sonRefresh: true,
- // 遮罩层
- loading: true,
- loadingFlash: false,
- // 选中数组
- ids: [],
- // 非单个禁用
- single: true,
- // 非多个禁用
- multiple: true,
- // 显示搜索条件
- showSearch: false,
- // 总条数
- total: 0,
- // 装置程序清单表格数据
- plantproglistList: [],
- // 弹出层标题
- title: "",
- // 部门树选项
- deptOptions: undefined,
- clientHeight: 300,
- // 是否显示弹出层
- open: false,
- // 分级字典
- classifyOptions: [],
- //分类
- itemNum: this.item,
- // 用户导入参数
- upload: {
- //下载模板请求地址
- downloadAction: process.env.VUE_APP_BASE_API + '/common/template',
- //下载模板类型
- type: this.typename,
- // 是否显示弹出层(用户导入)
- open: false,
- // 弹出层标题(用户导入)
- title: "",
- // 是否禁用上传
- isUploading: false,
- // 是否更新已经存在的用户数据
- updateSupport: 0,
- // 设置上传的请求头部
- headers: {Authorization: "Bearer " + getToken()},
- // 上传的地址
- url: process.env.VUE_APP_BASE_API + "/document/plantproglist/importData"
- },
- downloadExportAction: process.env.VUE_APP_BASE_API + "/document/plantproglist/importData",
- // 报告附件参数
- doc: {
- file: "123",
- // 是否显示弹出层(报告附件)
- open: false,
- // 弹出层标题(报告附件)
- title: "",
- // 是否禁用上传
- isUploading: false,
- // 是否更新已经存在的用户数据
- updateSupport: 0,
- // 报告附件上传位置编号
- ids: 0,
- // 设置上传的请求头部
- headers: {Authorization: "Bearer " + getToken()},
- // 上传的地址
- url: process.env.VUE_APP_BASE_API + "/common/commonfile/uploadFile",
- commonfileList: null,
- queryParams: {
- pId: null,
- pType: 'plantproglist'
- },
- pType: 'plantproglist',
- pId: null
- },
- pdf: {
- title: '',
- pdfUrl: '',
- numPages: null,
- open: false,
- pageNum: 1,
- pageTotalNum: 1,
- loadedRatio: 0,
- },
- // 查询参数
- queryParams: {
- pageNum: 1,
- pageSize: 20,
- fileno: null,
- filename: null,
- revision: null,
- rccode: null,
- carrier: null,
- responsibility: null,
- filedate: null,
- reviewdate: null,
- nextreviewdate: null,
- nexteditdate: null,
- item: this.item,
- createrCode: null,
- createdate: null,
- updaterCode: null,
- updatedate: null,
- deptId: null,
- remarks: null,
- classify: null,
- reviewFrequency: null,
- reviewResult: null,
- attachmentNo: null,
- attachmentName: null,
- attachmentRevision: null,
- revisionDate: null,
- orderByColumn: null,
- isAsc: null,
- allNo: null
- },
- // 表单参数
- form: {},
- // 表单校验
- rules: {
- fileno: [
- {required: true, message: this.$t('文件编号') + this.$t('不能为空'), trigger: "blur"}
- ],
- filename: [
- {required: true, message: this.$t('文件名称') + this.$t('不能为空'), trigger: "blur"}
- ],
- revision: [
- {required: true, message: this.$t('版次') + this.$t('不能为空'), trigger: "blur"}
- ],
- rccode: [
- {required: true, message: this.$t('RC代码') + this.$t('不能为空'), trigger: "blur"}
- ],
- carrier: [
- {required: true, message: this.$t('载体') + this.$t('不能为空'), trigger: "blur"}
- ],
- responsibility: [
- {required: true, message: this.$t('更新负责人') + this.$t('不能为空'), trigger: "blur"}
- ],
- filedate: [
- {required: true, message: this.$t('修订日期') + this.$t('不能为空'), trigger: "blur"}
- ],
- classify: [
- {required: true, message: this.$t('密级分类') + this.$t('不能为空'), trigger: "change"}
- ],
- deptId: [
- {required: true, message: this.$t('归属部门') + this.$t('不能为空'), trigger: "blur"}
- ],
- }
- };
- },
- watch: {
- // 根据名称筛选部门树
- deptName(val) {
- this.$refs.tree.filter(val);
- }
- },
- created() {
- //设置表格高度对应屏幕高度
- this.$nextTick(() => {
- this.clientHeight = (document.body.clientHeight - 80) * 0.8
- })
- console.log('============================')
- let responsibility = this.$route.query.responsibility
- this.queryParams.responsibility = responsibility
- this.getList();
- this.getTreeselect();
- this.getDicts("CLASSIFY").then(response => {
- this.classifyOptions = response.data;
- });
- },
- methods: {
- getNextDate() {
- var reviewFrequency = this.form.reviewFrequency;
- if (this.form.reviewdate != null && reviewFrequency != null) {
- var s = reviewFrequency.substring(0, reviewFrequency.indexOf("/"));
- if (this.form.reviewdate.endsWith("02-29")) {
- this.form.nextreviewdate = dayjs(new Date(this.form.reviewdate)).add(1, 'year').format("YYYY-MM-DD");
- } else {
- this.form.nextreviewdate = dayjs(new Date(this.form.reviewdate)).add(1, 'year').subtract(1, 'day').format("YYYY-MM-DD");
- }
- }
- },
- /** 查询装置程序清单列表 */
- getList() {
- this.loading = true;
- listPlantproglist(this.queryParams).then(response => {
- this.plantproglistList = response.rows;
- this.total = response.total;
- this.loading = false;
- });
- },
- //element表格排序
- sortList(val) {
- var sort = "asc";
- let sortTip = val.order
- this.queryParams.orderByColumn = val.prop;
- if (sortTip === 'descending') {
- this.queryParams.isAsc = 'desc' // 降序
- } else if (sortTip === 'ascending') {
- this.queryParams.isAsc = 'asc' // 升序
- } else if (sortTip === null) {
- this.queryParams.isAsc = null;
- this.queryParams.orderByColumn = null;
- }
- this.getList();
- },
- //根据分数显示颜色提示
- tableCellClassName({row, column, rowIndex, columnIndex}) {
- // if (columnIndex == 7 && row.item !== 5) {
- // return this.changeColor(row.nexteditdate)
- // }else if (columnIndex == 11 && row.item !== 5) {
- // return this.changeColor(row.nextreviewdate)
- // }
- },
- changeColor(value) {
- var timeInterval = Date.parse(value) - Date.parse(new Date());
- if (timeInterval <= 15 * 24 * 3600 * 1000) {
- return 'cellUrgent'
- } else if (timeInterval <= 30 * 24 * 3600 * 1000) {
- return 'cellCare'
- }
- },
- changeColorPiont(value) {
- var timeInterval = Date.parse(value) - Date.parse(new Date());
- if (timeInterval <= 15 * 24 * 3600 * 1000) {
- return 'roundRed'
- } else if (timeInterval <= 30 * 24 * 3600 * 1000) {
- return 'roundYellow'
- }
- return ''
- },
- /** 查询部门下拉树结构 */
- getTreeselect() {
- treeselect().then(response => {
- this.deptOptions = response.data;
- });
- },
- // 分级字典翻译
- classifyFormat(row, column) {
- return this.selectDictLabel(this.classifyOptions, row.classify);
- },
- //根据修订日期生成其他日期
- changeRevisionDate() {
- const filename = this.form.filename;
- var nexteditdate = "";
- if (filename && filename.indexOf("应急响应") !== -1) {
- if (this.form.filedate.endsWith("02-29")) {
- nexteditdate = dayjs(new Date(this.form.filedate)).add(1, 'year').format("YYYY-MM-DD");
- } else {
- nexteditdate = dayjs(new Date(this.form.filedate)).add(1, 'year').subtract(1, 'day').format("YYYY-MM-DD");
- }
- } else {
- if (this.form.filedate.endsWith("02-29")) {
- nexteditdate = dayjs(new Date(this.form.filedate)).add(3, 'year').format("YYYY-MM-DD");
- } else {
- nexteditdate = dayjs(new Date(this.form.filedate)).add(3, 'year').subtract(1, 'day').format("YYYY-MM-DD");
- }
- }
- var nextedit = new Date(nexteditdate);
- this.form.nexteditdate = formatDate(nextedit, 'yyyy-MM-dd')
- // var reviewdate = Date.parse(this.form.filedate) + (1 * 365 * 24 * 3600 * 1000)
- // var review = new Date(reviewdate);
- // this.form.reviewdate = formatDate(review,'yyyy-MM-dd')
- // var nextreviewdate = Date.parse(this.form.filedate) + (2 * 365 * 24 * 3600 * 1000)
- // var nextreview = new Date(nextreviewdate);
- // this.form.nextreviewdate = formatDate(nextreview,'yyyy-MM-dd')
- },
- // 取消按钮
- cancel() {
- this.open = false;
- this.reset();
- },
- // 表单重置
- reset() {
- this.form = {
- id: null,
- fileno: null,
- filename: null,
- revision: null,
- rccode: null,
- carrier: null,
- responsibility: null,
- filedate: null,
- reviewdate: null,
- nextreviewdate: null,
- nexteditdate: null,
- item: this.item,
- createrCode: null,
- createdate: null,
- updaterCode: null,
- updatedate: null,
- deptId: null,
- remarks: null,
- classify: null,
- reviewFrequency: null,
- reviewResult: null,
- versionKzs: null,
- versionPan: null,
- attachmentNo: null,
- attachmentName: null,
- attachmentRevision: null,
- revisionDate: null
- };
- this.resetForm("form");
- },
- /** 搜索按钮操作 */
- handleQuery() {
- this.queryParams.pageNum = 1;
- this.getList();
- },
- /** 重置按钮操作 */
- resetQuery() {
- this.queryParams.responsibility = null
- this.resetForm("queryForm");
- this.handleQuery();
- },
- // 多选框选中数据
- handleSelectionChange(selection) {
- this.ids = selection.map(item => item.id)
- this.single = selection.length !== 1
- this.multiple = !selection.length
- },
- /** 新增按钮操作 */
- handleAdd() {
- this.reset();
- this.open = true;
- this.title = this.$t('新增') + " " + this.$t('装置程序清单');
- },
- /** 修改按钮操作 */
- handleUpdate(row) {
- this.reset();
- const id = row.id || this.ids
- getPlantproglist(id).then(response => {
- console.log(response)
- this.form = response.data;
- this.open = true;
- this.title = this.$t('修改') + this.$t('装置程序清单');
- });
- },
- /** 提交按钮 */
- submitForm() {
- this.$refs["form"].validate(valid => {
- if (valid) {
- if (this.form.id != null) {
- updatePlantproglist(this.form).then(response => {
- this.msgSuccess(this.$t('修改成功'));
- this.open = false;
- this.getList();
- });
- } else {
- addPlantproglist(this.form).then(response => {
- this.msgSuccess(this.$t('新增成功'));
- this.open = false;
- this.getList();
- });
- }
- }
- });
- },
- /** 删除按钮操作 */
- handleDelete(row) {
- const ids = row.id || this.ids;
- this.$confirm(this.$t('是否确认删除装置程序清单编号为"') + +ids + this.$t('"的数据项?'), this.$t('警告'), {
- confirmButtonText: this.$t('确定'),
- cancelButtonText: this.$t('取消'),
- type: "warning"
- }).then(function () {
- return delPlantproglist(ids);
- }).then(() => {
- this.getList();
- this.msgSuccess(this.$t('删除成功'));
- })
- },
- /** 培训按钮操作 */
- handleTraining(row) {
- const ids = row.id;
- this.$confirm('是否确认发起装置培训', {
- confirmButtonText: this.$t('确定'),
- cancelButtonText: this.$t('取消'),
- type: "warning"
- }).then(() => {
- return addProglistTraining(row.id);
- }).then(() => {
- this.getList();
- this.msgSuccess(this.$t('操作成功'));
- }).catch((error) => {
- // 如果是用户取消操作,直接返回
- if (error === 'cancel') {
- return;
- }
- // 判断是否是"未找到培训矩阵"的错误
- // axios 拦截器返回的 Error 对象,错误信息在 message 中
- const errorMsg = error.message || error.msg || '';
- if (errorMsg.includes('未找到培训矩阵')) {
- // 弹出二次确认框
- this.$confirm('未找到培训矩阵,是否仍要添加到培训?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- // 调用强制添加接口
- return addProglistTrainingForce(row.id);
- }).then(() => {
- this.getList();
- this.msgSuccess('已添加培训跟踪(注意:未找到培训矩阵,未自动关联参培人员,请手动添加)');
- }).catch(() => {
- // 用户取消或失败,不做处理
- });
- }
- });
- },
- /** 导出按钮操作 */
- handleExport() {
- const queryParams = this.queryParams;
- this.$confirm(this.$t('是否确认导出所有装置程序清单数据项?'), this.$t('警告'), {
- confirmButtonText: this.$t('确定'),
- cancelButtonText: this.$t('取消'),
- type: "warning"
- }).then(function () {
- return exportPlantproglist(queryParams);
- }).then(response => {
- this.download(response.msg);
- })
- },
- /** 导出按钮操作 */
- handleExport2() {
- this.$nextTick(() => {
- this.$refs['downloadExportForm'].submit()
- })
- },
- /** 导入按钮操作 */
- handleImport() {
- this.upload.title = this.$t('用户导入');
- this.upload.open = true;
- },
- /** 下载模板操作 */
- importTemplate() {
- this.$refs['downloadFileForm'].submit()
- },
- // 文件上传中处理
- handleFileUploadProgress(event, file, fileList) {
- this.upload.isUploading = true;
- },
- // 文件上传成功处理
- handleFileSuccess(response, file, fileList) {
- this.upload.open = false;
- this.upload.isUploading = false;
- this.$refs.upload.clearFiles();
- if (response.data[0] != null) {
- this.$alert(this.$t('成功导入') + response.msg + this.$t('条数据') + "," + this.$t('第') + response.data + this.$t('行数据出现错误导入失败') + "。", this.$t('导入结果'), {dangerouslyUseHTMLString: true});
- } else {
- this.$alert(this.$t('成功导入') + response.msg + this.$t('条数据'), this.$t('导入结果'), {dangerouslyUseHTMLString: true});
- }
- this.getList();
- },
- /** 报告附件按钮操作 */
- handleDoc(row) {
- this.doc.id = row.id;
- this.doc.title = row.filename;
- this.doc.open = true;
- this.doc.queryParams.pId = row.id
- this.doc.pId = row.id
- this.getFileList()
- this.$nextTick(() => {
- this.$refs.doc.clearFiles()
- })
- },
- getFileList() {
- allFileList(this.doc.queryParams).then(response => {
- this.doc.commonfileList = response;
- });
- },
- //附件上传中处理
- handleFileDocProgress(event, file, fileList) {
- this.doc.file = file;
- this.doc.isUploading = true;
- },
- //附件上传成功处理
- handleFileDocSuccess(response, file, fileList) {
- this.doc.isUploading = false;
- this.$alert(response.msg, this.$t('导入结果'), {dangerouslyUseHTMLString: true});
- this.getFileList()
- },
- /** 删除按钮操作 */
- handleDeleteDoc(row) {
- const ids = row.id || this.ids;
- this.$confirm(this.$t('是否确认删除?'), this.$t('警告'), {
- confirmButtonText: this.$t('确定'),
- cancelButtonText: this.$t('取消'),
- type: "warning"
- }).then(function () {
- return delCommonfile(ids);
- }).then(() => {
- this.getFileList()
- this.msgSuccess(this.$t('删除成功'));
- })
- },
- // 文件下载处理
- handleDownload(row) {
- var name = row.fileName;
- var url = row.fileUrl;
- var suffix = url.substring(url.lastIndexOf("."), url.length);
- console.log(url)
- const a = document.createElement('a')
- a.setAttribute('download', name)
- a.setAttribute('target', '_blank')
- a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
- a.click()
- },
- // 提交上传文件
- submitFileForm() {
- this.$refs.upload.submit();
- },
- //数据分析
- handleData() {
- this.sonRefresh = false;
- this.$nextTick(() => {
- this.sonRefresh = true;
- });
- this.drawer = true
- },
- //文件预览
- openPdf() {
- //ppt就跳路由预览,office就直接打开文件新页面
- const didi = {imgs: this.imgs}
- if (this.pptView == true && this.ppt == false) {
- let routeUrl = this.$router.resolve({
- path: "/cpms/index.html#/pptyulan",
- query: didi
- });
- window.open("/cpms/index.html#/pptyulan?id=" + this.pdf.pdfUrl, '_blank')
- console.log(this.imgs)
- } else {
- window.open(this.pdf.pdfUrl)
- }
- },
- handleSeePPT(row) {
- //ppt预览
- this.loadingFlash = true
- this.pdf.open = true
- this.pdf.title = row.fileName
- this.pdf.pdfUrl = row.fileUrl
- this.pptView = true
- this.ppt = false
- const formatDate = new FormData();
- formatDate.append("filepath", row.fileUrl)
- //调用文件预览api
- let res = this.officeConvert.pptConvertCommon(formatDate)
- //查看接受的全局方法的返回结果 console.log(res)
- //利用.then方法接受Promise对象
- res.then((result) => {
- //关闭加载中
- this.loadingFlash = false
- //成功时直接给地址
- this.videoList = result.data.imagePathList
- //将返回的地址集合遍历添加到绑定的数组中
- this.imgs = []
- for (var key = 0; key < this.videoList.length; key++) {
- this.imgs.push(process.env.VUE_APP_BASE_API + this.videoList[key]);
- }
- }).catch(result => {
- //请求失败,关闭loading,pdf地址直接为为空,不显示
- this.pdf.pdfUrl = ""
- this.loadingFlash = false;
- })
- },
- handleSee(row) {
- //office预览
- this.loadingFlash = true
- this.pdf.open = true
- this.pdf.title = row.fileName
- this.pdf.pdfUrl = ""
- this.pptView = false
- this.ppt = true
- //如果是PDF等直接可以打开的就不调接口,否则调用接口
- if (row.fileName.endsWith('pdf')) {
- this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + '/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl
- this.loadingFlash = false
- } else {
- const formatDate = new FormData();
- formatDate.append("filepath", row.fileUrl)
- //调用文件预览api
- let res = this.officeConvert.officeConvertCommon(formatDate)
- //查看接受的全局方法的返回结果 console.log(res)
- //利用.then方法接受Promise对象
- res.then((result) => {
- //关闭加载中
- this.loadingFlash = false
- if (result.msg.includes("csv")) {
- this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + result.data
- this.$alert(result.msg, this.$t('检查乱码'), {dangerouslyUseHTMLString: true});
- // this.$message({message: result.msg, center: true,type:'warning', offset:400, });
- } else if (result.msg.includes("不存在")) {
- //文件不存在时提示
- this.pdf.pdfUrl = ""
- this.$alert(result.msg, this.$t('预览失败'), {dangerouslyUseHTMLString: true});
- // this.$message({message: result.msg, center: true,type:'warning', offset:400, });
- this.pdf.open = false
- } else if (result.msg.includes("不支持此格式")) {
- this.pdf.pdfUrl = ""
- this.$alert(result.msg, this.$t('预览失败'), {dangerouslyUseHTMLString: true});
- // this.$message({message: result.msg, center: true,type:'warning', offset:400, });
- this.pdf.open = false
- } else {
- //成功时直接给地址
- this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + result.data
- }
- // this.$nextTick(() => {
- // const iframe = window.frames['iFrame']
- // const handleLoad = () => {
- // setTimeout(() => {
- // const Do = (iframe.contentWindow || iframe.contentDocument)
- // console.log(Do.document.getElementsByTagName('table')[0])
- // Do.document.getElementsByTagName('table')[0].style.width = "100%"
- // Do.document.getElementsByTagName('table')[0].setAttribute("class","table")
- // }, 500)
- // }
- // iframe.addEventListener('load', handleLoad, true)
- // })
- }).catch(result => {
- //请求失败,关闭loading,pdf地址直接为为空,不显示
- this.pdf.pdfUrl = ""
- this.loadingFlash = false;
- })
- }
- },
- }
- }
- </script>
- <style lang="scss">
- .table {
- width: 100%;
- max-width: 100%;
- > thead,
- > tbody,
- > tfoot {
- > tr {
- > th,
- > td {
- vertical-align: top;
- border-top: 1px solid;
- }
- }
- }
- > thead > tr > th {
- vertical-align: bottom;
- border-bottom: 2px solid;
- }
- > caption + thead,
- > colgroup + thead,
- > thead:first-child {
- > tr:first-child {
- > th,
- > td {
- border-top: 0;
- }
- }
- }
- > tbody + tbody {
- border-top: 2px solid;
- }
- }
- </style>
|