| | |
| | | :prop="header.name" |
| | | :rules="[ |
| | | { |
| | | required: header.required === true || header.required === 'true', |
| | | 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() === '')) { |
| | | 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'" |
| | | > |
| | |
| | | :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" |
| | |
| | | :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-error=" |
| | | (err, file, fileList) => |
| | | handleImageError(err, file, fileList, header.name) |
| | | " |
| | | :on-preview="handlePreview" |
| | | :disabled="!checkEditPermission(header)" |
| | | accept="image/*" |
| | | multiple |
| | | > |
| | | <div |
| | |
| | | > |
| | | <i class="el-icon-plus"></i> |
| | | </div> |
| | | <div slot="tip" class="el-upload__tip">只支持.jpg格式</div> |
| | | <div slot="tip" class="el-upload__tip">支持任意图片格式上传</div> |
| | | </el-upload> |
| | | </el-form-item> |
| | | <el-form-item |
| | |
| | | :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'], |
| | | }" |
| | |
| | | :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'], |
| | | }" |
| | |
| | | const userInfo = JSON.parse(sessionStorage.getItem("userInfo") || "{}"); |
| | | return userInfo.userId; |
| | | }, |
| | | isApprovaler() { |
| | | const userInfo = JSON.parse(sessionStorage.getItem("userInfo") || "{}"); |
| | | return userInfo.roleType != 3; // 不是工艺工程师 |
| | | }, |
| | | }, |
| | | watch: { |
| | | visible: { |
| | |
| | | }, |
| | | }, |
| | | methods: { |
| | | removeUploadItem(fileList, file) { |
| | | const list = Array.isArray(fileList) ? fileList : []; |
| | | const nextList = list.filter((item) => item.uid !== file.uid); |
| | | const removeIndex = list.findIndex((item) => item.uid === file.uid); |
| | | |
| | | if (removeIndex > -1) { |
| | | list.splice(removeIndex, 1); |
| | | } |
| | | |
| | | return nextList; |
| | | }, |
| | | getUserOptions() { |
| | | listByRole() |
| | | .then((res) => { |
| | |
| | | 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() { |
| | | // 初始化校验规则 |
| | |
| | | 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"], |
| | | }, |
| | |
| | | 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] || ""; |
| | | } |
| | |
| | | this.initFormData(); |
| | | }, |
| | | handleSubmit() { |
| | | console.log('4444444444444') |
| | | console.log("4444444444444"); |
| | | this.$refs.form.validate((valid) => { |
| | | if (valid) { |
| | | const submitData = { |
| | |
| | | }); |
| | | }, |
| | | beforeImageUpload(file) { |
| | | const isJPG = file.type === "image/jpeg"; |
| | | // const isLt2M = file.size / 1024 / 1024 < 2; |
| | | const isImage = |
| | | (file.type && file.type.startsWith("image/")) || |
| | | /\.(png|jpe?g|gif|bmp|webp|svg|ico|tiff?)$/i.test(file.name || ""); |
| | | |
| | | if (!isJPG) { |
| | | this.$message.error("上传图片只能是 JPG 格式!"); |
| | | if (!isImage) { |
| | | this.$message.error("只能上传图片类型文件"); |
| | | return false; |
| | | } |
| | | return true; |
| | |
| | | this.$refs.form && this.$refs.form.validateField(fieldName); |
| | | }, |
| | | handleImageSuccess(res, file, fileList, fieldName) { |
| | | if (!res || (res.code !== 200 && res.code !== "200") || !res.msg) { |
| | | const errorMessage = |
| | | (res && (res.msg || res.message)) || "图片上传失败"; |
| | | this.$message.error(errorMessage); |
| | | file.status = "fail"; |
| | | file.url = ""; |
| | | const successFileList = this.removeUploadItem(fileList, file); |
| | | this.$set(this.imageListMap, fieldName, successFileList); |
| | | this.$set( |
| | | this.form, |
| | | fieldName, |
| | | successFileList.map((f) => |
| | | f.url ? (f.url.startsWith("http") ? f.url : getFullUrl(f.url)) : "" |
| | | ) |
| | | ); |
| | | this.$refs.form && this.$refs.form.validateField(fieldName); |
| | | return; |
| | | } |
| | | |
| | | const url = res.msg; |
| | | file.url = getFullUrl(url); |
| | | if (!Array.isArray(this.form[fieldName])) { |
| | | 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); |
| | | }, |
| | | handleImageError(err, file, fileList, fieldName) { |
| | | let errorMessage = "图片上传失败"; |
| | | const rawMessage = |
| | | (err && |
| | | (err.message || |
| | | err.response || |
| | | err.responseText || |
| | | (err.target && err.target.response))) || |
| | | ""; |
| | | |
| | | if (typeof rawMessage === "string" && rawMessage) { |
| | | try { |
| | | const parsedMessage = JSON.parse(rawMessage); |
| | | errorMessage = |
| | | parsedMessage.msg || parsedMessage.message || errorMessage; |
| | | } catch (e) { |
| | | errorMessage = rawMessage; |
| | | } |
| | | } |
| | | |
| | | this.$message.error(errorMessage); |
| | | file.status = "fail"; |
| | | file.url = ""; |
| | | const validFileList = this.removeUploadItem( |
| | | (fileList || []).filter((item) => item.status !== "fail"), |
| | | file |
| | | ); |
| | | this.$set(this.imageListMap, fieldName, validFileList); |
| | | this.$set( |
| | | this.form, |
| | | fieldName, |
| | | validFileList.map((f) => |
| | | f.url ? (f.url.startsWith("http") ? f.url : getFullUrl(f.url)) : "" |
| | | ) |
| | | ); |
| | | 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) { |