commonDepend.js 6.6 KB
/**
 * 1.整合表单Rules处理
 * 2.整合常用跳转函数
 */
import Utils from "~/utils";
export default {
	methods: {
		/**
		 * 表单校验 rules 的赋值
		 * @returns void
		 */
		generateFormRules(skipDefault) {
			let keySet = new Set(Object.keys(this.checkRules).concat(Object.keys(this.defaultRules)))
			console.log('keySet', keySet)
			const res = {};
			for (let key of keySet.keys()) {
				res[key] = this.checkRules[key] || this.defaultRules[key];
			}
			this.rules = res;
			console.log("rules", this.rules);
		},
		/**
		 * 触发方式
		 * @param {String} prop item属性
		 * @returns 
		 */
		getTriggerType(prop) {
			const modelForm = this.root ? this.root.$refs.modelForm : this.$refs.modelForm
			const fields = modelForm.fields;
			for (let i = 0; i < fields.length; i++) {
				const field = fields[i];
				if (field.prop === prop) {
					// select、checkbox使用change触发
					const ele = field.$children[1] ? field.$children[1].$children[0] : field.$children[0].$children[0]
					if (ele.$el.className.startsWith("el-select") || ele.$el.className.startsWith("el-checkbox")) {
						return "change";
					}
					return "blur";
				}
			}
			return "blur";
		},
		/**
		 * 表单有些 tab 是通过 v-if 控制的,这些表单项初始时的 trigger 均为 blur,需要手动更新
		 */
		updateRulesTrigger() {
			const rules = this.root.rules
			for (const key in rules) {
				if (Object.hasOwnProperty.call(rules, key)) {
					const rule = rules[key];
					const triggerType = this.getTriggerType(key)
					for (let i = 0; i < rule.length; i++) {
						const r = rule[i];
						if (r.validator && r.trigger !== triggerType) {
							r.trigger = triggerType;
						}
					}
				}
			}
		},
		showBackendErrors(fieldErrors) {
			// 清除之前的校验状态
			if (!this.$refs.modelForm) {
				return
			}
			if (!this.isChecking) {
				this.$refs.modelForm.clearValidate();
			} else {
				// 当 checkAll 操作时,由面板切换所触发的 executeRule 请求时,不清空 checkAll 的错误信息
				this.isChecking = false;
			}
			const fields = this.$refs.modelForm.fields;
			const tab = Utils.positioningErrorMsg(fieldErrors, fields);
			return tab;
		},
		// 添加isModify字段
		changeModify () {
			let prop = this.$parent.prop
			// 查询条件使用时,不存在prop,不用触发isModify字段的维护
			if (!prop) {
				return
			}
			if (!this.root) {
				return
			}
			let tempObj = this.root.model
			let propArr = prop.split('.')
			propArr.pop()
			let curProp = null
			if (propArr && propArr.length > 0) {
				while (curProp = propArr.shift()) {
					if (tempObj[curProp]) {
						tempObj = tempObj[curProp]
					}
				}
			}
			let propKey = prop.substring(prop.lastIndexOf(".") + 1)
			if (!tempObj.modifySet) {
				this.$set(tempObj, 'modifySet', [propKey])
			} else {
				if (!tempObj.modifySet.includes(propKey)) {
					tempObj.modifySet.push(propKey)
				}
			}
			// 对于markSet和markSetX处理
			// 区分总行修改还是分行修改
			let ignoreModFlg = this.root.model.trnInfo && this.root.model.trnInfo.sptHldflg
			if (!ignoreModFlg) {
				// 分行修改添加markSet
				if (!tempObj.markSet) {
					this.$set(tempObj, 'markSet', [propKey])
				} else {
					if (!tempObj.markSet.includes(propKey)) {
						tempObj.markSet.push(propKey)
					}
				}
				// 同时如果总行修改的markSetX存在要删掉
				if (tempObj.markSetX && tempObj.markSetX.length > 0 && tempObj.markSetX.includes(propKey)) {
					let indMarkSetX = tempObj.markSetX.indexOf(propKey)
					tempObj.markSetX.splice(indMarkSetX, 1)
				}
			} else {
				// 总行修改添加masksetX
				if (!tempObj.markSetX) {
					this.$set(tempObj, 'markSetX', [propKey])
				} else {
					if (!tempObj.markSetX.includes(propKey)) {
						tempObj.markSetX.push(propKey)
					}
				}
			}
			console.log('model', this.root.model)
		},
		// 自定义添加modifySet
		customAddModify (modelObj, prop) {
			if (modelObj && modelObj.modifySet && modelObj.modifySet.length) {
        if (!modelObj.modifySet.includes(prop)) {
          modelObj.modifySet.push(prop)
        }
			} else {
				this.$set(modelObj, 'modifySet', [prop])
			}
			// 对于markSet和markSetX处理
			if (this.root && this.root.model) {
				// 区分总行修改还是分行修改
				let ignoreModFlg = this.root.model.trnInfo && this.root.model.trnInfo.sptHldflg
				if (!ignoreModFlg) {
					// 分行修改添加markSet
					if (!modelObj.markSet) {
						this.$set(modelObj, 'markSet', [prop])
					} else {
						if (!modelObj.markSet.includes(prop)) {
							modelObj.markSet.push(prop)
						}
					}
					// 同时如果总行修改的markSetX存在要删掉
					if (modelObj.markSetX && modelObj.markSetX.length > 0 && modelObj.markSetX.includes(prop)) {
						let indMarkSetX = modelObj.markSetX.indexOf(prop)
						modelObj.markSetX.splice(indMarkSetX, 1)
					}
				} else {
					// 总行修改添加masksetX
					if (!modelObj.markSetX) {
						this.$set(modelObj, 'markSetX', [prop])
					} else {
						if (!modelObj.markSetX.includes(prop)) {
							modelObj.markSetX.push(prop)
						}
					}
				}
			}
			console.log('customAdd', modelObj, prop)
		},
		// 自定义去除modifySet
		customRemoveModify (modelObj, prop) {
			if (modelObj && modelObj.modifySet && modelObj.modifySet.length && modelObj.modifySet.includes(prop)) {
				let ind = modelObj.modifySet.indexOf(prop)
				modelObj.modifySet.splice(ind, 1)
			}
      // markset相关的删除处理
      if (modelObj && modelObj.markSet && modelObj.markSet.length && modelObj.markSet.includes(prop)) {
				let ind = modelObj.markSet.indexOf(prop)
				modelObj.markSet.splice(ind, 1)
			}
			// marksetX相关的删除处理
			if (modelObj && modelObj.markSetX && modelObj.markSetX.length && modelObj.markSetX.includes(prop)) {
				let ind = modelObj.markSetX.indexOf(prop)
				modelObj.markSetX.splice(ind, 1)
			}
			console.log('customRemove', modelObj, prop)
		},
		// 自定义校验去掉后端校验失败的状态
		customValidateClear () {
			let prop = this.$parent.prop
			if (!prop) {
				return
			}
			if (!this.root) {
				return
			}
			let modelFormDom = this.root.$refs['modelForm']
			if (modelFormDom) {
				let backendValidateKeyList = this.root.rules.backendValidateKeyList
				let formFields = this.root.$refs['modelForm'].fields
				for (let i = 0; i < formFields.length; i++) {
					const field = formFields[i];
					if (field.prop === prop && backendValidateKeyList && backendValidateKeyList.includes(field.prop)) {
						field.validateState = 'success';
						field.validateMessage = null;
					}
				}
			}
		},
	},
	computed: {
		isInDisplay() {
			return this.$store.state.Status.mode === 'display'
		}
	}
}