123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707 |
- <template>
- <zj-page-container>
- <zj-page-fill class="neibuview">
- <zj-form-container style="margin-bottom:40px">
- <!-- 完工明细 -->
- <zj-form-module v-if="!look" title="完工明细">
- <zj-table ref="tableEl" :isDrop="true" :columns="completionDetailColumns" :tableData="completionDetailData"
- :tableAttributes="{
- border: true
- }"></zj-table>
- <div class="fr">
- <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageNum"
- :page-sizes="[10, 20, 30, 50]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper"
- :total="listTotal"></el-pagination>
- </div>
- </zj-form-module>
- <!-- 内外机条码信息 -->
- <zj-form-module v-if="look" title="内外机条码信息" class="header_right_btn">
- <div slot="header" class="btn">
- <el-button v-if="orderDetailFiles.length" type="primary" size="mini" @click="imgVisible = true"> 预览图片
- </el-button>
- </div>
- <zj-table ref="tableEl" :isDrop="true" :columns="barcodeColumns" :tableData="barcodeData" :tableAttributes="{
- border: true
- }"></zj-table>
- </zj-form-module>
- <!-- 图片采集信息 -->
- <zj-form-module v-if="look" title="图片采集信息">
- <div class="imgCJ">
- <div v-for="(v, i) in orderDetailFiles" :key="i">
- <el-image v-if="checkFileType(v.filePath) !== 'mp4'" style="width: 210px; height: 280px"
- :src="$imageUrl + v.filePath" :preview-src-list="[$imageUrl + v.filePath]">
- <div slot="error" style="height: 100%; display: flex; justify-content: center; align-items: center">
- <i>暂无图片</i>
- </div>
- </el-image>
- <video v-else width="210" height="280" controls>
- <source :src="$imageUrl + v.filePath" />
- </video>
- <div class="imgTitle">
- {{ v.fileName }}
- </div>
- </div>
- </div>
- </zj-form-module>
- <!-- 其他信息 -->
- <zj-form-module v-if="look" title="其他信息" label-width="120px" :formData="formData" :formItems="otherFormItems"
- :column="1">
- </zj-form-module>
- </zj-form-container>
- <div v-if="look" class="fixBtnStyle">
- <el-button size="mini" type="info" @click="look = false">关闭</el-button>
- <el-button v-if="isCancel && $restrict('discardCollectionData')" size="mini" @click="handlerCancelData"
- type="primary">作废采集数据</el-button>
- </div>
- <el-dialog title="图片预览" :visible.sync="imgVisible" :close-on-click-modal="false" :modal-append-to-body="false"
- width="50%" top="8vh" @close="imgVisible = false">
- <div>
- <div class="box">
- <div style="min-height: 200px;" class="flex" v-for="(v, i) in orderDetailFiles" :key="i">
- <el-image v-if="checkFileType(v.filePath) !== 'mp4'" style="width: 720px; height: auto"
- :src="$imageUrl + v.filePath" :preview-src-list="[$imageUrl + v.filePath]">
- <div slot="error"
- style="width: 720px;height: auto; display: flex; justify-content: center; align-items: center">
- <i>暂无图片</i>
- </div>
- </el-image>
- <video v-else width="720" height="960" controls>
- <source :src="$imageUrl + v.filePath" />
- </video>
- <div class="imgTitle" style=" flex: 0 0 200px; margin-right: 20px; color: #f00">
- {{ v.fileName }}
- <div style=" margin-top: 20px;">
- <span v-if="v.fileType == 1">内机条码: {{ v.code }}</span>
- <span v-if="v.fileType == 3">外机机条码: {{ v.code }}</span>
- </div>
- </div>
- </div>
- </div>
- </div>
- </el-dialog>
- </zj-page-fill>
- </zj-page-container>
- </template>
- <script>
- //完工明细--------------------------------------------
- // import otherMixin from '../createWorker/mixin/otherMixin'
- // import {
- // orderInstallOverList,
- // orderInstallOverDetail,
- // orderRepairOverDetail,
- // orderCancelInstallGatherDetail
- // } from '@/api/detailModule'
- export default {
- // mixins: [otherMixin],
- props: {},
- filters: {
- imgTitleChange(value) {
- let data = [
- {
- type: 1,
- title: '内机'
- },
- {
- type: 2,
- title: '上墙图片'
- },
- {
- type: 3,
- title: '外机'
- },
- {
- type: 4,
- title: '内机其他'
- },
- {
- type: 5,
- title: '外机其他'
- },
- {
- type: 6,
- title: '旧机内机整机图片'
- },
- {
- type: 7,
- title: '旧机外机整机图片'
- },
- {
- type: 8,
- title: '定位确认书'
- },
- {
- type: 9,
- title: '室外机固定图'
- },
- {
- type: 10,
- title: '冷凝水管软接图'
- },
- {
- type: 11,
- title: '外机电源接线图'
- },
- {
- type: 12,
- title: '外机出管处封堵图'
- },
- {
- type: 13,
- title: '室内机安装图'
- },
- {
- type: 14,
- title: '冷凝水管通气孔图'
- },
- {
- type: 15,
- title: '室内机走管图'
- },
- {
- type: 16,
- title: '抽真空保压图片'
- },
- {
- type: 17,
- title: '电子清单'
- },
- {
- type: 18,
- title: '安装完成图片'
- },
- {
- type: 19,
- title: '验收报告'
- },
- {
- type: 20,
- title: '故障位置图'
- }
- ]
- for (const key in data) {
- if (data[key].type == value) {
- return data[key].title
- }
- }
- }
- },
- data() {
- return {
- look: false,
- barcodeData: [],
- formData: {
- bracket: '',
- pipe: '',
- swithFlag: '',
- highAltitude: '',
- hole: ''
- },
- formRules: {},
- pageSize: 15,
- pageNum: 1,
- listTotal: 0,
- completionDetailData: [],
- orderDetailFiles: [],
- orderType: '',
- orderId: '',
- orderDetailId: '', //工单采集明细id
- isCancel: false,
- dispatchStatus: '',
- imgVisible: false,
- status: null
- }
- },
- computed: {
- completionDetailColumns() {
- return [
- {
- columnAttributes: {
- width: 130,
- fixed: 'left',
- align: 'center',
- label: '操作',
- prop: 'teamWorkerName'
- },
- render: (h, { row, column, $index }) => {
- return (
- <div style="">
- <el-button
- size="mini"
- type="text"
- onClick={async () => {
- this.look = true
- this.isCancel = row.status != 2 && this.dispatchStatus !== 'YBWG' ? true : false
- this.getListDetail(row.id, this.orderType)
- }}
- >
- 查看
- </el-button>
- {row.status == 1 ? (
- <el-button size="mini" type="text" onClick={async () => { }}>
- 结算单
- </el-button>
- ) : null}
- {row.status == 1 && this.$restrict('discardCollectionData') ? (
- <el-popconfirm
- style="margin-left:10px"
- onConfirm={async () => {
- this.orderDetailId = row.id
- this.handlerCancel()
- }}
- title="是否确定需要作废该项内容?"
- >
- <el-button slot="reference" size="mini" type="text">
- 作废
- </el-button>
- </el-popconfirm>
- ) : null}
- </div>
- )
- }
- },
- {
- columnAttributes: {
- label: '结算状态',
- prop: 'isSettle'
- },
- render: (h, { row, column, $index }) => {
- return <div style="padding-left:6px">{row.isSettle == 'NO' ? '否' : '是'}</div>
- }
- },
- {
- columnAttributes: {
- label: '转结标签',
- prop: ''
- }
- },
- {
- columnAttributes: {
- label: '产品信息',
- prop: 'productName',
- width: 130
- }
- },
- {
- columnAttributes: {
- label: '内机条码',
- prop: 'insideCode',
- width: 130
- }
- },
- {
- columnAttributes: {
- label: '外机条码',
- prop: 'outCode',
- width: 130
- }
- },
- {
- columnAttributes: {
- label: '操作内容',
- prop: 'type'
- },
- render: (h, { row, column, $index }) => {
- return (
- <div style="padding-left:6px">
- {row.type == 'ALL'
- ? '一体机'
- : row.type == 'INSIDE'
- ? '内机'
- : row.type == 'OUT'
- ? '外机'
- : row.type == 'INSIDE_OUT'
- ? '一内一外'
- : ''}
- </div>
- )
- }
- },
- {
- columnAttributes: {
- label: '采集人',
- prop: 'operatorName'
- }
- },
- {
- columnAttributes: {
- label: '大小工',
- prop: '',
- width: 180
- },
- render: (h, { row, column, $index }) => {
- return (
- <div style="padding-left:6px">
- {row.mainWorkerName}{row.assistWorkerName ? ',' : ''}{row.assistWorkerName}
- </div>
- )
- }
- },
- {
- columnAttributes: {
- label: '状态',
- prop: 'status'
- },
- render: (h, { row, column, $index }) => {
- return (
- <div style="padding-left:6px">
- {row.status == 0
- ? '未采集'
- : row.status == 1
- ? '已采集'
- : row.status == 2
- ? '作废'
- : row.status == 3
- ? '临时保存'
- : ''}
- </div>
- )
- }
- },
- {
- columnAttributes: {
- label: '采集时间',
- prop: 'firstTime'
- }
- },
- {
- columnAttributes: {
- label: '采集来源',
- prop: 'detailSource'
- },
- render: (h, { row, column, $index }) => {
- return (
- <div style="padding-left:6px">
- {row.detailSource == 0 ? '总部' : row.detailSource == 2 ? '家盛茂' : '广佛'}
- </div>
- )
- }
- },
- {
- columnAttributes: {
- label: '提交采集时地址',
- width: 130,
- prop: 'latLngAddress'
- }
- },
- {
- columnAttributes: {
- label: '最后采集图片时(总部结算-GPS定位地址)',
- width: 260,
- prop: 'gpsAddress'
- }
- }
- ]
- },
- barcodeColumns() {
- return [
- {
- columnAttributes: {
- label: '序号',
- prop: ''
- },
- render: (h, { row, column, index }) => {
- return <div style="padding-left:6px">{index + 1}</div>
- }
- },
- {
- columnAttributes: {
- label: '条码',
- prop: ''
- },
- render: (h, { row, column, $index }) => {
- return (
- <div style="padding-left:6px">
- {row.type == 1 ? '内机条码' : row.type == 2 ? '外机条码' : ''} {row.code}
- </div>
- )
- }
- },
- // {
- // columnAttributes: {
- // label: '外机条码',
- // prop: 'brandName'
- // }
- // },
- {
- columnAttributes: {
- label: '开机密码',
- prop: 'insidePassword'
- }
- },
- ...(() => {
- return [3, 4].includes(this.status) ? [{
- columnAttributes: {
- label: '图片',
- prop: ''
- },
- render: (h, { row, column, $index }) => {
- return (
- <div style="padding-left:6px">
- <el-image
- style="width: 210px; height: 280px"
- src={row.path ? this.$imageUrl + row.path : ''}
- preview-src-list={row.path ? [this.$imageUrl + row.path] : []}
- >
- <div slot="error" style="height: 100%; display: flex; justify-content: center; align-items: center">
- <i>暂无图片</i>
- </div>
- </el-image>
- </div>
- )
- }
- }] : []
- })()
- ]
- },
- otherFormItems() {
- return [
- {
- name: 'el-input',
- md: 6,
- options: [],
- attributes: { disabled: false },
- formItemAttributes: { label: '支架', prop: 'bracket' }
- },
- {
- name: 'el-input',
- md: 6,
- options: [],
- attributes: { disabled: false },
- formItemAttributes: { label: '加长管', prop: 'pipe' }
- },
- {
- name: 'el-input',
- md: 6,
- options: [],
- attributes: { disabled: false },
- formItemAttributes: { label: '空气开关', prop: 'swithFlag' }
- },
- {
- name: 'el-input',
- md: 6,
- options: [],
- attributes: { disabled: false },
- formItemAttributes: { label: '高空作业', prop: 'highAltitude' }
- },
- {
- name: 'el-input',
- md: 6,
- options: [],
- attributes: { disabled: false },
- formItemAttributes: { label: '一次性成型墙孔', prop: 'hole' }
- },
- {
- name: 'el-input',
- md: 24,
- options: [],
- attributes: { disabled: false, type: 'textarea' },
- formItemAttributes: { label: '备注', prop: 'remark' }
- }
- ]
- }
- },
- methods: {
- // 检查文件类型
- checkFileType(url) {
- return url.substring(url.lastIndexOf('.') + 1)
- },
- //作废采集数据
- handlerCancelData() {
- this.$confirm('此操作将作废已采集数据, 是否继续?', '提示', {
- confirmButtonText: '是',
- cancelButtonText: '否',
- type: 'warning',
- closeOnClickModal: false,
- closeOnPressEscape: false,
- showClose: false
- }).then(() => {
- this.handlerCancel()
- }).catch(() => {
- });
- },
- async handlerCancel() {
- let params = {
- orderBaseId: this.orderId,
- orderDetailId: this.orderDetailId
- }
- await orderCancelInstallGatherDetail(params)
- this.$message.success('作废采集成功')
- this.look = false
- this.isCancel = false
- this.getDetail(this.orderId, this.orderType)
- },
- handleSizeChange(val) {
- this.pageSize = val
- this.pageNum = 1
- this.getDetail(this.orderId, this.orderType)
- },
- handleCurrentChange(val) {
- this.pageNum = val
- this.getDetail(this.orderId, this.orderType)
- },
- //完工详情
- async getListDetail(id, orderType) {
- if (orderType == 'INSTALL' || orderType === 'RECOVERY') {
- this.orderDetailId = id //工单采集明细id
- let { data } = await orderInstallOverDetail({ id })
- const neiji = []
- const waiji = []
- const neijiqit = []
- const waijiqit = []
- const caiji = []
- const qit = []
- const tshjazqrs = []
- for (let index = 0; index < data.orderDetailFiles.length; index++) {
- const el = data.orderDetailFiles[index]
- if (el.fileType == 1) {
- el.code = data.orderInstallDetailCodes.find(k => k.type == 1)?.code
- neiji.push(el)
- }
- if (el.fileType == 3) {
- el.code = data.orderInstallDetailCodes.find(k => k.type == 2)?.code
- waiji.push(el)
- }
- if (el.fileType == 4) {
- neijiqit.push(el)
- }
- if (el.fileType == 5) {
- waijiqit.push(el)
- }
- if (![1, 3, 4, 5, 21, 44].includes(el.fileType)) {
- caiji.push(el)
- }
- if (el.fileType == 21) {
- qit.push(el)
- }
- if (el.fileType == 44) {
- tshjazqrs.push(el)
- }
- }
- this.orderDetailFiles = [...neiji, ...waiji, ...neijiqit, ...waijiqit, ...caiji, ...qit, ...tshjazqrs]
- data.orderInstallDetailCodes.forEach(v => {
- v.insidePassword = data.insidePassword
- })
- this.barcodeData = data.orderInstallDetailCodes
- this.formData = {
- bracket: data.bracket,
- pipe: data.pipe,
- swithFlag: data.swithFlag,
- highAltitude: data.highAltitude,
- hole: data.hole,
- remark: data.remark
- }
- }
- if (orderType == 'REPAIR') {
- let { data } = await orderRepairOverDetail({ id })
- }
- },
- //完工明细
- async getDetail(orderBaseId, type) {
- let params = {
- orderBaseId,
- pageSize: this.pageSize,
- pageNum: this.pageNum
- }
- if (type == 'INSTALL' || type === 'RECOVERY') {
- let { data } = await orderInstallOverList(params)
- this.completionDetailData = data.records
- this.listTotal = data.total
- }
- },
- init(id, params, status) {
- this.orderType = params.orderType
- this.dispatchStatus = params.dispatchStatus
- this.orderId = id
- this.status = status
- this.getDetail(this.orderId, this.orderType)
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .neibuview {
- box-sizing: border-box;
- padding-left: 16px;
- ::v-deep .zj-page-fill-scroll {
- box-sizing: border-box;
- padding-right: 16px;
- &>div:nth-child(1) {
- margin-top: 20px;
- }
- }
- }
- .fixBtnStyle {
- position: fixed;
- bottom: 0;
- z-index: 2000;
- padding: 10px 0 30px;
- width: calc(100vw - 120px);
- background-color: #fff
- }
- ::v-deep .header_right_btn {
- .el-card__header {
- div[class='zj-page-container zj-page-container-row'] {
- align-items: center;
- }
- }
- }
- .btn {
- float: right;
- }
- .flex {
- display: flex;
- flex-direction: row-reverse;
- align-items: center;
- justify-content: flex-end;
- margin-left: 40px;
- padding-bottom: 30px;
- }
- .box {
- height: calc(100vh - 84px);
- padding-bottom: 84px;
- overflow-y: auto
- }
- ::v-deep .el-dialog__wrapper {
- position: absolute;
- top: 0;
- left: 0;
- }
- ::v-deep .el-dialog {
- margin: 0 auto !important;
- width: 100% !important;
- height: 100% !important;
- overflow: hidden;
- }
- .imgCJ {
- display: flex;
- justify-content: flex-start;
- flex-wrap: wrap;
- >div {
- flex: 0 calc((100% - 210px)/6);
- margin-right: 23px;
- }
- .imgTitle {
- font-size: 14px;
- margin: 10px 0 20px;
- }
- }
- </style>
|