董国庆
2025-12-09 332e2e6cd982c2d71028798f535a94d7b9c55b91
laboratory/src/components/DynamicComponent/addTableData.vue
@@ -28,12 +28,31 @@
                <el-form-item
                  :label="header.name"
                  :prop="header.name"
                  :rules="{
                    required:
                      header.required === true || header.required === 'true',
                    message: header.message || `请输入${header.name}`,
                    trigger: ['blur', 'change'],
                  }"
                  :rules="[
                    {
                      required:
                        (header.required === true ||
                          header.required === 'true') &&
                        isApprovaler,
                      message: header.message || `请输入${header.name}`,
                      trigger: ['blur', 'change'],
                    },
                    {
                      validator: (rule, value, callback) => {
                        if (
                          (header.required === true ||
                            header.required === 'true') &&
                          (!value || value.trim() === '') &&
                          isApprovaler
                        ) {
                          callback(header.message || `请输入${header.name}`);
                        } else {
                          callback();
                        }
                      },
                      trigger: ['blur', 'change'],
                    },
                  ]"
                  v-if="header.type == 'text'"
                >
                  <el-input
@@ -47,7 +66,9 @@
                  :prop="header.name"
                  :rules="{
                    required:
                      header.required === true || header.required === 'true',
                      (header.required === true ||
                        header.required === 'true') &&
                      isApprovaler,
                    trigger: ['blur', 'change'],
                  }"
                  class="image-form-item"
@@ -61,9 +82,18 @@
                    :auto-upload="true"
                    list-type="picture-card"
                    :before-upload="beforeImageUpload"
                    :on-change="(file, fileList) => handleImageChange(file, fileList, header.name)"
                    :on-remove="(file, fileList) => handleImageRemove(file, fileList, header.name)"
                    :on-success="(res, file, fileList) => handleImageSuccess(res, file, fileList, header.name)"
                    :on-change="
                      (file, fileList) =>
                        handleImageChange(file, fileList, header.name)
                    "
                    :on-remove="
                      (file, fileList) =>
                        handleImageRemove(file, fileList, header.name)
                    "
                    :on-success="
                      (res, file, fileList) =>
                        handleImageSuccess(res, file, fileList, header.name)
                    "
                    :on-preview="handlePreview"
                    :disabled="!checkEditPermission(header)"
                    multiple
@@ -85,7 +115,9 @@
                  :prop="header.name"
                  :rules="{
                    required:
                      header.required === true || header.required === 'true',
                      (header.required === true ||
                        header.required === 'true') &&
                      isApprovaler,
                    message: header.message || `请输入${header.name}`,
                    trigger: ['blur', 'change'],
                  }"
@@ -130,7 +162,9 @@
                  :prop="header.name"
                  :rules="{
                    required:
                      header.required === true || header.required === 'true',
                      (header.required === true ||
                        header.required === 'true') &&
                      isApprovaler,
                    message: header.message || `请输入${header.name}`,
                    trigger: ['blur', 'change'],
                  }"
@@ -233,6 +267,10 @@
      const userInfo = JSON.parse(sessionStorage.getItem("userInfo") || "{}");
      return userInfo.userId;
    },
    isApprovaler() {
      const userInfo = JSON.parse(sessionStorage.getItem("userInfo") || "{}");
      return userInfo.roleType != 3; // 不是工艺工程师
    },
  },
  watch: {
    visible: {
@@ -286,7 +324,8 @@
      if (!header.role || !Array.isArray(header.role)) {
        return true;
      }
      return header.role.includes(this.currentUserId);
      const userInfo = JSON.parse(sessionStorage.getItem("userInfo") || "{}");
      return header.role.includes(this.currentUserId) || (userInfo.roleType == 3);
    },
    initRules() {
      // 初始化校验规则
@@ -294,12 +333,24 @@
      if (this.headerList && this.headerList.length) {
        this.headerList.forEach((header) => {
          // 处理required可能是字符串的情况
          const userInfo = JSON.parse(
            sessionStorage.getItem("userInfo") || "{}"
          );
          const isRequired =
            header.required === true || header.required === "true";
            (header.required === true || header.required === "true") &&
            userInfo.roleType != 3;
          if (isRequired) {
            rules[header.name] = [
              {
                required: true,
                message: header.message || `请输入${header.name}`,
                trigger: ["blur", "change"],
              },
            ];
          }else{
            rules[header.name] = [
              {
                required: false,
                message: header.message || `请输入${header.name}`,
                trigger: ["blur", "change"],
              },
@@ -346,8 +397,20 @@
          if (header.type === "user") {
            formData[header.name] = data[header.name] || [];
          } else if (header.type === "image") {
            formData[header.name] = Array.isArray(data[header.name]) ? data[header.name] : (data[header.name] ? [data[header.name]] : []);
            this.$set(this.imageListMap, header.name, (formData[header.name] || []).map(url => ({ name: "image", url: getFullUrl(url), status: "success" })));
            formData[header.name] = Array.isArray(data[header.name])
              ? data[header.name]
              : data[header.name]
              ? [data[header.name]]
              : [];
            this.$set(
              this.imageListMap,
              header.name,
              (formData[header.name] || []).map((url) => ({
                name: "image",
                url: getFullUrl(url),
                status: "success",
              }))
            );
          } else {
            formData[header.name] = data[header.name] || "";
          }
@@ -404,6 +467,7 @@
      this.initFormData();
    },
    handleSubmit() {
      console.log("4444444444444");
      this.$refs.form.validate((valid) => {
        if (valid) {
          const submitData = {
@@ -460,12 +524,24 @@
        this.$set(this.form, fieldName, []);
      }
      // 只保留 fileList 中的 url
      this.$set(this.form, fieldName, fileList.map(f => f.url ? (f.url.startsWith('http') ? f.url : getFullUrl(f.url)) : ''));
      this.$set(
        this.form,
        fieldName,
        fileList.map((f) =>
          f.url ? (f.url.startsWith("http") ? f.url : getFullUrl(f.url)) : ""
        )
      );
      this.$set(this.imageListMap, fieldName, fileList);
      this.$refs.form && this.$refs.form.validateField(fieldName);
    },
    handleImageRemove(file, fileList, fieldName) {
      this.$set(this.form, fieldName, fileList.map(f => f.url ? (f.url.startsWith('http') ? f.url : getFullUrl(f.url)) : ''));
      this.$set(
        this.form,
        fieldName,
        fileList.map((f) =>
          f.url ? (f.url.startsWith("http") ? f.url : getFullUrl(f.url)) : ""
        )
      );
      this.$set(this.imageListMap, fieldName, fileList);
    },
    handlePreview(file) {