wang_xy 10 månader sedan
förälder
incheckning
ad60d843ca

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1126 - 1052
src/components/ConstructionDetails/index.vue


+ 288 - 0
src/components/ObsImageUpload/indexToVideo.vue

@@ -0,0 +1,288 @@
+<template>
+  <div>
+    <el-dialog
+      :visible.sync="videodialogVisible"
+      title="预览"
+      width="500px"
+      :modal="false"
+      style=" pointer-events: none"
+      append-to-body
+    >
+      <video
+        v-if="videodialogVisible"
+        :src="dialogImageUrl"
+        id="video"
+        autoplay
+        loop
+        muted
+        controls
+        style="display: block; max-width: 800px; max-height: 600px; margin: 0 auto" controls="controls"/>
+    </el-dialog>
+    <el-form>
+      <el-upload ref="fileList"
+                 :disabled="disabled"
+                 :action="uploadImgUrl"
+                 list-type="picture-card"
+                 :on-success="handleUploadSuccess"
+                 :before-upload="handleBeforeUpload"
+                 :limit="limit"
+                 :on-error="handleUploadError"
+                 :on-exceed="handleExceed"
+                 name="file"
+                 :on-remove="handleRemove"
+                 :show-file-list="true"
+                 :headers="headers"
+                 :file-list="fileList"
+                 :on-preview="handlePictureCardPreview"
+                 :class="{hide: this.fileList.length >= this.limit,obsImageUploads:disabled?'obsImageUploads':''}"
+      >
+        <i class="el-icon-plus abs"></i>
+      </el-upload>
+
+      <!-- 上传提示 -->
+      <div class="el-upload__tip" slot="tip" v-if="showTip">
+        请上传
+        <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b></template>
+        <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b></template>
+        的文件
+      </div>
+
+      <el-image-viewer
+        v-if="dialogVisible"
+        zIndex="9999"
+        :on-close="closeImgViewer"
+        :url-list="fileList.map(t => t.url).filter(t=>!(t.slice(t.lastIndexOf('.')+1)==='mp4'))"
+        :initial-index="imgIndex"
+      />
+
+      <!--    <el-dialog-->
+      <!--      :visible.sync="dialogVisible"-->
+      <!--      title="预览"-->
+      <!--      width="800px"-->
+      <!--      append-to-body-->
+      <!--    >-->
+      <!--      <video v-if="type==='mp4'"-->
+      <!--             :src="dialogImageUrl"-->
+      <!--             style="display: block; max-width: 100%; margin: 0 auto" controls="controls"/>-->
+      <!--      <el-image v-else-->
+      <!--           :src="dialogImageUrl"-->
+      <!--           :preview-src-list="[dialogImageUrl]"-->
+      <!--           style="display: block; max-width: 70%; margin: 0 auto"-->
+      <!--      />-->
+      <!--    </el-dialog>-->
+    </el-form>
+
+  </div>
+</template>
+
+<script>
+import {getToken} from "@/utils/auth";
+import ElImageViewer from "element-ui/packages/image/src/image-viewer";
+
+export default {
+  components: {
+    ElImageViewer,
+  },
+  props: {
+    value: [String, Object, Array],
+    // 图片数量限制
+    limit: {
+      type: Number,
+      default: 5,
+    },
+    // 大小限制(MB)
+    fileSize: {
+      type: Number,
+      default: 5,
+    },
+    disabled: {
+      type: Boolean,
+      default: false
+    },
+    // 文件类型, 例如['png', 'jpg', 'jpeg']
+    fileType: {
+      type: Array,
+      default: () => ["png", "jpg", "jpeg", "mp4"],
+    },
+    // 是否显示提示
+    isShowTip: {
+      type: Boolean,
+      default: true
+    }
+  },
+  data() {
+    return {
+      dialogImageUrl: "",
+      dialogVisible: false,
+      videodialogVisible: false,
+      hideUpload: false,
+      type: "",
+      baseUrl: process.env.VUE_APP_BASE_API,
+      uploadImgUrl: process.env.VUE_APP_BASE_API + "/obs", // 上传的图片服务器地址
+      headers: {
+        Authorization: "Bearer " + getToken(),
+      },
+      imgIndex: 0,
+      fileList: []
+    };
+  },
+  watch: {
+    value: {
+      handler(val) {
+        if (val) {
+          // 首先将值转为数组
+          const list = Array.isArray(val) ? val : this.value.split(',');
+          // 然后将数组转为对象数组
+          this.fileList = list.map(item => {
+            if (typeof item === "string") {
+              item = {name: item, url: item, suffix: item.substring(item.lastIndexOf('.') + 1)};
+            }
+            return item;
+          });
+        } else {
+          this.fileList = [];
+          return [];
+        }
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  computed: {
+    // 是否显示提示
+    showTip() {
+      return this.isShowTip && (this.fileType || this.fileSize);
+    },
+  },
+  methods: {
+    /**
+     * @description 关闭图片查看器
+     */
+    closeImgViewer() {
+      this.imgIndex = 0;
+      this.dialogVisible = false;
+    },
+
+    // 删除图片
+    handleRemove(file, fileList) {
+      const findex = this.fileList.map(f => f.url).indexOf(file.url);
+      if (findex > -1) {
+        if (file.url != null) {
+          // picDel({picUrl:file.url}).then(res=>{})
+          this.fileList.splice(findex, 1);
+        }
+      }
+      this.$emit("input", this.fileList);
+    },
+    // 上传成功回调
+    handleUploadSuccess(res) {
+      if (res.code == 200) {
+        this.fileList.push({name: res.data.fileName, url: res.data.url});
+        this.$emit("input", this.fileList);
+        this.loading.close();
+      } else {
+        this.$message.error(res.msg);
+        this.loading.close();
+      }
+    },
+    // 上传前loading加载
+    handleBeforeUpload(file) {
+      let isImg = false;
+      if (this.fileType.length) {
+        let fileExtension = "";
+        if (file.name.lastIndexOf(".") > -1) {
+          fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
+        }
+        isImg = this.fileType.some((type) => {
+          if (file.type.indexOf(type) > -1) return true;
+          if (fileExtension && fileExtension.indexOf(type) > -1) return true;
+          return false;
+        });
+      } else {
+        isImg = file.type.indexOf("image") > -1;
+      }
+
+      if (!isImg) {
+        this.$message.warning(
+          `文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!`
+        );
+        return false;
+      }
+      if (this.fileSize) {
+        const isLt = file.size / 1024 / 1024 < this.fileSize;
+        if (!isLt) {
+          this.$message.warning(`上传头像图片大小不能超过 ${this.fileSize} MB!`);
+          return false;
+        }
+      }
+      this.loading = this.$loading({
+        lock: true,
+        text: "上传中",
+        background: "rgba(0, 0, 0, 0.7)",
+      });
+    },
+    // 文件个数超出
+    handleExceed() {
+      this.$message.warning(`上传文件数量不能超过 ${this.limit} 个!`);
+    },
+    // 上传失败
+    handleUploadError(res) {
+      this.$message({
+        type: "error",
+        message: "上传失败",
+      });
+      this.loading.close();
+    },
+    // 预览
+    handlePictureCardPreview(file) {
+      this.dialogImageUrl = file.url;
+      this.type = file.name.slice(file.name.lastIndexOf(".") + 1);
+      this.imgIndex = this.fileList.map(t => t.url).filter(t => !(t.slice(t.lastIndexOf('.') + 1) == 'mp4')).indexOf(file.url);
+      console.log(this.imgIndex)
+      if (this.type == 'mp4') {
+        this.videodialogVisible = true;
+      } else {
+        this.dialogVisible = true;
+      }
+    },
+    // 对象转成指定字符串分隔
+    listToString(list, separator) {
+      let strs = "";
+      separator = separator || ",";
+      for (let i in list) {
+        strs += list[i].url + separator;
+      }
+      return strs != '' ? strs.substr(0, strs.length - 1) : '';
+    }
+  }
+};
+</script>
+<style scoped lang="scss">
+::v-deep .el-dialog {
+  left: 34% !important;
+  pointer-events: auto !important;
+}
+
+// .el-upload--picture-card 控制加号部分
+::v-deep.hide .el-upload--picture-card {
+  display: none;
+}
+
+// 去掉动画效果
+::v-deep .el-list-enter-active,
+::v-deep .el-list-leave-active {
+  transition: all 0s;
+}
+
+::v-deep .el-list-enter, .el-list-leave-active {
+  opacity: 0;
+  transform: translateY(0);
+}
+
+::v-deep .obsImageUploads {
+  .el-upload--picture-card {
+    display: none;
+  }
+}
+</style>
+

+ 2 - 0
src/store/modules/user.js

@@ -1,5 +1,6 @@
 import { login, logout, getInfo } from '@/api/login'
 import { getToken, setToken, removeToken } from '@/utils/auth'
+import Cookies from "js-cookie";
 
 const user = {
   state: {
@@ -56,6 +57,7 @@ const user = {
       return new Promise((resolve, reject) => {
         getInfo().then(res => {
           const user = res.data.user
+          Cookies.set("username", user.userName);
           const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : user.avatar;
           if (res.data.roles && res.data.roles.length > 0) { // 验证返回的roles是否是一个非空数组
             commit('SET_ROLES', res.data.roles)

+ 11 - 1
src/views/system/user/index.vue

@@ -39,6 +39,15 @@
               @keyup.enter.native="handleQuery"
             />
           </el-form-item>
+          <el-form-item label="用户姓名" prop="nickName">
+            <el-input
+              v-model="queryParams.nickName"
+              placeholder="请输入用户名称"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
           <el-form-item label="手机号码" prop="phonenumber">
             <el-input
               v-model="queryParams.phonenumber"
@@ -435,7 +444,8 @@ export default {
         userName: undefined,
         phonenumber: undefined,
         status: undefined,
-        deptId: undefined
+        deptId: undefined,
+        nickName:undefined,
       },
       // 列信息
       columns: [

+ 85 - 17
src/views/zdsz/engineeringCivil/index.vue

@@ -206,21 +206,43 @@
           plain
           icon="el-icon-download"
           size="mini"
-          @click="handleExportColor"
+          @click="exportBottomLeg"
           v-hasPermi="['zdsz:engineeringCivil:export']"
-        >颜色导出
+        >底腿导出
         </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
-          type="danger"
-          icon="el-icon-circle-check"
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="exportObtainQualifiedRoom"
+          v-hasPermi="['zdsz:engineeringCivil:export']"
+        >合格房间导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
           size="mini"
-          @click="handleCheckings"
-          v-hasPermi="['zdsz:engineeringCivil:batchreview']"
-        >批量审核
+          @click="handleExportColor"
+          v-hasPermi="['zdsz:engineeringCivil:export']"
+        >颜色导出
         </el-button>
       </el-col>
+<!--      <el-col :span="1.5">-->
+<!--        <el-button-->
+<!--          type="danger"-->
+<!--          icon="el-icon-circle-check"-->
+<!--          size="mini"-->
+<!--          @click="handleCheckings"-->
+<!--          v-hasPermi="['zdsz:engineeringCivil:batchreview']"-->
+<!--        >批量审核-->
+<!--        </el-button>-->
+<!--      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="success"
@@ -231,7 +253,7 @@
         >节点开关
         </el-button>
       </el-col>
-      <el-col :span="2.5" style="margin-left: 60%">
+      <el-col :span="2.5" style="margin-left: 29%">
         <el-button
           type="danger"
           plain
@@ -243,6 +265,18 @@
         >删除
         </el-button>
       </el-col>
+      <el-col :span="2.5" style="float: right;">
+        <span
+          style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #c0c0c0;"></span>无数据
+        <span
+          style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #e0c794;"></span>待审核
+        <span
+          style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #30B08F;"></span>通过
+        <span
+          style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #C03639;"></span>不通过
+        <span
+          style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #5d5050;"></span>底腿未完工
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     <el-table v-loading="loading" :data="engineeringCivilList" @selection-change="handleSelectionChange">
@@ -277,11 +311,23 @@
               placement="top-start"
               trigger="hover"
               :content="item.Type">
+<!--              <span slot="reference" v-if="(item.state == '1'||item.state == '2') && item.Type != '开栓'"-->
+<!--                    style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #30B08F;"></span>-->
+<!--              <span slot="reference" v-if="item.state == '0' && item.Type != '开栓'"-->
+<!--                    style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #C03639;"></span>-->
 
-              <span slot="reference" v-if="(item.state == '1'||item.state == '2') && item.Type != '开栓'"
+
+              <span slot="reference" v-if="item.state == '-1' && item.content=='无数据' && item.Type != '开栓'"
+                    style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #c0c0c0;"></span>
+              <span slot="reference" v-if="item.state == '0' && item.content=='暂未审核' && item.Type != '开栓'"
+                    style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #e0c794;"></span>
+              <span slot="reference" v-if="(item.state == '1'||item.state == '2') && item.Type != '开栓' "
                     style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #30B08F;"></span>
-              <span slot="reference" v-if="item.state == '0' && item.Type != '开栓'"
+              <span slot="reference" v-if="item.state == '99' && item.Type != '开栓'"
+                    style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #5d5050;"></span>
+              <span slot="reference" v-if="item.state == '0' && item.content!='暂未审核' && item.Type != '开栓'"
                     style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #C03639;"></span>
+
               <span slot="reference" v-if="(item.state == '0' || item.state == '2') && item.Type == '开栓'" @click="gotoOpenGas(scope.row)"
                     style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #ffff00;"></span>
               <span slot="reference" v-if="item.state == '1' && item.Type == '开栓'" @click="gotoOpenGas(scope.row)"
@@ -1301,10 +1347,12 @@ export default {
         }, {
           value: '1',
           label: '审核通过'
-        },
-        {
+        },{
           value: '2',
           label: '未审核'
+        },{
+          value: '99',
+          label: '无数据'
         }
       ],
       // 按钮loading
@@ -2205,11 +2253,31 @@ export default {
       });
     },
     /** 导出按钮操作 */
-    handleExport() {
+    exportBottomLeg() {
       if (this.queryParams1.district == undefined || this.queryParams1.district == null || this.queryParams1.district == '') {
         this.$message.warning("请选择行政区")
         return
       }
+      this.download('zdsz/engineeringCivil/exportBottomLeg', {
+        ...this.queryParams1
+      }, `民用工程-${new Date().getTime()}.xlsx`)
+    },
+    /** 导出按钮操作 */
+    exportObtainQualifiedRoom() {
+      if (this.queryParams1.beginTime == undefined || this.queryParams1.beginTime == null || this.queryParams1.beginTime.length <= 0) {
+        this.$message.warning("请选择施工时间")
+        return
+      }
+      this.download('zdsz/engineeringCivil/exportObtainQualifiedRoom', {
+        ...this.queryParams1
+      }, `民用工程-${new Date().getTime()}.xlsx`)
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      // if (this.queryParams1.district == undefined || this.queryParams1.district == null || this.queryParams1.district == '') {
+      //   this.$message.warning("请选择行政区")
+      //   return
+      // }
       if (this.queryParams1.enginType == undefined || this.queryParams1.enginType == null || this.queryParams1.enginType == '') {
         this.$message.warning("请选择工程类型")
         return
@@ -2223,10 +2291,10 @@ export default {
       }, `民用工程-${new Date().getTime()}.xlsx`)
     },
     handleExportColor() {
-      if (this.queryParams1.district == undefined || this.queryParams1.district == null || this.queryParams1.district == '') {
-        this.$message.warning("请选择行政区")
-        return
-      }
+      // if (this.queryParams1.district == undefined || this.queryParams1.district == null || this.queryParams1.district == '') {
+      //   this.$message.warning("请选择行政区")
+      //   return
+      // }
       if (this.queryParams1.enginType == undefined || this.queryParams1.enginType == null || this.queryParams1.enginType == '') {
         this.$message.warning("请选择工程类型")
         return

+ 16 - 1
src/views/zdsz/enginnotInstalled/index.vue

@@ -92,6 +92,17 @@
       </el-form-item>
     </el-form>
     <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['zdsz:engineeringCivil:export']"
+        >导出
+        </el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     <el-table v-loading="loading" :data="enginNotInstalledList">
@@ -250,8 +261,12 @@
         this.unitList = []
         this.currentEnginTypeChangeOptions1 = []
         this.handleQuery();
+      },
+      handleExport(){
+        this.download('zdsz/enginNotInstalled/export', {
+          ...this.queryParams
+        }, `民用工程-${new Date().getTime()}.xlsx`)
       }
-
     }
   };
 </script>

+ 22 - 22
src/views/zdsz/touchOperationEngineering/index.vue

@@ -435,17 +435,17 @@ export default {
     updateviewSource(e) {
       this.currentId = e.id
       let dists = e.modeOperation;
-      // if ("地埋扳孔"  == e.modeOperation){
-      //   dists="bury_the_wrench_hole";
-      // }else if ("架空扳孔"  == e.modeOperation){
-      //   dists="aerial_wrench_hole";
-      // }else if ("停气作业"  == e.modeOperation){
-      //   dists="shutdown_operation";
-      // }else if ("PE 封堵"  == e.modeOperation){
-      //   dists="pe_plugging";
-      // }else if ("钢管带气封堵"  == e.modeOperation){
-      //   dists="the_steel_pipe_sealed_with_gas";
-      // }
+      if ("地埋扳孔"  == e.modeOperation){
+        dists="bury_the_wrench_hole";
+      }else if ("架空扳孔"  == e.modeOperation){
+        dists="aerial_wrench_hole";
+      }else if ("停气作业"  == e.modeOperation){
+        dists="shutdown_operation";
+      }else if ("PE 封堵"  == e.modeOperation){
+        dists="pe_plugging";
+      }else if ("钢管带气封堵"  == e.modeOperation){
+        dists="the_steel_pipe_sealed_with_gas";
+      }
       getDicts(dists).then(res => {
         this.nodeList = res.data
         let dict = []
@@ -586,17 +586,17 @@ export default {
         this.open = true;
         this.title = "添加碰口作业用料信息";
         let dists = response.data.modeOperation;
-        // if ("地埋扳孔"  == response.data.modeOperation){
-        //   dists="bury_the_wrench_hole";
-        // }else if ("架空扳孔"  == response.data.modeOperation){
-        //   dists="aerial_wrench_hole";
-        // }else if ("停气作业"  == response.data.modeOperation){
-        //   dists="shutdown_operation";
-        // }else if ("PE 封堵"  == response.data.modeOperation){
-        //   dists="pe_plugging";
-        // }else if ("钢管带气封堵"  == response.data.modeOperation){
-        //   dists="the_steel_pipe_sealed_with_gas";
-        // }
+        if ("地埋扳孔"  == response.data.modeOperation){
+          dists="bury_the_wrench_hole";
+        }else if ("架空扳孔"  == response.data.modeOperation){
+          dists="aerial_wrench_hole";
+        }else if ("停气作业"  == response.data.modeOperation){
+          dists="shutdown_operation";
+        }else if ("PE 封堵"  == response.data.modeOperation){
+          dists="pe_plugging";
+        }else if ("钢管带气封堵"  == response.data.modeOperation){
+          dists="the_steel_pipe_sealed_with_gas";
+        }
         getDicts(dists).then(res => {
           this.nodeList = res.data
         })