vue-cli init

This commit is contained in:
2025-08-15 16:25:44 +08:00
parent e81805b4c0
commit 8e22afd798
590 changed files with 103286 additions and 213 deletions
+361
View File
@@ -0,0 +1,361 @@
import {CommonUtil} from "./common.util";
export class UFormUtil {
/**
* 初始化表单对象
* @param validateForm
*/
static init(validateForm) {
// console.log("-------------------------------init-------------------------------", validateForm);
// 给表单对象添加controls属性
const _self = this;
let controls = {};
let i = 0;
for (let attrName in validateForm.value) {
controls[attrName] = {
id: CommonUtil.generateUUID(),
rawValue: validateForm.value[attrName], // 原始值,可以用重置表单
value: validateForm.value, // 引用value对线,可以在control中直接操作value对象
timestamp: new Date().getTime() + i++,
valueName: attrName,
options: [],
isShow: false,
textDesc: '',
defaultIndex: -1,
}
}
// 添加重置表单方法
validateForm.resetValues = function () {
for (let attrName in validateForm.value) {
validateForm.value[attrName] = validateForm.controls[attrName].rawValue;
if (validateForm.controls[attrName].options) {
_self.selectOptions(validateForm.controls[attrName], validateForm.controls[attrName].selectColNums, validateForm.controls[attrName].selectValues);
}
}
console.log("resetValues------------------------", validateForm);
};
// 添加搜索事件
validateForm.doSearch = function (_selfVue, dataList, uDropdownRef = 'uDropdown') {
console.log(_selfVue)
console.log(_selfVue.$refs)
if (_selfVue.$refs[uDropdownRef]) {
_selfVue.$refs[uDropdownRef].close();
}
_selfVue.doRefresh(dataList);
console.log("doSearch------------------------", validateForm);
};
validateForm.controls = controls;
return validateForm;
}
/**
* 给表单字段设置默认值
* @param validateForm
* @param data
*/
static setDefaultValues(validateForm, data) {
console.log("-------------------------------setDefaultValues-------------------------------", validateForm, data);
if (data === null || data === undefined) {
return;
}
for (let controlName in validateForm.value) {
for (let dataName in data) {
if (controlName == dataName) {
if (typeof data[dataName] === 'boolean') {
validateForm.value[controlName] = data[dataName];
validateForm.controls[controlName].rawValue = data[dataName];
} else {
validateForm.value[controlName] = data[dataName] + ""; // todo 值必须转成字符串类型,表单校验规则数字和字符串类型不兼容。
validateForm.controls[controlName].rawValue = data[dataName] + ""; // 原始值,可以用重置表单 todo 值必须转成字符串类型,表单校验规则数字和字符串类型不兼容。
}
}
}
}
}
/**
* 选择地区回调事件
*/
static regionConfirm(e, control, provinceName = 'provinceName', cityName = 'cityName', areaName = 'areaName') {
console.log(e);
let value = control.value;
value[control.valueName] = e.province.label + '-' + e.city.label + '-' + e.area.label;
value[provinceName] = e.province.label;
value[cityName] = e.city.label;
value[areaName] = e.area.label;
control.isShow = false;
}
/**
* 选择时间回调事件
*/
static timeConfirm(e, control) {
console.log(e);
let value = control.value;
let yyyyMMdd = [];
if (e.year) {
yyyyMMdd.push(e.year);
}
if (e.month) {
yyyyMMdd.push(e.month);
}
if (e.day) {
yyyyMMdd.push(e.day);
}
let hhmmss = [];
if (e.hour) {
hhmmss.push(e.hour);
}
if (e.minute) {
hhmmss.push(e.minute);
}
if (e.second) {
hhmmss.push(e.second);
}
value[control.valueName] = `${yyyyMMdd.join("-")} ${hhmmss.join(":")}`.trim();
control.isShow = false;
}
/**
* @param control
* @param options
* @param colNums 列数
* @param values 默认值
*/
static setOptions(control, options, colNums = 1, values) {
console.log("-------------------------------setOptions-------------------------------", control, options, colNums, values);
if (colNums === 1) { // 删除第一列的子节点
options.forEach((item1, index) => {
delete item1.children;
});
} else if (colNums === 2) { // 删除第二列的子节点
options.forEach((item1, index1) => {
item1.children.forEach((item2, index2) => {
delete item2.children;
});
});
} else if (colNums === 3) { // 删除第三列的子节点
options.forEach((item1, index1) => {
item1.children.forEach((item2, index2) => {
item2.children.forEach((item3, index3) => {
delete item3.children;
});
});
});
}
control.options = options;
control.selectColNums = colNums;
control.selectValues = values;
this.selectOptions(control, colNums, values);
}
/**
* 选中某个控件值
*
* 模式选择,"single-column"-单列模式,"mutil-column"-多列模式,"mutil-column-auto"-多列联动模式
* 三列数据格式
* [
* {
* value: 1,
* label: '中国',
* children: [
* {
* value: 2,
* label: '广东',
* children: [
* {
* value: 3,
* label: '深圳'
* },
* {
* value: 4,
* label: '广州'
* }
* ]
* }
* ]
* }
* ]
*/
static selectOptions(control, colNums, values) {
let defaultValue = control.value[control.valueName];
if (values) {
defaultValue = values;
}
// todo 如果值是boolean类型,则换成1或0
if (defaultValue === false || defaultValue === 'false') {
defaultValue = "0";
} else if (defaultValue === true || defaultValue === 'true') {
defaultValue = "1";
}
// 单列模式
if (colNums === 1) {
control.options.forEach((item, index) => {
if (item.label !== undefined && item.value !== undefined) {
if (item.value + "" === defaultValue + "") {
control.textDesc = item.label;
control.defaultIndex = index;
control.defaultValue = [index];
}
} else if (item.code !== undefined && item.name !== undefined) {
if (item.code + "" === defaultValue + "") {
control.textDesc = item.name;
control.defaultIndex = index;
control.defaultValue = [index];
}
}
});
} else if (colNums === 2) {
// 一般默认值是第二列的值
control.options.forEach((item1, index1) => {
item1.children.forEach((item2, index2) => {
if (item2.label !== undefined && item2.value !== undefined) {
if (item2.value + "" === defaultValue + "") {
let labels = [];
if (item1.label) {
labels.push(item1.label);
}
if (item2.label) {
labels.push(item2.label);
}
control.textDesc = labels.join("-");
control.defaultIndex = index2;
control.defaultValue = [index1, index2];
}
} else if (item2.code !== undefined && item2.name !== undefined) {
if (item2.code + "" === defaultValue + "") {
let names = [];
if (item1.name) {
names.push(item1.name);
}
if (item2.name) {
names.push(item2.name);
}
control.textDesc = names.join("-");
control.defaultIndex = index2;
control.defaultValue = [index1, index2];
}
}
});
});
} else if (colNums === 3) {
// 一般默认值是第三列的值
control.options.forEach((item1, index1) => {
item1.children.forEach((item2, index2) => {
item2.children.forEach((item3, index3) => {
if (item3.label !== undefined && item3.value !== undefined) {
if (item3.value + "" === defaultValue + "") {
let labels = [];
if (item1.label) {
labels.push(item1.label);
}
if (item2.label) {
labels.push(item2.label);
}
if (item3.label) {
labels.push(item3.label);
}
control.textDesc = labels.join("-");
control.defaultIndex = index3;
control.defaultValue = [index1, index2, index3];
}
} else if (item3.code !== undefined && item3.name !== undefined) {
if (item3.code + "" === defaultValue + "") {
let names = [];
if (item1.name) {
names.push(item1.name);
}
if (item2.name) {
names.push(item2.name);
}
if (item3.name) {
names.push(item3.name);
}
control.textDesc = names.join("-");
control.defaultIndex = index3;
control.defaultValue = [index1, index2, index3];
}
}
});
});
});
}
}
/**
* 单列下拉选择选中事件
*/
static selectSingleColumnConfirm($event, control) {
console.log($event, control);
control.value[control.valueName] = $event[0].value;
control.textDesc = $event[0].label;
this.selectOptions(control, $event.length);
control.isShow = false;
}
/**
* 多列联动下拉选择选中事件
*/
static selectMutilColumnConfirm($event, control) {
console.log($event, control); // $event = [{label: '', value: ''}, {label: '', value: ''}, ...]
control.value[control.valueName] = $event[$event.length - 1].value; // 多列联动,取最后一列的值
let labels = [];
$event.forEach(item => {
if (item.label) {
labels.push(item.label);
}
});
control.textDesc = labels.join("-");
// 解决弹框不会选中问题。
this.selectOptions(control, $event.length);
control.isShow = false;
}
/**
* 获取表单中某个字段
* @param formRef this.$refs.uForm
* @param prop 'code'
* @returns {*}
*/
static getFormItem(formRef, prop) {
if (!formRef) {
return undefined;
}
const list = formRef.fields.filter(item => item.prop === prop);
if (list.length) {
return list[0];
}
return undefined;
}
/**
* 校验单个字段,触发单个字段的校验规则
* @param formRef this.$refs.uForm
* @param prop 'code'
*
* UFormUtil.validation(_self.$refs.validateFormRef, 'sysFileId');
*/
static validation(formRef, prop) {
const _self = this;
return new Promise(function (resolve, reject) {
const item = _self.getFormItem(formRef, prop);
item.validation('', error => {
if (error) {
CommonUtil.toast(error);
resolve(false);
} else {
resolve(true);
}
});
});
}
}