Forráskód Böngészése

Merge branch 'zdsz3.0' of http://192.168.10.18:3000/sunwei/zdsz_vue into zdsz3.0

付宇航 1 éve
szülő
commit
b7baa7c6ac

+ 24 - 0
src/api/rules.js

@@ -21,6 +21,12 @@ export function validPhoneMobile(rule, value, callback){
     callback();
   }
 }
+/**
+ * 验证正数,且小数可2位(包含0及正整数)
+ * @param {*} rule
+ * @param {*} value
+ * @param {*} callback
+ */
 export function checkPositiveDecimal(rule, value, callback) {
   if (value) {
     value += ''
@@ -35,3 +41,21 @@ export function checkPositiveDecimal(rule, value, callback) {
     callback()
   }
 }
+/**
+ * 验证正整数(不包含0的正整数)
+ * @param {*} rule
+ * @param {*} value
+ * @param {*} callback
+ */
+export function checkPositiveInteger(rule, value, callback) {
+  if (value) {
+    value += ''
+    if(/(^[1-9]\d*$)/.test(value)) {
+      callback()
+    } else {
+      callback(new Error('只能输入数字,数值不能为负数或0,且不能为小数'))
+    }
+  } else {
+    callback()
+  }
+}

+ 56 - 39
src/views/zdsz/engineeringDangerous/index.vue

@@ -74,7 +74,7 @@
         >删除
         </el-button>
       </el-col>
-      <el-col :span="1.5">
+<!--      <el-col :span="1.5">
         <el-button
           type="warning"
           plain
@@ -84,7 +84,7 @@
           v-hasPermi="['zdsz:engineeringDangerous:export']"
         >导出
         </el-button>
-      </el-col>
+      </el-col>-->
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
@@ -159,7 +159,8 @@
             icon="el-icon-edit"
             size="mini"
             @click="viewSource(scope.row)"
-          >历史</el-button>
+          >历史
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -351,17 +352,17 @@
         </el-row>
         <el-row>
           <el-col :span="8">
-            <el-form-item label="作业坑(长)" prop="hazardousWorkPitsLong">
+            <el-form-item label="作业坑(长)(米)" prop="hazardousWorkPitsLong">
               <el-input v-model="form.hazardousWorkPitsLong" placeholder="请填写危险作业坑大小(长)" maxlength="11"/>
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="作业坑(宽)" prop="hazardousWorkPitsWide">
+            <el-form-item label="作业坑(宽)(米)" prop="hazardousWorkPitsWide">
               <el-input v-model="form.hazardousWorkPitsWide" placeholder="请填写危险作业坑大小(宽)" maxlength="11"/>
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="作业坑(深)" prop="hazardousWorkPitsDeep">
+            <el-form-item label="作业坑(深)(米)" prop="hazardousWorkPitsDeep">
               <el-input v-model="form.hazardousWorkPitsDeep" placeholder="请填写危险作业坑大小(深)" maxlength="11"/>
             </el-form-item>
           </el-col>
@@ -399,11 +400,15 @@
         <el-row :gutter="20">
           <el-col :span="24">
             <el-form-item label="附件" prop="" v-if="currentType==='put'">
-              <ObsFileUpload ref="obsFileUpload" :file-size="100" :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg']" :limit="9999"  :value="form.pics"
+              <ObsFileUpload ref="obsFileUpload" :file-size="100"
+                             :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg']" :limit="9999"
+                             :value="form.pics"
               ></ObsFileUpload>
             </el-form-item>
             <el-form-item label="附件" prop="" v-if="currentType==='add'">
-              <ObsFileUpload ref="obsFileUpload" :file-size="100" :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg']" :limit="9999"  :value="form.files"
+              <ObsFileUpload ref="obsFileUpload" :file-size="100"
+                             :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg']" :limit="9999"
+                             :value="form.files"
               ></ObsFileUpload>
             </el-form-item>
           </el-col>
@@ -438,8 +443,7 @@ import EngineeNode from "@/components/EngineeNode/index";
 import data from "@/views/system/dict/data.vue";
 import EngineePipe from '@/components/EngineePipe'
 import ConstructionDetails from "@/components/ConstructionDetails/index.vue";
-import {validPhoneMobile,checkPositiveDecimal} from "@/api/rules";
-import {QueryEngineeIndustry} from "@/api/zdsz/engineeringIndustry";
+import {validPhoneMobile, checkPositiveDecimal} from "@/api/rules";
 
 
 export default {
@@ -450,11 +454,11 @@ export default {
     }
   },
   components: {
-    EngineePipe, EngineeNode,ConstructionDetails
+    EngineePipe, EngineeNode, ConstructionDetails
   },
   data() {
     return {
-      currentCollapses:[],
+      currentCollapses: [],
       nodeType: "危险作业工程",
       nodeDetailVisible: false,
       // 按钮loading
@@ -479,7 +483,7 @@ export default {
       open: false,
       // 查询参数
       queryParams: {
-        files:[],
+        files: [],
         pageNum: 1,
         pageSize: 10,
         basicInformation: undefined,
@@ -587,7 +591,7 @@ export default {
           {validator: checkPositiveDecimal, trigger: 'blur'},
         ],
         siteHeadPhone: [
-         // {required: true, message: "现场负责人电话不能为空", trigger: "blur"}
+          // {required: true, message: "现场负责人电话不能为空", trigger: "blur"}
           {validator: validPhoneMobile, trigger: 'blur'},
         ],
         /*   pipeDiameter: [
@@ -707,14 +711,14 @@ export default {
     this.getList();
   },
   methods: {
-    viewSource(e){
+    viewSource(e) {
       this.currentId = e.id
-      this.$refs.ConstructionDetails.open(_,"危险作业工程")
+      this.$refs.ConstructionDetails.open(_, "危险作业工程")
     },
-    viewNodeSource(e){
+    viewNodeSource(e) {
       // todo: 获取数据
       queryEngineeringDangerous({
-        id:this.currentId
+        id: this.currentId
       }).then(res => {
         try {
           this.currentCollapses = res.data.zEngineeringNodeBoList[0].zEngineeringInfoBoList
@@ -728,30 +732,34 @@ export default {
       this.getList()
     },
     toNodeDetail() {
-      if (this.currentType === 'put') {
-        this.form.files = this.$refs.obsFileUpload.fileList
-        this.$refs.childNode.open(this.form, 37)
-        this.currentType = null
-        return
-      }
-      // 加工 enginClassification 工程节点
-      // const parts = this.value[1].split('_');
-      // let result = parts.slice(2).join('_');
-      // this.queryParams.zEngineeringNodeBo.type = this.enginClassification
-      // this.queryParams.enginClassification = result
-      // console.log(this.queryParams)
-      if (this.currentType === 'add') {
-        this.form.files = this.$refs.obsFileUpload.fileList
-        this.$refs.childNode.open(this.form, 3)
-        this.currentType = null
-        return
-      }
-      return
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.currentType === 'put') {
+            this.form.files = this.$refs.obsFileUpload.fileList
+            this.$refs.childNode.open(this.form, 37, [{name: "危险作业工程"}])
+            return
+          }
+          // 加工 enginClassification 工程节点
+          // const parts = this.value[1].split('_');
+          // let result = parts.slice(2).join('_');
+          // this.queryParams.zEngineeringNodeBo.type = this.enginClassification
+          // this.queryParams.enginClassification = result
+          // console.log(this.queryParams)
+          if (this.currentType === 'add') {
+            this.form.files = this.$refs.obsFileUpload.fileList
+            this.$refs.childNode.open(this.form, 3, [{name: "危险作业工程"}])
+            return
+          }
+        }
+      })
+
+
+  /*    return
       this.$refs['form'].validate(e => {
         if (e) {
           this.nodeDetailVisible = true
         }
-      })
+      })*/
 
     },
     // 新增顶管工程
@@ -916,7 +924,16 @@ export default {
   .el-form-item:not(:nth-child(1):nth-child(2)) {
     margin-top: 0.5%;
   }
-
+  .el-form-item__error{
+    width: 200px;
+    color: #ff4949;
+    font-size: 12px;
+    line-height: 1;
+    padding-top: 4px;
+    position: absolute;
+    top: 100%;
+    left: 0;
+  }
   .remark_input {
     .el-textarea__inner {
       width: 238%;

+ 137 - 125
src/views/zdsz/engineeringIndustry/index.vue

@@ -175,11 +175,11 @@
         </el-form-item>
         <el-row :gutter="20">
           <el-col :span="24">
-            <el-form-item label="文件" prop="" v-if="currentType==='put'" style="width: 100%">
+            <el-form-item label="附件" prop="files" v-if="currentType==='put'" style="width: 100%">
               <ObsFileUpload ref="obsFileUpload" :file-size="100" :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg']" :limit="9999"  :value="form.pics"
               ></ObsFileUpload>
             </el-form-item>
-            <el-form-item label="文件" prop="" v-if="currentType==='add'" style="width: 100%">
+            <el-form-item label="附件" prop="files" v-if="currentType==='add'" style="width: 100%">
               <ObsFileUpload ref="obsFileUpload" :file-size="100" :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg']" :limit="9999"  :value="form.files"
               ></ObsFileUpload>
             </el-form-item>
@@ -193,68 +193,101 @@
     </el-dialog>
     <!-- 施工信息dialog -->
     <el-dialog :visible.sync="nodeDetailVisible" title="施工信息" append-to-body customClass="appendElNodeDialog" width="70% !important">
-          <!-- 节点表单 -->
-          <el-form ref="nodeForm" :model="form.zEngineeringNodeBo.zEngineeringInfoBo" :rules="nodeRules" label-width="200px">
-            <el-form-item label="施工时间" prop="constructTime">
-              <el-date-picker
-                v-model="form.zEngineeringNodeBo.zEngineeringInfoBo.constructTime"
-                value-format="yyyy-MM-dd hh:mm:ss"
-                type="datetime"
-                style="width: 100%"
-                placeholder="请选择施工时间">
-              </el-date-picker>
+      <!-- 节点表单 -->
+      <el-form ref="nodeForm" :model="form.zEngineeringNodeBo.zEngineeringInfoBo" :rules="nodeRules" label-width="200px">
+        <el-form-item label="施工时间" prop="constructTime">
+          <el-date-picker
+            v-model="form.zEngineeringNodeBo.zEngineeringInfoBo.constructTime"
+            value-format="yyyy-MM-dd hh:mm:ss"
+            type="datetime"
+            style="width: 100%"
+            placeholder="请选择施工时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="施工人" prop="constructUser" v-if="form.id">
+          <el-input v-model="form.zEngineeringNodeBo.zEngineeringInfoBo.constructUser" placeholder="请填写施工人" maxlength="20" disabled></el-input>
+        </el-form-item>
+        <el-row>
+          <el-form-item label="照片" prop="zEngiineeringPhotoBoList" style="width: 100%;">
+            <ObsImageUpload ref="obsImageUpload" :limit="9999" :fileType="['png', 'jpg', 'jpeg']" :value="form.zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList"
+                            @input="getUrl"></ObsImageUpload>
+          </el-form-item>
+        </el-row>
+        <el-row v-for="(item, index) in form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo" :key="index">
+          <!-- 在此处添加默认的行内容 -->
+          <template v-if="index === null">
+            <div>默认的行内容</div>
+          </template>
+          <!-- 循环输出的行内容 -->
+          <template v-else>
+            <div>{{ item }}</div>
+          </template>
+          <el-col :span="7">
+            <el-form-item
+              :prop="'zEngineeringMaterialBo.' + index + '.materialQuality'"
+              label-width="50px"
+              label="材质"
+
+            >
+              <!--                  :rules="{required: true, message: '请输入材质', trigger: 'blur'}"-->
+              <!--                  <el-input v-model="item.materialQuality" placeholder="请输入材质" style="width: 100%"/>-->
+              <el-select v-model="item.materialQuality" placeholder="请选择材质" style="width: 100%" @change="getEnginSpecificationsList(item, index)">
+                <el-option
+                  v-for="e in materialQualityList"
+                  :key="e.id"
+                  :label="e.name"
+                  :value="e.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="7">
+            <el-form-item
+              :prop="'zEngineeringMaterialBo.' + index + '.specifications'"
+              label-width="50px"
+              label="规格"
+
+            >
+              <!--                  :rules="{required: true, message: '请输入规格', trigger: 'blur'}"-->
+              <!--                  <el-input v-model="item.specifications" placeholder="请输入规格" style="width: 100%"/>-->
+              <el-select v-model="item.specifications" placeholder="请选择规格" style="width: 100%">
+                <el-option
+                  v-for="e in specificationsList"
+                  :key="e.id"
+                  :label="e.name"
+                  :value="e.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="7">
+            <el-form-item
+              :prop="'zEngineeringMaterialBo.' + index + '.number'"
+              label-width="50px"
+              label="数量"
+
+            >
+              <!--                  :rules="[{required: true, message: '请输入数量', trigger: 'change'},{validator: [checkPositiveInteger], trigger: 'blur'}]"-->
+              <div class="block" style="display: inline-block; margin-right: 20px;">
+                <el-input v-model="item.number" placeholder="请输入数量" style="width: 100%" maxlength="8"/>
+              </div>
             </el-form-item>
-            <el-form-item label="施工人" prop="constructUser" v-if="form.id">
-              <el-input v-model="form.zEngineeringNodeBo.zEngineeringInfoBo.constructUser" placeholder="请填写施工人" maxlength="20" disabled></el-input>
+          </el-col>
+          <el-col :span="3">
+            <el-form-item style="margin-left: -120px;">
+              <el-button v-if="form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo.length > 1" @click="removezEngineeringMaterialBo(index)">
+                删除
+              </el-button>
             </el-form-item>
-            <el-row>
-              <el-form-item label="照片" prop="zEngiineeringPhotoBoList" style="width: 100%;">
-                <ObsImageUpload ref="obsImageUpload" :limit="9999" :fileType="['png', 'jpg', 'jpeg']" :value="form.zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList"
-                                @input="getUrl"></ObsImageUpload>
-              </el-form-item>
-            </el-row>
-            <el-row v-for="(item, index) in form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo" :key="index">
-              <el-col :span="7">
-                <el-form-item
-                  :prop="'zEngineeringMaterialBo.' + index + '.materialQuality'"
-                  label-width="50px"
-                  label="材质"  rules="{required: true, message: '请输入材质', trigger: 'blur'}">
-                  <el-input v-model="item.materialQuality" placeholder="请输入材质" style="width: 100%"/>
-                </el-form-item>
-              </el-col>
-              <el-col :span="7">
-                <el-form-item
-                  :prop="'zEngineeringMaterialBo.' + index + '.specifications'"
-                  label-width="50px"
-                  label="规格"  rules="{required: true, message: '请输入规格', trigger: 'blur',}">
-                  <el-input v-model="item.specifications" placeholder="请输入规格" style="width: 100%"/>
-                </el-form-item>
-              </el-col>
-              <el-col :span="7">
-                <el-form-item
-                  :prop="'zEngineeringMaterialBo.' + index + '.number'"
-                  label-width="50px"
-                  label="数量"  rules="{required: true, message: '请输入数量', trigger: 'change'}">
-                  <div class="block" style="display: inline-block; margin-right: 20px;">
-                    <el-input v-model="item.number" placeholder="请输入数量" style="width: 100%"/>
-                  </div>
-                </el-form-item>
-              </el-col>
-              <el-col :span="3">
-                <el-form-item style="margin-left: -120px;">
-                  <el-button v-if="form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo.length > 1" @click="removezEngineeringMaterialBo(index)">
-                    删除
-                  </el-button>
-                </el-form-item>
-              </el-col>
-            </el-row>
-            <div style="width: 25%; float: right">
-              <el-button @click="addzEngineeringMaterialBo">新增用料信息</el-button>
-              <el-button :loading="buttonLoading" type="primary" @click="submitForm">提交</el-button>
-              <el-button @click="nodeCancel">取 消</el-button>
-            </div>
-          </el-form>
-        </el-dialog>
+          </el-col>
+        </el-row>
+        <div style="width: 25%; float: right">
+          <el-button @click="addzEngineeringMaterialBo">新增用料信息</el-button>
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">提交</el-button>
+          <el-button @click="nodeCancel">取 消</el-button>
+        </div>
+      </el-form>
+    </el-dialog>
     <ConstructionDetails
       ref="ConstructionDetails"
       :currentCollapses="currentCollapses"
@@ -271,8 +304,8 @@ import {
   QueryEngineeIndustry
 } from '@/api/zdsz/engineeringIndustry'
 import EngineePipe from '@/components/EngineePipe'
-import { validPhoneMobile } from '@/api/rules'
-import ConstructionDetails from "@/components/ConstructionDetails/index.vue";
+import { checkPositiveInteger, validPhoneMobile } from '@/api/rules'
+import ConstructionDetails from '@/components/ConstructionDetails/index.vue'
 import { getEnginMaterialQualityList } from '@/api/zdsz/enginee'
 import { getEnginSpecificationsList } from '@/api/zdsz/enginSpecifications'
 
@@ -284,25 +317,19 @@ export default {
     EngineePipe
   },
   data() {
-    var validatePicPass = (rule, value, callback) => {
-        console.log('校验值', this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList)
-        let p = new Promise((resolve, reject) => {
-            if(this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList.length != 0){
-              this.$message({
-                message: '校验通过',
-                type: 'success'
-              });
-              resolve(true)
-            }else{
-              this.$message({
-                message: 'no pass',
-                type: 'error'
-              });
-              reject(new Error('no pass'))
-            }
-        });
-        return p;
-    };
+    // 自定义校验
+    const validatePicPass = (rule, value, callback) => {
+      return new Promise((resolve, reject) => {
+        // 至少有一个图片、一个用料信息、一个创建时间
+        if (this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList.length !== 0
+          && (this.form.zEngineeringNodeBo.zEngineeringInfoBo.constructTime !== null || undefined)
+          && this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo.length !== 0) {
+          resolve(true)
+        } else {
+          reject(new Error('no pass'))
+        }
+      })
+    }
     return {
       // 按钮loading
       buttonLoading: false,
@@ -338,26 +365,6 @@ export default {
           zEngineeringInfoBo: {},    //施工信息
         }
       },
-      constructAccordingDrawingsOption: [ // 是否按图纸施工
-        {
-          value: '1',
-          label: '是'
-        },
-        {
-          value: '0',
-          label: '否'
-        }
-      ],
-      segmentedCompressionQualifiedOption: [ // 分段打压
-        {
-          value: '1',
-          label: '是'
-        },
-        {
-          value: '0',
-          label: '否'
-        }
-      ],
       nodeDetailVisible: false, // 施工信息dialog
       // 表单参数
       form: {
@@ -392,8 +399,9 @@ export default {
           },
         },
       },
-      zEngineeringAttachmentsList:[], // 工程附件
       EngineepipeType: [], // 工程类型
+      materialQualityList: [], // 用料材质List
+      specificationsList: [], // 用料规格List
       // 表单校验
       rules: {
         sceneHead: [
@@ -437,23 +445,21 @@ export default {
         type: [
           {required: false, message: "类型不能为空", trigger: "blur"}
         ],
-        remark: [
-          {required: false, message: "备注不能为空", trigger: "blur"}
-        ],
-        zEngineeringAttachmentsList: [
+        files: [
           {required: false, message: "附件不能为空", trigger: "blur"}
         ],
-
       },
       // 节点规则校验
       nodeRules: {
-        // constructTime: [
-        //   {required: true, message: "施工时间不能为空", trigger: ['blur','change']}
-        // ],
+        constructTime: [
+          {required: true, message: "施工时间不能为空", trigger: 'change', validator: validatePicPass}
+        ],
         zEngiineeringPhotoBoList: [
           {required: true, message: "图片不能为空", trigger: 'change', validator: validatePicPass}
         ],
-
+        zEngineeringMaterialBo:[
+          {required: true, message: "不能为空", trigger: 'change', validator: validatePicPass}
+        ]
       },
       currentType: null, // 附件组件类型 put修改 add新增
     };
@@ -473,8 +479,17 @@ export default {
     },500)
   },
   methods: {
+    // 验证正整数(不包含0的正整数)
+    checkPositiveInteger,
+    getEnginSpecificationsList(item, index){
+      let materialId = item.materialQuality
+      this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo[index].specifications = null
+      // 根据材质ID获取材质规格
+      getEnginSpecificationsList({ materialId }).then(res => {
+        this.specificationsList = res.data
+      })
+    },
     addzEngineeringMaterialBo(){
-      console.log(this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo)
       this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo.push({
         materialQuality: '', // 用料材质
         specifications: '', // 用料规格
@@ -540,14 +555,10 @@ export default {
     getList() {
       this.loading = true;
       let enginType = this.form.zEngineeringNodeBo.type;
-      // 获取材质 市政工程 1 - 工业工程 2
-      getEnginMaterialQualityList({enginType}).then(res => {
-        console.log(res);
+      // 获取材质
+      getEnginMaterialQualityList({ enginType }).then(res => {
+        this.materialQualityList = res.data
       });
-      // 获取材质规格
-      getEnginSpecificationsList('材质ID').then(res => {
-        console.log(res)
-      })
       getEngineeIndustryList({
         type: this.form.type
       }).then(res => {
@@ -569,10 +580,11 @@ export default {
       this.form.zEngineeringNodeBo={}
       this.form.zEngineeringNodeBo.zEngineeringInfoBo={}
       this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo=[]
-      // this.resetForm("form");
-      // for (let formKey in this.zEngineeringInfoBo) {
-      //   this.zEngineeringInfoBo[formKey] = null
-      // }
+      this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo.push({
+        materialQuality: '', // 用料材质
+        specifications: '', // 用料规格
+        number: '' // 用料数量
+      })
       this.getType()
     },
     /** 搜索按钮操作 */