From 9083fd270cd172f998eb2dd3dfae59187a70cb1a Mon Sep 17 00:00:00 2001
From: quanyawei <401863037@qq.com>
Date: Sat, 07 Oct 2023 09:31:11 +0800
Subject: [PATCH] Merge branch 'feature_1.0'

---
 src/views/toCarryOutLegislativeReforms/components/workOrderInformation.vue |  575 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 575 insertions(+), 0 deletions(-)

diff --git a/src/views/toCarryOutLegislativeReforms/components/workOrderInformation.vue b/src/views/toCarryOutLegislativeReforms/components/workOrderInformation.vue
new file mode 100644
index 0000000..575969e
--- /dev/null
+++ b/src/views/toCarryOutLegislativeReforms/components/workOrderInformation.vue
@@ -0,0 +1,575 @@
+<template>
+  <div>
+    <el-dialog :title="dialogData.title" top="30px" :visible.sync="visible" width="900px" center :before-close="close">
+      <div slot="title" class="titBox">
+        <div>{{ parentFormData.allocationNum }}</div>
+        <div>{{ dialogData.title }}</div>
+      </div>
+      <div>
+        <div v-if="dialogData.pageType !=='delay'" class="stepsList">
+          <el-steps :space="200" :active="parentFormData.approveList.length+1" align-center>
+            <el-step
+              v-for="(item,index) in setepList"
+              :key="index"
+              :title="'' + item.createName + ' ' + item.stateName"
+              :description="item.createTime"
+            />
+          </el-steps>
+        </div>
+        <div class="inforData">
+          <el-descriptions title="������������" :column="parseInt('4')">
+            <el-descriptions-item label="������������" label-class-name="itemSpan">{{ parentFormData.escalationTime }}</el-descriptions-item>
+            <el-descriptions-item label="������������" label-class-name="itemSpan">{{ parentFormData.pollutePosition }}</el-descriptions-item>
+            <el-descriptions-item label="������������" label-class-name="itemSpan">{{ unitIdFormatter }}</el-descriptions-item>
+            <el-descriptions-item label="������������" label-class-name="itemSpan">{{ polluteTypeFormatter }}</el-descriptions-item>
+            <el-descriptions-item label="������������" label-class-name="itemSpan">{{ dictObj.changeEnum[parentFormData.changeType] }}</el-descriptions-item>
+            <el-descriptions-item label="������������" label-class-name="itemSpan">{{ parentFormData.changeDay }}</el-descriptions-item>
+            <el-descriptions-item label="������������" label-class-name="itemSpan">{{ updataUnitIdFormatter }}</el-descriptions-item>
+            <el-descriptions-item label="���������" label-class-name="itemSpan">{{ parentFormData.escalationName }}</el-descriptions-item>
+          </el-descriptions>
+          <el-descriptions :column="parseInt('1')">
+            <el-descriptions-item label="������������" label-class-name="itemSpan" :content-style="{'width': '80%'}">{{ parentFormData.problemDescribe }}</el-descriptions-item>
+            <el-descriptions-item label="������" label-class-name="itemSpan" :content-style="{'width': '80%'}">
+              <div>
+                <div v-for="(file,index) in fileBaseListCover" :key="file.id+index" class="block">
+                  <el-image
+                    v-if="file.fileType ===1"
+                    style="width: 100px; height: 100px"
+                    :src="file.url"
+                    :preview-src-list="getPreviewImages(file.id,fileBaseList)"
+                    :initial-index="index"
+                  />
+                  <video v-else :src="file.url" style="width: 100px; height: 100px" @click="openVideo(file)">
+                    ������������������������ video ���������
+                  </video>
+                </div>
+              </div>
+            </el-descriptions-item>
+          </el-descriptions>
+        </div>
+        <!-- ������������������ -->
+        <div v-if="dialogData.pageType ==='work'" class="rectification">
+          <div>
+            <el-form label-width="90px" class="demo-form-inline">
+              <div style="display: flex;">
+                <el-form-item label="������������:">
+                  <el-radio-group v-model="workForme.isChange">
+                    <el-radio :label="0">���</el-radio>
+                    <el-radio :label="1">���</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+                <el-form-item label="���������:">
+                  <el-input v-model="workForme.changeName" size="mini" placeholder="������������������" />
+                </el-form-item>
+              </div>
+              <el-form-item label="������������:">
+                <el-input
+                  v-model="workForme.changeDescribe"
+                  type="textarea"
+                  :autosize="{ minRows: 2, maxRows: 4}"
+                  placeholder="���������������"
+                />
+              </el-form-item>
+              <el-row>
+                <el-form-item label="������:">
+                  <uploadFile :upload-url="uploadTermExcelUrl" :sys-code="dialogData.sysCode" />
+                </el-form-item>
+              </el-row>
+
+            </el-form>
+          </div>
+        </div>
+        <!-- ������������ -->
+        <div v-if="(dialogData.pageType ==='detail'||dialogData.pageType ==='approve' )&& parentFormData.state >=30">
+          <el-row class="rectificationContent">
+            <el-col :span="12"><div class="grid-content bg-purple" />
+              <el-descriptions title="������������" :column="parseInt('2')">
+                <el-descriptions-item label="������������" label-class-name="itemSpan">{{ parentFormData.changeType }}</el-descriptions-item>
+                <el-descriptions-item label="���������" label-class-name="itemSpan">{{ parentFormData.changeName }}</el-descriptions-item>
+              </el-descriptions>
+              <el-descriptions :column="parseInt('1')">
+                <el-descriptions-item label="������������" label-class-name="itemSpan">{{ parentFormData.changeDescribe }}</el-descriptions-item>
+              </el-descriptions>
+            </el-col>
+            <el-col :span="12"><div class="grid-content bg-purple-light" />
+              <el-row>
+                <el-col :span="3" style="margin-top: 40px;font-size: 15px;color: #101010;"><div class="grid-content bg-purple" />���������</el-col>
+                <el-col :span="21"><div class="grid-content bg-purple-light" />
+                  <div>
+                    <div v-for="(file,index) in fileChangeListCover" :key="file.id+index" class="block">
+                      <el-image
+                        v-if="file.fileType ===1"
+                        style="width: 100px; height: 100px"
+                        :src="file.url"
+                        :preview-src-list="getPreviewImages(file.id,fileChangeList)"
+                        :initial-index="index"
+                      />
+                      <video v-else :src="file.url" style="width: 100px; height: 100px" @click="openVideo(file)">
+                        ������������������������ video ���������
+                      </video>
+                    </div>
+                  </div>
+                </el-col>
+              </el-row>
+            </el-col>
+          </el-row>
+        </div>
+        <!-- ������������ -->
+        <div v-if="dialogData.pageType ==='detail'&& parentFormData.state>30">
+          <el-row class="rectificationContent">
+            <el-col :span="12"><div class="grid-content bg-purple" />
+              <el-descriptions title="������������" :column="2">
+                <el-descriptions-item label="������������" label-class-name="itemSpan">{{ parentFormData.checkScore }}</el-descriptions-item>
+              </el-descriptions>
+              <el-descriptions :column="1">
+                <el-descriptions-item label="������" label-class-name="itemSpan">{{ parentFormData.checkDescribe }}</el-descriptions-item>
+              </el-descriptions>
+            </el-col>
+            <el-col :span="12"><div class="grid-content bg-purple-light" />
+              <el-row>
+                <el-col :span="3" style="margin-top: 40px;font-size: 15px;color: #101010;"><div class="grid-content bg-purple" />���������</el-col>
+                <el-col :span="21"><div class="grid-content bg-purple-light" />
+                  <div>
+                    <div>
+                      <div v-for="(file,index) in fileApproveListCover" :key="file.id+index" class="block">
+                        <el-image
+                          v-if="file.fileType ===1"
+                          style="width: 100px; height: 100px"
+                          :src="file.url"
+                          :preview-src-list="getPreviewImages(file.id,fileApproveList)"
+                          :initial-index="index"
+                        />
+                        <video v-else :src="file.url" style="width: 100px; height: 100px" @click="openVideo(file)">
+                          ������������������������ video ���������
+                        </video>
+                      </div>
+                    </div>
+                  </div>
+                </el-col>
+              </el-row>
+            </el-col>
+          </el-row>
+        </div>
+        <!-- ������������ -->
+        <div v-if="(dialogData.pageType ==='delay' && (dialogData.pageState ==='view' ||dialogData.pageState ==='edit'))">
+          <el-row class="rectificationContent">
+            <el-col :span="12"><div class="grid-content bg-purple" />
+              <el-descriptions title="������������" :column="1">
+                <el-descriptions-item label="������������" label-class-name="itemSpan">{{ parentFormData.extensionNum }}</el-descriptions-item>
+                <el-descriptions-item label="������������" label-class-name="itemSpan">{{ parentFormData.remake }}</el-descriptions-item>
+              </el-descriptions>
+            </el-col>
+            <el-col :span="12"><div class="grid-content bg-purple-light" />
+              <el-row>
+                <el-col :span="3" style="margin-top: 40px;font-size: 15px;color: #101010;"><div class="grid-content bg-purple" />���������</el-col>
+                <el-col :span="21"><div class="grid-content bg-purple-light" />
+                  <div>
+                    <div v-for="(file,index) in fileDelayListCover" :key="file.id+index" class="block">
+                      <el-image
+                        v-if="file.fileType ===1"
+                        style="width: 100px; height: 100px"
+                        :src="file.url"
+                        :preview-src-list="getPreviewImages(file.id,fileDelayList)"
+                        :initial-index="index"
+                      />
+                      <video v-else :src="file.url" style="width: 100px; height: 100px" @click="openVideo(file)">
+                        ������������������������ video ���������
+                      </video>
+                    </div>
+                  </div></el-col>
+              </el-row>
+            </el-col>
+          </el-row>
+        </div>
+        <!-- ������������ -->
+        <div v-if="dialogData.pageType ==='approve'" class="examineAndApprove">
+          <el-form label-width="90px" :model="rectificationFromData" class="demo-form-inline">
+            <el-form-item label="������������:">
+              <el-input v-model="approveForm.checkScore" style="width: 120px;" size="mini" />
+            </el-form-item>
+            <el-form-item label="������:">
+              <el-input
+                v-model="approveForm.checkDescribe"
+                type="textarea"
+                :autosize="{ minRows: 2, maxRows: 4}"
+                placeholder="���������������"
+              />
+            </el-form-item>
+            <el-form-item label="������:">
+              <uploadFile :upload-url="uploadTermExcelUrl" :sys-code="dialogData.sysCode" />
+            </el-form-item>
+          </el-form>
+        </div>
+        <!-- ������������ -->
+        <div v-if="dialogData.pageType ==='delay' && ( dialogData.pageState ==='approve')" class="examineAndApprove">
+          <el-form label-width="90px" :model="rectificationFromData" class="demo-form-inline">
+            <el-form-item label="������������:">
+              <el-input v-model="delayForm.extensionNum" style="width: 200px;" />
+            </el-form-item>
+            <el-form-item label="������������:">
+              <el-input
+                v-model="delayForm.remake"
+                type="textarea"
+                :autosize="{ minRows: 2, maxRows: 4}"
+                placeholder="���������������"
+              />
+            </el-form-item>
+            <el-form-item label="������:">
+              <uploadFile :upload-url="uploadTermExcelUrl" :sys-code="dialogData.sysCode" />
+            </el-form-item>
+          </el-form>
+        </div>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="close()">������</el-button>
+        <el-button v-if="dialogData.pageType ==='approve'" type="danger" @click="handleSubmit(50)">������</el-button>
+        <el-button v-if="dialogData.pageType ==='delay'&& dialogData.pageState ==='edit'" type="danger" @click="handleDelaySubmit(50)">������</el-button>
+        <el-button v-if="dialogData.pageType ==='delay'&& dialogData.pageState ==='edit'" type="primary" @click="handleDelaySubmit(40)">������</el-button>
+        <el-button v-if="dialogData.pageType !=='detail'&& dialogData.pageState ==='approve'" type="primary" @click="handleSubmit(40)">������</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog :visible.sync="videoVisible" width="600px" :modal-append-to-body="false" :destroy-on-close="true" @close="handleCancel">
+      <div style="text-align: center;">
+        <video
+          ref="video"
+          style="width: 300px;height: 500px"
+          :src="dialogImageUrl"
+          controls
+          autoplay
+        />
+      </div>
+    </el-dialog>
+  </div>
+</template>
+p
+<script>
+import _ from 'lodash'
+import uploadFile from '@/components/UploadExcel/index'
+import Bus from '@/Bus'
+import requestObj from '@/utils/request'
+
+export default {
+  components: {
+    uploadFile
+  },
+  props: {
+    dialogData: { type: Object, default: () => {} },
+    visible: { type: Boolean, required: true }
+  },
+  data() {
+    return {
+      centerDialogVisible: true,
+      workForme: {
+        isChange: 0,
+        changeName: '',
+        changeDescribe: ''
+      },
+      approveForm: {
+        checkScore: '',
+        checkDescribe: ''
+      },
+      delayForm: {
+        remake: '',
+        extensionNum: ''
+      },
+      rectificationFromData: {
+
+      },
+      dialogVisibleMainGraph: false,
+      hasFile: '',
+      setepListAdd: {
+        set1: [
+          { createName: '', stateName: '������', createTime: '' },
+          { createName: '', stateName: '������', createTime: '' },
+          { createName: '', stateName: '������', createTime: '' }
+        ],
+        set2: [
+          { createName: '', stateName: '������', createTime: '' },
+          { createName: '', stateName: '������', createTime: '' }
+        ],
+        set3: [
+          { createName: '', stateName: '������', createTime: '' }
+        ]
+      },
+      unitList: [],
+      polluteList: [],
+      fileList: [],
+      Dic: JSON.parse(localStorage.getItem('dict')),
+      dictObj: JSON.parse(localStorage.getItem('dictObj')),
+      fileBaseList: [],
+      fileChangeList: [],
+      fileApproveList: [],
+      fileBaseListCover: [],
+      fileChangeListCover: [],
+      fileApproveListCover: [],
+      fileDelayListCover: [],
+      fileDelayList: [],
+      videoVisible: false,
+      dialogImageUrl: ''
+    }
+  },
+  computed: {
+    uploadTermExcelUrl() {
+      return `${requestObj.baseUrl}/file/upload`
+    },
+    parentFormData() {
+      console.log('parentFormData.approveList', this.dialogData.parentFormData)
+      return this.dialogData.parentFormData
+    },
+    updataUnitIdFormatter: function() {
+      const data = this.unitList.find(item => item && item.unitId === this.dialogData.parentFormData.escalationUnitId)
+      return data ? data.unitName : ''
+    },
+    unitIdFormatter: function() {
+      const data = this.unitList.find(item => item && item.unitId === this.dialogData.parentFormData.unitId)
+      return data ? data.unitName : ''
+    },
+    polluteTypeFormatter: function() {
+      const data = this.polluteList.find(item => item && parseInt(item.dataKey) === this.dialogData.parentFormData.polluteType)
+      return data ? data.dataValue : ''
+    },
+    setepList() {
+      const leng = this.dialogData.parentFormData.approveList.length
+      let data = _.cloneDeep(this.dialogData.parentFormData.approveList)
+
+      if (leng === 1) {
+        data = [...data, ...this.setepListAdd.set1]
+      }
+      if (leng === 2) {
+        data = [...data, ...this.setepListAdd.set2]
+      }
+      if (leng === 3) {
+        data = [...data, ...this.setepListAdd.set3]
+      }
+      console.log('data', leng)
+      return data
+    }
+  },
+  watch: {
+    'parentFormData': {
+      handler(newVal) {
+        this.searchthisFileList(newVal)
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  created() {
+    const name = this.$store.state.user.name
+    this.workForme.changeName = name
+    this.getContaminateList()
+    this.getUnitList()
+    Bus.$on('changeFileAfterList', (type, fileList) => {
+      console.log('fileList', fileList)
+      this.fileList = []
+      if (fileList.length > 0) {
+        fileList.map((item) => {
+          if (item.response) {
+            this.fileList.push(item.response.data)
+          }
+        })
+      }
+    })
+  },
+  methods: {
+    getPreviewImages(index, list) {
+      let startIndex = 0
+      const chechList = _.cloneDeep(list)
+      chechList.forEach((item, i) => {
+        const str = item.substring(item.lastIndexOf('/') + 1)
+        if (Number(str) === Number(index)) {
+          startIndex = i
+        }
+      })
+      console.log('startIndex', startIndex)
+      var imgList = [...list]
+      if (index === 0) return imgList
+      var start = imgList.splice(startIndex)
+      var remain = imgList.splice(0, startIndex)
+      return start.concat(remain)
+    },
+    openVideo(item) {
+      console.log('item', item)
+      this.dialogImageUrl = item.url
+      this.videoVisible = true
+    },
+    handleCancel() {
+      this.dialogImageUrl = ''
+      this.videoVisible = false
+    },
+    searchthisFileList(newVal) {
+      if (newVal.fileBaseList && newVal.fileBaseList.length > 0) {
+        newVal.fileBaseList.forEach(item => {
+          if (item.fileType === 1) {
+            this.fileBaseList.push(`${requestObj.baseUrl}/file/preview/${item.fileId}`) // ������
+          }
+
+          this.fileBaseListCover.push({
+            url: item.fileType === 1 ? `${requestObj.baseUrl}/file/preview/cover/${item.fileId}` : `${requestObj.baseUrl}/file/preview/${item.fileId}`,
+            fileType: item.fileType,
+            id: item.fileId
+          })
+        })
+        console.log('fileBaseList', this.fileBaseList)
+      }
+      if (newVal.fileChangeList && newVal.fileChangeList.length > 0) {
+        newVal.fileChangeList.forEach(item => {
+          if (item.fileType === 1) {
+            this.fileChangeList.push(`${requestObj.baseUrl}/file/preview/${item.fileId}`) // ������
+          }
+          this.fileChangeListCover.push({
+            url: item.fileType === 1 ? `${requestObj.baseUrl}/file/preview/cover/${item.fileId}` : `${requestObj.baseUrl}/file/preview/${item.fileId}`,
+            fileType: item.fileType,
+            id: item.fileId
+          })
+        })
+      }
+      if (newVal.fileApproveList && newVal.fileApproveList.length > 0) {
+        newVal.fileApproveList.forEach(item => {
+          if (item.fileType === 1) {
+            this.fileApproveList.push(`${requestObj.baseUrl}/file/preview/${item.fileId}`) // ������
+          }
+          this.fileApproveList.push(`${requestObj.baseUrl}/file/preview/${item.fileId}`) // ������
+          this.fileApproveListCover.push({
+            url: item.fileType === 1 ? `${requestObj.baseUrl}/file/preview/cover/${item.fileId}` : `${requestObj.baseUrl}/file/preview/${item.fileId}`,
+            fileType: item.fileType,
+            id: item.fileId
+          })
+        })
+      }
+      if (newVal.fileList && newVal.fileList.length > 0) {
+        newVal.fileList.forEach(item => {
+          if (item.fileType === 1) {
+            this.fileDelayList.push(`${requestObj.baseUrl}/file/preview/${item.fileId}`) // ������
+          }
+          this.fileDelayList.push(`${requestObj.baseUrl}/file/preview/${item.fileId}`) // ������
+          this.fileDelayListCover.push({
+            url: item.fileType === 1 ? `${requestObj.baseUrl}/file/preview/cover/${item.fileId}` : `${requestObj.baseUrl}/file/preview/${item.fileId}`,
+            fileType: item.fileType,
+            id: item.fileId
+          })
+        })
+      }
+    },
+    close() {
+      this.$emit('update:visible', false)
+    },
+    // ������������������list
+    getUnitList() {
+      this.$request({
+        url: '/allocation/unit',
+        method: 'get'
+      }).then((res) => {
+        this.unitList = res.data
+      })
+    },
+    handleDelaySubmit(state) {
+      this.$request({
+        url: '/allocationExtension/check',
+        method: 'get',
+        params: {
+          id: this.dialogData.parentFormData.id,
+          state: state
+        }
+      }).then((res) => {
+        if (res.code === 0) {
+          this.$emit('update:visible', false)
+          this.$emit('handeleSumit')
+        } else {
+          this.$message.error(res.message)
+        }
+      })
+    },
+    handleSubmit(state) {
+      // ������
+      let api = '/allocation/change'
+      let data = {}
+      console.log('this.dialogData.pageType', this.dialogData.pageType)
+      if (this.dialogData.pageType === 'work') {
+        api = '/allocation/change'
+        data = {
+          'allocationId': this.dialogData.parentFormData.allocationId,
+          ...this.workForme,
+          'fileChangeList': this.fileList,
+          state: 30
+        }
+      } else if (this.dialogData.pageType === 'approve') {
+        api = '/allocation/check'
+        data = {
+          'allocationId': this.dialogData.parentFormData.allocationId,
+          ...this.approveForm,
+          'fileApproveList': this.fileList,
+          state: state
+        }
+      } else if (this.dialogData.pageType === 'delay') {
+        api = '/allocation/applyfor'
+        data = {
+          'allocationId': this.dialogData.parentFormData.allocationId,
+          ...this.delayForm,
+          'fileList': this.fileList
+        }
+      }
+      this.$request({
+        url: api,
+        method: 'post',
+        data: data
+      }).then((res) => {
+        if (res.code === 0) {
+          this.$emit('update:visible', false)
+          this.$emit('handeleSumit')
+        } else {
+          this.$message.error(res.message)
+        }
+      })
+    },
+    getContaminateList() {
+      this.$request({
+        url: '/allocation/contaminate',
+        method: 'get'
+      }).then((res) => {
+        this.polluteList = res.data
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.titBox{
+  position: relative;
+  font-size: 18px;
+  div:first-child{
+    position: absolute;
+    left: 10px;
+  }
+  div{
+    display: inline-block;
+  }
+}
+.stepsList {
+  border-bottom: 1px dashed rgba(187, 187, 187, 1);
+  padding-bottom: 10px;
+}
+.inforData{
+  margin-top: 20px;
+  border-bottom: 1px dashed rgba(187, 187, 187, 1);
+  padding-bottom: 10px;
+  font-size: 15px!important;
+  color: rgba(16, 16, 16, 1)!important;
+}
+  /deep/.itemSpan{
+    width: 70px;
+    text-align: right;
+    font-size: 15px;
+    color: rgba(16, 16, 16, 1);
+  }
+  .rectification ,.examineAndApprove,.rectificationContent{
+    margin-top: 20px;
+    border-bottom: 1px dashed rgba(187, 187, 187, 1);
+    margin-bottom: 10px;
+  }
+  .block {
+    display: inline-block;
+    margin-right: 10px;
+}
+</style>

--
Gitblit v1.8.0