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/newWorkOrder.vue |  393 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 393 insertions(+), 0 deletions(-)

diff --git a/src/views/toCarryOutLegislativeReforms/components/newWorkOrder.vue b/src/views/toCarryOutLegislativeReforms/components/newWorkOrder.vue
new file mode 100644
index 0000000..3a5489f
--- /dev/null
+++ b/src/views/toCarryOutLegislativeReforms/components/newWorkOrder.vue
@@ -0,0 +1,393 @@
+<template>
+  <div>
+    <el-dialog :title="title" :visible.sync="visible" top="30px" width="900px" center :before-close="close">
+      <div slot="title" class="titBox">
+        <div>{{ parentFormData.allocationNum }}</div>
+        <div>{{ title }}</div>
+      </div>
+      <div>
+        <el-form ref="ruleForm" :disabled="pageState==='detail'" label-width="100px" :model="formData" class="demo-form-inline" :rules="rules">
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="���������������" prop="escalationTime" class="span">
+                <el-date-picker
+                  v-model="formData.escalationTime"
+                  value-format="yyyy-MM-dd"
+                  size="small"
+                  type="date"
+                  placeholder="������������"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="���������������" prop="pollutePosition" class="span">
+                <el-input v-model="formData.pollutePosition" type="text" placeholder="���������" size="small" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="���������������" prop="unitId" class="span">
+                <el-select v-model="formData.unitId" placeholder="���������" size="small">
+                  <el-option
+                    v-for="item in unitList"
+                    :key="item.unitId"
+                    :label="item.unitName"
+                    :value="item.unitId"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="���������������" prop="polluteType" class="span">
+                <el-select v-model="formData.polluteType" placeholder="���������" size="small">
+                  <el-option
+                    v-for="item in polluteList"
+                    :key="item.dataKey"
+                    :label="item.dataValue"
+                    :value="item.dataKey"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="���������������" prop="changeType" class="span">
+                <el-select v-model="formData.changeType" placeholder="���������" size="small" @change="changeEnumList">
+                  <el-option
+                    v-for="item in Dic.changeEnum"
+                    :key="item.value"
+                    :label="item.name"
+                    :value="item.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="���������������" prop="changeDay" class="span">
+                <el-input-number v-model="formData.changeDay" :disabled="formData.changeType===1" :min="0" label="���������" />
+                <!-- <el-input v-model.number="formData.changeDay" :disabled="formData.changeType===1" type="text" placeholder="���������" size="small" /> -->
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="���������������" prop="escalationUnitId" class="span">
+                <el-select v-model="formData.escalationUnitId" placeholder="���������" size="small">
+                  <el-option
+                    v-for="item in unitList"
+                    :key="item.unitId"
+                    :label="item.unitName"
+                    :value="item.unitId"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="������������" prop="escalationName" class="span">
+                <el-input v-model="formData.escalationName" type="text" placeholder="���������" size="small" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="24">
+              <el-form-item label="���������������" prop="investigationType" class="span">
+                <el-radio-group v-model="formData.investigationType" size="small">
+                  <el-radio v-for="(item) in Dic.investigationEnum" :key="item.value" :label="item.value">{{ item.name }}</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-form-item label="���������������" prop="problemDescribe" class="span">
+              <el-input v-model="formData.problemDescribe" type="textarea" :rows="4" placeholder="���������������" />
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="���������">
+              <div>
+                <div v-if="pageState==='edit'">
+                  <div v-for="(file,index) in fileBaseListCover" :key="file.fileId+index" class="block">
+                    <el-image
+                      v-if="file.fileType ===1"
+                      style="width: 100px; height: 100px"
+                      :src="file.url"
+                      :preview-src-list="getPreviewImages(file.fileId,fileBaseList)"
+                      :initial-index="index"
+                    />
+                    <video v-else :src="file.url" style="width: 100px; height: 100px" @click="openVideo(file)">
+                      ������������������������ video ���������
+                    </video>
+                  </div>
+                </div>
+              </div>
+              <uploadFile v-if="pageState!=='detail'" :upload-url="uploadTermExcelUrl" :sys-code="sysCode" />
+            </el-form-item>
+          </el-row>
+        </el-form>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="close">������</el-button>
+        <el-button v-if="pageState!=='detail'" type="info" @click="handleSubmit('9')">������</el-button>
+        <el-button v-if="pageState!=='detail'" type="primary" @click="handleSubmit('10')">������</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>
+
+<script>
+import uploadFile from '@/components/UploadExcel/index'
+import bus from '@/Bus'
+import requestObj from '@/utils/request'
+import _ from 'lodash'
+export default {
+  components: { uploadFile },
+  props: {
+    title: { type: String, default: '' },
+    visible: { type: Boolean, required: true },
+    pageState: { type: String, required: true, default: 'add' },
+    parentFormData: { type: Object, default: () => {} }
+  },
+  data() {
+    return {
+      videoVisible: false,
+      formData: {
+        fileBaseList: [],
+        escalationName: '',
+        changeDay: 0,
+        investigationType: 1
+      },
+      fileBaseList: [],
+      fileBaseListCover: [],
+      sysCode: '1010201', //
+      Dic: JSON.parse(localStorage.getItem('dict')),
+      unitList: [],
+      polluteList: [],
+      dialogImageUrl: '',
+      rules: {
+        escalationTime: [
+          { required: true, message: '���������������������', trigger: 'change' }
+        ],
+        pollutePosition: [
+          { required: true, message: '���������������������', trigger: 'blur' }
+        ],
+        unitId: [
+          { required: true, message: '���������������������', trigger: 'change' }
+        ],
+        polluteType: [
+          { required: true, message: '���������������������', trigger: 'change' }
+        ],
+        changeType: [
+          { required: true, message: '���������������������', trigger: 'change' }
+        ],
+        changeDay: [
+          { required: true, message: '���������������', trigger: 'blur' }
+        ],
+        escalationUnitId: [
+          { required: true, message: '���������������������', trigger: 'change' }
+        ],
+        investigationType: [
+          { required: true, message: '���������������������', trigger: 'change' }
+        ],
+        escalationName: [
+          { required: true, message: '������������������', trigger: 'blur' }
+        ],
+        problemDescribe: [
+          { required: true, message: '���������������������', trigger: 'blur' }
+        ]
+      }
+    }
+  },
+  computed: {
+    uploadTermExcelUrl() {
+      return `${requestObj.baseUrl}/file/upload`
+    }
+  },
+  watch: {
+    'pageState': {
+      handler(newVal) {
+        if (this.pageState === 'edit') {
+          if (this.parentFormData.fileBaseList && this.parentFormData.fileBaseList.length > 0) {
+            this.parentFormData.fileBaseList.forEach(item => {
+              if (item.fileType === 1) {
+                this.fileBaseList.push(`${requestObj.baseUrl}file/preview/${item.fileId}`) // ������
+              }
+              // const srcApi = item.fileType === 1 ? api + 'preview/' : api + 'preview/cover/'
+              // 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,
+                fileId: item.fileId,
+                fileName: item.fileName
+              })
+            })
+            console.log('fileBaseList', this.fileBaseList)
+          }
+        }
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  created() {
+    console.log('oldValue', this.parentFormData)
+    if (!(JSON.stringify(this.parentFormData) === '{}')) {
+      this.formData = this.parentFormData
+      this.formData.polluteType = String(this.parentFormData.polluteType)
+    } else {
+      const name = this.$store.state.user.name
+      this.formData.escalationName = name
+    }
+
+    this.getUnitList()
+    this.getContaminateList()
+    bus.$on('changeFileAfterList', (type, fileList) => {
+      this.formData.fileBaseList = []
+      if (fileList.length > 0) {
+        fileList.map((item) => {
+          if (item.response) {
+            console.log('item.response.data', item.response.data)
+            this.formData.fileBaseList.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)
+        console.log('str', str)
+        if (Number(str) === Number(index)) {
+          startIndex = i
+        }
+      })
+
+      console.log('index', index)
+      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
+    },
+    changeEnumList(val) {
+      if (val === 1) {
+        this.formData.changeDay = 0
+      }
+    },
+    // ������������������list
+    getUnitList() {
+      this.$request({
+        url: '/allocation/unit',
+        method: 'get'
+      }).then((res) => {
+        this.unitList = res.data
+      })
+    },
+    getContaminateList() {
+      this.$request({
+        url: '/allocation/contaminate',
+        method: 'get'
+      }).then((res) => {
+        this.polluteList = res.data
+      })
+    },
+    close() {
+      this.$nextTick(function() {
+        this.$refs.ruleForm.resetFields()
+      })
+      this.$emit('update:visible', false)
+    },
+    handleSubmit(val) {
+      console.log('this.formData', this.formData)
+      if (this.fileBaseListCover && this.fileBaseListCover.length > 0) {
+        this.fileBaseListCover.forEach(item => {
+          this.formData.fileBaseList.push({
+            fileId: item.fileId,
+            fileName: item.fileName
+          })
+        })
+      }
+      this.formData.state = val
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          // this.formData.fileBaseList = [...this.parentFormData.fileBaseList, this.formData.fileBaseList]
+          this.$emit('handleSubmit', this.formData)
+        } else {
+          return false
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.titBox{
+  position: relative;
+  font-size: 18px;
+  div:first-child{
+    position: absolute;
+    left: 10px;
+  }
+  div{
+    display: inline-block;
+  }
+}
+.block {
+    display: inline-block !important;
+    margin-right: 10px;
+}
+.textBox {
+    display: flex;
+    justify-content: space-between;
+    margin-left: 15px;
+}
+
+.el-dialog__body>div {
+    border-bottom: 1px dashed rgba(187, 187, 187, 1);
+}
+.span{
+  /deep/.el-form-item__content {
+
+      div {
+          width: 100%;
+      }
+  }
+}
+
+.textare {
+    /deep/.el-form-item__content {
+        width: 800px;
+
+        div {
+            width: 100%;
+        }
+    }
+  }
+
+</style>

--
Gitblit v1.8.0