chore(config): 添加开发和生产环境配置文件及相关忽略规则

- 新增 .env.development 文件,配置开发环境变量
- 新增 .env.production 文件,配置生产环境变量及压缩选项
- 添加 .gitignore 文件,忽略常见临时文件和本地配置
- 新增 .npmrc 文件,配置私有npm仓库及认证信息
- 新增 .prettierrc.json,配置代码格式化规则
- 添加 403 错误页面背景图 svg 文件至 public/img/bg/目录
This commit is contained in:
2026-07-20 15:08:51 +08:00
commit 0a2e0f1784
382 changed files with 74009 additions and 0 deletions
+172
View File
@@ -0,0 +1,172 @@
export const addressTypeOptions = [
{ label: '常规地址', value: '常规地址' },
{ label: '港口/码头', value: '港口/码头' },
{ label: '铁路车站', value: '铁路车站' },
{ label: '空港机场', value: '空港机场' },
];
export const createOption = ({ validateLongitude, validateLatitude }) => ({
height: 'auto',
calcHeight: 32,
dialogWidth: 980,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
indexLabel: '序号',
indexWidth: 70,
selection: true,
viewBtn: false,
editBtn: false,
delBtn: false,
addBtn: false,
dialogClickModal: false,
menuWidth: 180,
column: [
{
label: '地址名称',
prop: 'addressName',
search: true,
minWidth: 150,
rules: [{ required: true, message: '请输入地址名称', trigger: 'blur' }],
},
{
label: '地址编号',
prop: 'addressCode',
minWidth: 120,
addDisplay: false,
editDisplay: false,
},
{
label: '类型',
prop: 'addressType',
type: 'select',
search: true,
dicData: addressTypeOptions,
rules: [{ required: true, message: '请选择类型', trigger: 'change' }],
},
{
label: '来源主数据',
prop: 'sourceId',
formslot: true,
hide: true,
span: 24,
},
{
label: '站点编码',
prop: 'siteCodeDisplay',
search: false,
minWidth: 120,
addDisplay: false,
editDisplay: false,
},
{
label: '站点编码',
prop: 'siteCode',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
},
{
label: '详细地址',
prop: 'detailAddress',
search: true,
formslot: true,
type: 'textarea',
minRows: 3,
span: 24,
minWidth: 220,
rules: [{ required: true, message: '请输入详细地址', trigger: 'blur' }],
},
{
label: '经度',
prop: 'longitude',
type: 'number',
precision: 6,
minWidth: 120,
rules: [{ validator: validateLongitude, trigger: 'blur' }],
},
{
label: '纬度',
prop: 'latitude',
type: 'number',
precision: 6,
minWidth: 120,
rules: [{ validator: validateLatitude, trigger: 'blur' }],
},
{
label: '行政区划',
prop: 'regionName',
search: true,
minWidth: 150,
},
{
label: '组织',
prop: 'deptId',
type: 'select',
search: true,
hide: true,
display: false,
dicData: [],
},
{
label: '组织',
prop: 'deptName',
minWidth: 150,
addDisplay: false,
editDisplay: false,
},
{
label: '联系人',
prop: 'contactName',
search: true,
minWidth: 110,
},
{
label: '联系方式',
prop: 'contactPhone',
search: true,
minWidth: 130,
},
{
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
span: 24,
hide: true,
maxlength: 200,
showWordLimit: true,
rules: [{ max: 200, message: '备注不能超过200个字', trigger: 'blur' }],
},
{
label: '更新人',
prop: 'updateUserName',
minWidth: 120,
addDisplay: false,
editDisplay: false,
},
{
label: '更新时间',
prop: 'updateTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
minWidth: 160,
addDisplay: false,
editDisplay: false,
},
{
label: '创建时间',
prop: 'createTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
minWidth: 160,
addDisplay: false,
editDisplay: false,
},
],
});
+515
View File
@@ -0,0 +1,515 @@
export const timeExpressionTypeDic = [
{
label: 'API',
value: 1,
},
{
label: 'CRON',
value: 2,
},
{
label: '固定频率(毫秒)',
value: 3,
},
{
label: '固定延迟(毫秒)',
value: 4,
},
{
label: '工作流',
value: 5,
},
];
export const executeTypeDic = [
{
label: '单机执行',
value: 1,
},
{
label: '广播执行',
value: 2,
},
{
label: 'MapReduce',
value: 3,
},
];
export const processorTypeDic = [
{
label: '内建处理器',
value: 1,
},
{
label: '外部处理器(动态加载)',
value: 4,
},
];
export const dispatchStrategyDic = [
{
label: 'HEALTH_FIRST',
value: 1,
},
{
label: 'RANDOM',
value: 2,
},
];
export const enableDic = [
{
label: '暂停',
value: 0,
},
{
label: '启用',
value: 1,
},
];
export const logTypeDic = [
{
label: 'ONLINE',
value: 1,
},
{
label: 'LOCAL',
value: 2,
},
{
label: 'STDOUT',
value: 3,
},
{
label: 'LOCAL_AND_ONLINE',
value: 4,
},
{
label: 'NULL',
value: 999,
},
];
export const logLevelDic = [
{
label: 'DEBUG',
value: 1,
},
{
label: 'INFO',
value: 2,
},
{
label: 'WARN',
value: 3,
},
{
label: 'ERROR',
value: 4,
},
{
label: 'OFF',
value: 99,
},
];
export default {
height: 'auto',
calcHeight: 30,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
selection: true,
grid: true,
labelWidth: 180,
menuWidth: 350,
dialogWidth: 1200,
dialogClickModal: false,
tabs: true,
column: [
{
label: '任务应用',
prop: 'jobServerId',
type: 'select',
dicUrl: '/blade-job/job-server/select',
props: {
label: 'jobAppName',
value: 'id',
},
search: true,
display: false,
},
{
label: '任务ID',
prop: 'jobId',
type: 'input',
search: true,
width: 80,
display: false,
},
{
label: '任务名称',
prop: 'jobName',
type: 'input',
search: true,
width: 200,
display: false,
},
{
label: '定时信息',
labelTip: '时间表达式类型',
prop: 'timeExpressionType',
type: 'select',
dicData: timeExpressionTypeDic,
rules: [
{
required: true,
message: '请选择定时信息',
trigger: 'blur',
},
],
width: 120,
display: false,
},
{
label: '执行类型',
labelTip: '枚举值',
prop: 'executeType',
type: 'select',
dicData: executeTypeDic,
rules: [
{
required: true,
message: '请选择执行器类型',
trigger: 'blur',
},
],
width: 110,
display: false,
},
{
label: '处理器类型',
labelTip: '枚举值',
prop: 'processorType',
type: 'select',
dicData: processorTypeDic,
rules: [
{
required: true,
message: '请选择处理器类型',
trigger: 'blur',
},
],
width: 180,
display: false,
},
{
label: '任务状态',
labelTip: '未启用的任务不会被调度',
prop: 'enable',
type: 'switch',
dicData: enableDic,
slot: true,
width: 100,
display: false,
},
],
group: [
{
label: '基础配置',
prop: 'modelSetting',
icon: 'el-icon-tickets',
column: [
{
label: '任务应用',
prop: 'jobServerId',
type: 'select',
dicUrl: '/blade-job/job-server/select',
props: {
label: 'jobAppName',
value: 'id',
},
editDisabled: true,
rules: [
{
required: true,
message: '请选择任务应用',
trigger: 'blur',
},
],
},
{
label: '任务状态',
labelTip: '未启用的任务不会被调度',
prop: 'enable',
type: 'switch',
value: 1,
rules: [
{
required: true,
message: '请选择是否开启',
trigger: 'blur',
},
],
},
{
label: '任务名称',
prop: 'jobName',
type: 'input',
rules: [
{
required: true,
message: '请输入任务名称',
trigger: 'blur',
},
],
},
{
label: '生命周期',
labelTip: '预留,用于指定定时调度任务的生效时间范围)',
prop: 'lifecycle',
type: 'datetimerange',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
startPlaceholder: '任务开始时间',
endPlaceholder: '任务结束时间',
},
{
label: '定时类型',
labelTip: '时间表达式类型',
prop: 'timeExpressionType',
type: 'select',
dicData: timeExpressionTypeDic,
value: 2,
rules: [
{
required: true,
message: '请选择定时信息',
trigger: 'blur',
},
],
},
{
label: '时间表达式',
labelTip: '填写类型由 定时类型 决定,比如 CRON 需要填写 CRON 表达式',
prop: 'timeExpression',
type: 'input',
},
{
label: '执行类型',
labelTip: '枚举值',
prop: 'executeType',
type: 'select',
dicData: executeTypeDic,
value: 1,
rules: [
{
required: true,
message: '请选择执行器类型',
trigger: 'blur',
},
],
},
{
label: '运行时配置',
labelTip: '目前支持随机(RANDOM)和健康度优先(HEALTH_FIRST)',
prop: 'dispatchStrategy',
type: 'select',
dicData: dispatchStrategyDic,
value: 1,
rules: [
{
required: true,
message: '请选择运行时配置',
trigger: 'blur',
},
],
},
{
label: '处理器类型',
labelTip: '枚举值',
prop: 'processorType',
type: 'select',
dicData: processorTypeDic,
value: 1,
rules: [
{
required: true,
message: '请选择处理器类型',
trigger: 'blur',
},
],
},
{
label: '处理器参数',
labelTip:
'如Java处理器需要填写全限定类名,如:org.springblade.demo.MapReduceProcessorDemo',
prop: 'processorInfo',
type: 'input',
rules: [
{
required: true,
message: '请输入处理器参数',
trigger: 'blur',
},
],
},
{
label: '任务参数',
labelTip: '方法入参 TaskContext 对象的 json 字段',
prop: 'jobParams',
type: 'input',
span: 24,
},
{
label: '任务描述',
prop: 'jobDescription',
type: 'textarea',
minRows: 3,
span: 24,
},
],
},
{
label: '高级配置',
prop: 'templateSetting',
icon: 'el-icon-copy-document',
column: [
{
label: '最大实例数',
labelTip:
'该任务同时执行的数量(任务和实例就像是类和对象的关系,任务被调度执行后被称为实例)',
prop: 'maxInstanceNum',
type: 'number',
value: 0,
},
{
label: '单机线程并发数',
labelTip: '该实例执行过程中每个 Worker 使用的线程数量',
prop: 'concurrency',
type: 'number',
value: 5,
},
{
label: '任务实例运行时间限制',
labelTip: '0 代表无任何限制,超时会被打断并判定为执行失败',
prop: 'instanceTimeLimit',
type: 'number',
value: 0,
},
{
label: '任务实例重试次数',
labelTip: '任务实例重试次数,整个任务失败时重试,代价大,不推荐使用',
prop: 'instanceRetryNum',
type: 'number',
value: 0,
},
{
label: '任务作业重试次数',
labelTip: 'Task 重试次数,每个子 Task 失败后单独重试,代价小,推荐使用',
prop: 'taskRetryNum',
type: 'number',
value: 0,
},
{
label: '最低CPU核心',
labelTip:
'最小可用 CPU 核心数,CPU 可用核心数小于该值的 Worker 将不会执行该任务,0 代表无任何限制',
prop: 'minCpuCores',
type: 'number',
value: 0,
},
{
label: '最低内存(GB)',
labelTip: '可用内存小于该值的Worker 将不会执行该任务,0 代表无任何限制',
prop: 'minMemorySpace',
type: 'number',
value: 0,
},
{
label: '最低磁盘空间(GB)',
labelTip: '可用磁盘空间小于该值的Worker 将不会执行该任务,0 代表无任何限制',
prop: 'minDiskSpace',
type: 'number',
value: 0,
},
{
label: '执行机器地址',
labelTip: '设置该参数后只有列表中的机器允许执行该任务,空代表不指定机器',
prop: 'designatedWorkers',
type: 'input',
},
{
label: '最大执行机器数量',
labelTip: '限定调动执行的机器数量,0代表无限制',
prop: 'maxWorkerCount',
type: 'number',
value: 0,
},
],
},
{
label: '其他配置',
prop: 'codingSetting',
icon: 'el-icon-printer',
column: [
{
label: '报警人员ID列表',
labelTip: '接收报警的用户ID列表',
prop: 'notifyUserIds',
type: 'input',
},
{
label: '错误阈值',
labelTip: '错误阈值,0代表不限制',
prop: 'alertThreshold',
type: 'number',
value: 0,
},
{
label: '统计窗口(s)',
labelTip: '统计的窗口长度(s)0代表不限制',
prop: 'statisticWindowLen',
type: 'number',
value: 0,
},
{
label: '沉默窗口(s)',
labelTip: '沉默时间窗口(s)0代表不限制',
prop: 'silenceWindowLen',
type: 'number',
value: 0,
},
{
label: '日志配置',
labelTip: '日志配置',
prop: 'logType',
type: 'select',
value: 1,
dicData: logTypeDic,
},
{
label: '日志级别',
labelTip: '日志级别',
prop: 'logLevel',
type: 'select',
value: 2,
dicData: logLevelDic,
},
{
label: '扩展字段',
labelTip: '供开发者使用,用于功能扩展,powerjob 自身不会使用该字段',
prop: 'extra',
type: 'textarea',
minRows: 3,
span: 24,
},
],
},
],
};
+78
View File
@@ -0,0 +1,78 @@
export default {
height: 'auto',
calcHeight: 30,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
selection: true,
grid: true,
labelWidth: 100,
menuWidth: 350,
dialogClickModal: false,
column: [
{
label: '服务名称',
prop: 'jobServerName',
type: 'input',
span: 24,
search: true,
rules: [
{
required: true,
message: '请输入服务名称',
trigger: 'blur',
},
],
},
{
label: '服务器地址',
prop: 'jobServerUrl',
type: 'input',
span: 24,
rules: [
{
required: true,
message: '请输入服务器地址',
trigger: 'blur',
},
],
},
{
label: '应用名称',
prop: 'jobAppName',
type: 'input',
span: 24,
search: true,
rules: [
{
required: true,
message: '请输入应用名称',
trigger: 'blur',
},
],
},
{
label: '应用密码',
prop: 'jobAppPassword',
type: 'input',
span: 24,
rules: [
{
required: true,
message: '请输入应用密码',
trigger: 'blur',
},
],
},
{
label: '任务备注',
prop: 'jobRemark',
type: 'textarea',
minRows: 3,
span: 24,
},
],
};
+111
View File
@@ -0,0 +1,111 @@
export const LOCK_TYPE_DIC = [
{ label: '系统锁定', value: 'SYSTEM' },
{ label: '手动锁定', value: 'MANUAL' },
];
export const LOCK_STATUS_DIC = [
{ label: '待锁定', value: 'PRE_LOCKED' },
{ label: '锁定中', value: 'LOCKED' },
{ label: '已解锁', value: 'UN_LOCKED' },
];
export const authLockOption = {
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
addBtn: false,
viewBtn: false,
editBtn: false,
delBtn: false,
menuWidth: 160,
dialogType: 'drawer',
dialogWidth: 800,
dialogClickModal: false,
column: [
{
label: '锁定目标',
prop: 'lockTarget',
slot: true,
search: true,
span: 24,
searchPlaceholder: '请输入账号或IP',
},
{
label: '用户姓名',
prop: 'userName',
slot: true,
width: 100,
},
{
label: '请求IP',
prop: 'remoteIp',
slot: true,
search: true,
searchPlaceholder: '请输入IP地址',
width: 160,
},
{
label: '失败次数',
prop: 'failCount',
width: 80,
align: 'center',
hide: true,
},
{
label: '用户代理',
prop: 'userAgent',
hide: true,
overHidden: true,
},
{
label: '锁定类型',
prop: 'lockType',
slot: true,
type: 'select',
dicData: LOCK_TYPE_DIC,
width: 90,
align: 'center',
},
{
label: '锁定状态',
prop: 'lockStatus',
slot: true,
type: 'select',
search: true,
dicData: LOCK_STATUS_DIC,
width: 90,
align: 'center',
},
{
label: '锁定开始',
prop: 'lockBeginTime',
slot: true,
width: 120,
},
{
label: '锁定结束',
prop: 'lockEndTime',
slot: true,
width: 120,
},
{
label: '锁定原因',
prop: 'lockReason',
type: 'textarea',
hide: true,
overHidden: true,
minWidth: 160,
span: 24,
},
{
label: '解锁原因',
prop: 'unlockReason',
type: 'textarea',
hide: true,
overHidden: true,
span: 24,
},
],
};
+94
View File
@@ -0,0 +1,94 @@
export const GRANT_TYPE_DIC = [
{ label: '密码登录', value: 'password' },
{ label: '验证码登录', value: 'captcha' },
{ label: '短信登录', value: 'sms' },
{ label: '社交登录', value: 'social' },
{ label: '客户端凭证', value: 'client_credentials' },
{ label: '刷新令牌', value: 'refresh_token' },
];
export const authLogOption = {
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
addBtn: false,
viewBtn: false,
editBtn: false,
delBtn: false,
menu: true,
menuWidth: 100,
dialogType: 'drawer',
dialogWidth: 800,
dialogClickModal: false,
column: [
{
label: '授权账号',
prop: 'account',
slot: true,
search: true,
searchPlaceholder: '请输入账号',
},
{
label: '用户姓名',
prop: 'realName',
},
{
label: '授权类型',
prop: 'grantType',
type: 'select',
search: true,
dicData: GRANT_TYPE_DIC,
width: 110,
align: 'center',
},
{
label: '请求IP',
prop: 'remoteIp',
slot: true,
search: true,
searchPlaceholder: '请输入IP地址',
width: 160,
},
{
label: '服务ID',
prop: 'serviceId',
hide: true,
width: 120,
},
{
label: '服务器IP',
prop: 'serverIp',
hide: true,
width: 160,
},
{
label: '环境',
prop: 'env',
slot: true,
width: 80,
align: 'center',
},
{
label: '服务器名',
prop: 'serverHost',
hide: true,
width: 120,
},
{
label: '登录时间',
prop: 'loginTime',
span: 24,
width: 180,
},
{
label: '用户代理',
prop: 'userAgent',
type: 'textarea',
span: 24,
hide: true,
overHidden: true,
},
],
};
+210
View File
@@ -0,0 +1,210 @@
export const optionParent = {
height: 'auto',
calcHeight: 32,
tip: false,
searchShow: true,
searchMenuSpan: 10,
border: true,
index: true,
selection: true,
viewBtn: true,
menuWidth: 250,
dialogWidth: 880,
dialogClickModal: false,
column: [
{
label: '字典编号',
prop: 'code',
search: true,
slot: true,
span: 24,
rules: [
{
required: true,
message: '请输入字典编号',
trigger: 'blur',
},
],
},
{
label: '字典名称',
prop: 'dictValue',
search: true,
align: 'center',
rules: [
{
required: true,
message: '请输入字典名称',
trigger: 'blur',
},
],
},
{
label: '字典排序',
prop: 'sort',
type: 'number',
align: 'right',
width: 100,
rules: [
{
required: true,
message: '请输入字典排序',
trigger: 'blur',
},
],
},
{
label: '封存',
prop: 'isSealed',
type: 'switch',
align: 'center',
width: 100,
dicData: [
{
label: '否',
value: 0,
},
{
label: '是',
value: 1,
},
],
value: 0,
slot: true,
rules: [
{
required: true,
message: '请选择封存',
trigger: 'blur',
},
],
},
{
label: '字典备注',
prop: 'remark',
hide: true,
},
],
};
export const optionChild = {
height: 'auto',
calcHeight: 95,
tip: false,
searchShow: true,
searchMenuSpan: 10,
tree: true,
border: true,
index: true,
selection: true,
viewBtn: true,
menuWidth: 300,
dialogWidth: 880,
dialogClickModal: false,
column: [
{
label: '字典编号',
prop: 'code',
addDisabled: true,
editDisabled: true,
search: true,
span: 24,
rules: [
{
required: true,
message: '请输入字典编号',
trigger: 'blur',
},
],
},
{
label: '字典名称',
prop: 'dictValue',
search: true,
align: 'center',
rules: [
{
required: true,
message: '请输入字典名称',
trigger: 'blur',
},
],
},
{
label: '上级字典',
prop: 'parentId',
type: 'tree',
dicData: [],
hide: true,
props: {
label: 'title',
},
addDisabled: true,
editDisabled: true,
rules: [
{
required: false,
message: '请选择上级字典',
trigger: 'click',
},
],
},
{
label: '字典键值',
prop: 'dictKey',
width: 85,
rules: [
{
required: true,
message: '请输入字典键值',
trigger: 'blur',
},
],
},
{
label: '字典排序',
prop: 'sort',
type: 'number',
align: 'right',
hide: true,
rules: [
{
required: true,
message: '请输入字典排序',
trigger: 'blur',
},
],
},
{
label: '封存',
prop: 'isSealed',
type: 'switch',
align: 'center',
width: 80,
dicData: [
{
label: '否',
value: 0,
},
{
label: '是',
value: 1,
},
],
value: 0,
slot: true,
rules: [
{
required: true,
message: '请选择封存',
trigger: 'blur',
},
],
},
{
label: '字典备注',
prop: 'remark',
hide: true,
},
],
};
+211
View File
@@ -0,0 +1,211 @@
export const optionParent = {
height: 'auto',
calcHeight: 32,
tip: false,
searchShow: true,
searchMenuSpan: 10,
border: true,
index: true,
selection: true,
viewBtn: true,
menuWidth: 250,
dialogWidth: 880,
dialogClickModal: false,
column: [
{
label: '字典编号',
prop: 'code',
search: true,
slot: true,
span: 24,
rules: [
{
required: true,
message: '请输入字典编号',
trigger: 'blur',
},
],
},
{
label: '字典名称',
prop: 'dictValue',
search: true,
align: 'center',
rules: [
{
required: true,
message: '请输入字典名称',
trigger: 'blur',
},
],
},
{
label: '字典排序',
prop: 'sort',
type: 'number',
align: 'right',
width: 100,
hide: true,
rules: [
{
required: true,
message: '请输入字典排序',
trigger: 'blur',
},
],
},
{
label: '封存',
prop: 'isSealed',
type: 'switch',
align: 'center',
width: 100,
dicData: [
{
label: '否',
value: 0,
},
{
label: '是',
value: 1,
},
],
value: 0,
slot: true,
rules: [
{
required: true,
message: '请选择封存',
trigger: 'blur',
},
],
},
{
label: '字典备注',
prop: 'remark',
hide: true,
},
],
};
export const optionChild = {
height: 'auto',
calcHeight: 95,
tip: false,
searchShow: true,
searchMenuSpan: 10,
tree: true,
border: true,
index: true,
selection: true,
viewBtn: true,
menuWidth: 300,
dialogWidth: 880,
dialogClickModal: false,
column: [
{
label: '字典编号',
prop: 'code',
addDisabled: true,
editDisabled: true,
search: true,
span: 24,
rules: [
{
required: true,
message: '请输入字典编号',
trigger: 'blur',
},
],
},
{
label: '字典名称',
prop: 'dictValue',
search: true,
align: 'center',
rules: [
{
required: true,
message: '请输入字典名称',
trigger: 'blur',
},
],
},
{
label: '上级字典',
prop: 'parentId',
type: 'tree',
dicData: [],
hide: true,
props: {
label: 'title',
},
addDisabled: true,
editDisabled: true,
rules: [
{
required: false,
message: '请选择上级字典',
trigger: 'click',
},
],
},
{
label: '字典键值',
prop: 'dictKey',
width: 85,
rules: [
{
required: true,
message: '请输入字典键值',
trigger: 'blur',
},
],
},
{
label: '字典排序',
prop: 'sort',
type: 'number',
align: 'right',
hide: true,
rules: [
{
required: true,
message: '请输入字典排序',
trigger: 'blur',
},
],
},
{
label: '封存',
prop: 'isSealed',
type: 'switch',
align: 'center',
width: 80,
dicData: [
{
label: '否',
value: 0,
},
{
label: '是',
value: 1,
},
],
value: 0,
slot: true,
rules: [
{
required: true,
message: '请选择封存',
trigger: 'blur',
},
],
},
{
label: '字典备注',
prop: 'remark',
hide: true,
},
],
};
+534
View File
@@ -0,0 +1,534 @@
import website from '@/config/website';
import { getDeptLazyTree } from '@/api/system/dept';
export const userOption = safe => {
const validatePass = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入密码'));
} else {
callback();
}
};
const validatePass2 = (rule, value, callback) => {
if (value === '') {
callback(new Error('请再次输入密码'));
} else if (value !== safe.form.password) {
callback(new Error('两次输入密码不一致!'));
} else {
callback();
}
};
return {
height: 'auto',
calcHeight: 150,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
selection: true,
addBtn: false,
viewBtn: true,
dialogType: 'drawer',
dialogWidth: 1000,
dialogClickModal: false,
column: [
{
label: '登录账号',
prop: 'account',
search: true,
display: false,
},
{
label: '所属租户',
prop: 'tenantName',
slot: true,
display: false,
},
{
label: '用户姓名',
prop: 'realName',
search: true,
display: false,
},
{
label: '所属角色',
prop: 'roleName',
slot: true,
overHidden: true,
display: false,
},
{
label: '所属部门',
prop: 'deptName',
slot: true,
overHidden: true,
display: false,
},
{
label: '用户平台',
prop: 'userTypeName',
width: 100,
slot: true,
display: false,
},
{
label: '用户平台',
type: 'select',
dicUrl: '/blade-system/dict/dictionary?code=user_type',
props: {
label: 'dictValue',
value: 'dictKey',
},
dataType: 'number',
search: true,
hide: true,
display: false,
prop: 'userType',
rules: [
{
required: true,
message: '请选择用户平台',
trigger: 'blur',
},
],
},
],
group: [
{
label: '基础信息',
prop: 'baseInfo',
icon: 'el-icon-user-solid',
column: [
{
label: '所属租户',
prop: 'tenantId',
type: 'tree',
dicUrl: '/blade-system/tenant/select',
props: {
label: 'tenantName',
value: 'tenantId',
},
hide: !website.tenantMode,
addDisplay: website.tenantMode,
editDisplay: website.tenantMode,
viewDisplay: website.tenantMode,
rules: [
{
required: true,
message: '请输入所属租户',
trigger: 'click',
},
],
span: 24,
},
{
label: '登录账号',
prop: 'account',
rules: [
{
required: true,
message: '请输入登录账号',
trigger: 'blur',
},
],
},
{
label: '用户平台',
type: 'select',
dicUrl: '/blade-system/dict/dictionary?code=user_type',
props: {
label: 'dictValue',
value: 'dictKey',
},
dataType: 'number',
slot: true,
prop: 'userType',
rules: [
{
required: true,
message: '请选择用户平台',
trigger: 'blur',
},
],
},
{
label: '密码',
prop: 'password',
hide: true,
editDisplay: false,
viewDisplay: false,
rules: [{ required: true, validator: validatePass, trigger: 'blur' }],
},
{
label: '确认密码',
prop: 'password2',
hide: true,
editDisplay: false,
viewDisplay: false,
rules: [{ required: true, validator: validatePass2, trigger: 'blur' }],
},
],
},
{
label: '详细信息',
prop: 'detailInfo',
icon: 'el-icon-s-order',
column: [
{
label: '用户昵称',
prop: 'name',
hide: true,
rules: [
{
required: true,
message: '请输入用户昵称',
trigger: 'blur',
},
],
},
{
label: '用户姓名',
prop: 'realName',
rules: [
{
required: true,
message: '请输入用户姓名',
trigger: 'blur',
},
{
min: 2,
max: 10,
message: '姓名长度在2到5个字符',
},
],
},
{
label: '手机号码',
prop: 'phone',
overHidden: true,
},
{
label: '电子邮箱',
prop: 'email',
hide: true,
overHidden: true,
},
{
label: '用户性别',
prop: 'sex',
type: 'select',
dicData: [
{
label: '男',
value: 1,
},
{
label: '女',
value: 2,
},
{
label: '未知',
value: 3,
},
],
hide: true,
},
{
label: '用户生日',
type: 'date',
prop: 'birthday',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
hide: true,
},
{
label: '账号状态',
prop: 'statusName',
hide: true,
display: false,
},
],
},
{
label: '职责信息',
prop: 'dutyInfo',
icon: 'el-icon-s-custom',
column: [
{
label: '用户编号',
prop: 'code',
},
{
label: '所属角色',
prop: 'roleId',
multiple: true,
type: 'tree',
dicData: [],
props: {
label: 'title',
},
checkStrictly: true,
slot: true,
rules: [
{
required: true,
message: '请选择所属角色',
trigger: 'click',
},
],
},
{
label: '所属部门',
prop: 'deptId',
type: 'tree',
multiple: true,
dicData: [],
props: {
label: 'title',
},
checkStrictly: true,
slot: true,
rules: [
{
required: true,
message: '请选择所属部门',
trigger: 'click',
},
],
},
{
label: '所属岗位',
prop: 'postId',
type: 'tree',
multiple: true,
dicData: [],
props: {
label: 'postName',
value: 'id',
},
rules: [
{
required: true,
message: '请选择所属岗位',
trigger: 'click',
},
],
},
{
label: '直属主管',
prop: 'leaderId',
type: 'tree',
multiple: true,
filterable: true,
dicData: [],
props: {
label: 'realName',
value: 'id',
},
clearable: true,
},
{
label: '是否主管',
prop: 'isLeader',
type: 'switch',
dicData: [
{
label: '否',
value: 0,
},
{
label: '是',
value: 1,
},
],
value: 0,
},
],
},
],
};
};
export const platformOption = {
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
selection: true,
viewBtn: true,
dialogClickModal: false,
menuWidth: 120,
editBtnText: '配置',
column: [
{
label: '登录账号',
prop: 'account',
search: true,
display: false,
},
{
label: '所属租户',
prop: 'tenantName',
slot: true,
display: false,
},
{
label: '用户姓名',
prop: 'realName',
search: true,
display: false,
},
{
label: '用户平台',
prop: 'userTypeName',
slot: true,
display: false,
},
{
label: '用户平台',
type: 'select',
dicUrl: '/blade-system/dict/dictionary?code=user_type',
props: {
label: 'dictValue',
value: 'dictKey',
},
dataType: 'number',
search: true,
hide: true,
display: false,
prop: 'userType',
rules: [
{
required: true,
message: '请选择用户平台',
trigger: 'blur',
},
],
},
{
label: '用户拓展',
prop: 'userExt',
type: 'textarea',
minRows: 8,
span: 24,
overHidden: true,
row: true,
hide: true,
},
],
};
export const excelOption = {
submitBtn: false,
emptyBtn: false,
column: [
{
label: '模板上传',
prop: 'excelFile',
type: 'upload',
drag: true,
loadText: '模板上传中,请稍等',
span: 24,
propsHttp: {
res: 'data',
},
tip: '请上传 .xls,.xlsx 标准格式文件',
action: '/blade-system/user/import-user',
},
{
label: '数据覆盖',
prop: 'isCovered',
type: 'switch',
align: 'center',
width: 80,
dicData: [
{
label: '否',
value: 0,
},
{
label: '是',
value: 1,
},
],
value: 0,
slot: true,
rules: [
{
required: true,
message: '请选择是否覆盖',
trigger: 'blur',
},
],
},
{
label: '模板下载',
prop: 'excelTemplate',
formslot: true,
span: 24,
},
],
};
export const platformFormOption = {
submitBtn: false,
emptyBtn: false,
labelWidth: 100,
column: [
{
label: '用户账号',
prop: 'account',
disabled: true,
span: 24,
},
{
label: '用户平台',
type: 'select',
prop: 'userType',
dicUrl: '/blade-system/dict/dictionary?code=user_type',
props: {
label: 'dictValue',
value: 'dictKey',
},
dataType: 'number',
span: 24,
rules: [{ required: true, message: '请选择用户平台', trigger: 'blur' }],
},
{
label: '用户拓展',
prop: 'userExt',
type: 'textarea',
minRows: 8,
span: 24,
},
],
};
export const treeOption = {
nodeKey: 'id',
lazy: true,
treeLoad: function (node, resolve) {
const parentId = node.level === 0 ? 0 : node.data.id;
getDeptLazyTree(parentId).then(res => {
resolve(
res.data.data.map(item => {
return {
...item,
leaf: !item.hasChildren,
};
})
);
});
},
addBtn: false,
menu: false,
size: 'small',
props: {
labelText: '标题',
label: 'title',
value: 'value',
children: 'children',
},
};
+665
View File
@@ -0,0 +1,665 @@
import { templateDic } from '@/const/tool/model';
export const codeOption = {
height: 'auto',
calcHeight: 32,
dialogWidth: 900,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
selection: true,
labelWidth: 120,
menuWidth: 350,
viewBtn: true,
dialogClickModal: false,
tabs: true,
column: [
{
label: '模块名',
prop: 'codeName',
search: true,
display: false,
},
{
label: '模版类型',
prop: 'templateType',
type: 'select',
dicData: templateDic,
display: false,
},
{
label: '表名',
prop: 'tableName',
search: true,
display: false,
},
{
label: '服务名',
prop: 'serviceName',
search: true,
display: false,
},
{
label: '包名',
prop: 'packageName',
display: false,
},
],
group: [
{
label: '模型配置',
prop: 'modelSetting',
icon: 'el-icon-tickets',
column: [
{
label: '上级菜单',
prop: 'menuId',
type: 'tree',
dicData: [],
span: 24,
hide: true,
addDisabled: false,
props: {
label: 'title',
},
rules: [
{
required: true,
message: '请选择上级菜单',
trigger: 'click',
},
],
},
{
label: '数据模型',
prop: 'modelId',
search: true,
span: 24,
type: 'select',
dicUrl: '/blade-develop/model/select',
props: {
label: 'modelName',
value: 'id',
},
rules: [
{
required: true,
message: '请选择数据模型',
trigger: 'blur',
},
],
},
{
label: '模块名',
prop: 'codeName',
search: true,
rules: [
{
required: true,
message: '请输入模块名',
trigger: 'blur',
},
],
},
{
label: '表名',
prop: 'tableName',
rules: [
{
required: true,
message: '请输入表名',
trigger: 'blur',
},
],
},
{
label: '表前缀',
prop: 'tablePrefix',
hide: true,
rules: [
{
required: true,
message: '请输入表前缀',
trigger: 'blur',
},
],
},
{
label: '主键名',
prop: 'pkName',
hide: true,
rules: [
{
required: true,
message: '请输入主键名',
trigger: 'blur',
},
],
},
{
label: '服务名',
prop: 'serviceName',
search: true,
rules: [
{
required: true,
message: '请输入服务名',
trigger: 'blur',
},
],
},
{
label: '包名',
prop: 'packageName',
overHidden: true,
rules: [
{
required: true,
message: '请输入包名',
trigger: 'blur',
},
],
},
],
},
{
label: '模版配置',
prop: 'templateSetting',
icon: 'el-icon-copy-document',
column: [
{
label: '模版类型',
prop: 'templateType',
type: 'select',
dicData: templateDic,
value: 'crud',
rules: [
{
required: true,
message: '请选择模版类型',
trigger: 'blur',
},
],
},
{
label: '作者信息',
prop: 'author',
value: 'BladeX',
rules: [
{
required: true,
message: '请输入作者',
trigger: 'blur',
},
],
},
{
label: '子表模型',
prop: 'subModelId',
type: 'select',
dicUrl: '/blade-develop/model/select',
props: {
label: 'modelName',
value: 'id',
},
display: false,
hide: true,
},
{
label: '子表外键',
prop: 'subFkId',
display: false,
hide: true,
},
{
label: '树主键字段',
prop: 'treeId',
type: 'select',
dicData: [],
props: {
label: 'jdbcComment',
value: 'jdbcName',
},
display: false,
hide: true,
},
{
label: '树父主键字段',
prop: 'treePid',
type: 'select',
dicData: [],
props: {
label: 'jdbcComment',
value: 'jdbcName',
},
display: false,
hide: true,
},
{
label: '树名称字段',
prop: 'treeName',
type: 'select',
dicData: [],
props: {
label: 'jdbcComment',
value: 'jdbcName',
},
display: false,
hide: true,
},
],
},
{
label: '生成配置',
prop: 'codingSetting',
icon: 'el-icon-printer',
column: [
{
label: '基础业务',
labelTip: '配置是否使用BladeX封装的BaseService解锁更多功能',
prop: 'baseMode',
type: 'radio',
dicUrl: '/blade-system/dict/dictionary?code=yes_no',
props: {
label: 'dictValue',
value: 'dictKey',
},
value: 2,
dataType: 'number',
hide: true,
rules: [
{
required: true,
message: '请选择基础业务',
trigger: 'blur',
},
],
},
{
label: '包装器',
labelTip: '配置是否使用Wrapper包装器来拓展Controller返回列表的字段',
prop: 'wrapMode',
type: 'radio',
dicUrl: '/blade-system/dict/dictionary?code=yes_no',
props: {
label: 'dictValue',
value: 'dictKey',
},
value: 2,
dataType: 'number',
hide: true,
rules: [
{
required: true,
message: '请选择包装器',
trigger: 'blur',
},
],
},
{
label: '远程调用',
labelTip: '配置是否使用Feign远程调用',
prop: 'feignMode',
type: 'radio',
dicUrl: '/blade-system/dict/dictionary?code=yes_no',
props: {
label: 'dictValue',
value: 'dictKey',
},
value: 1,
dataType: 'number',
hide: true,
rules: [
{
required: true,
message: '请选择基础业务',
trigger: 'blur',
},
],
},
{
label: '代码风格',
labelTip: '选择不同底层实现的代码模版',
prop: 'codeStyle',
type: 'radio',
dicData: [
{
label: 'saber3',
value: 'saber3',
},
{
label: 'element-plus',
value: 'element-plus',
},
],
value: 'saber3',
hide: true,
rules: [
{
required: true,
message: '请选择代码风格',
trigger: 'blur',
},
],
},
{
label: '后端生成路径',
prop: 'apiPath',
span: 24,
hide: true,
rules: [
{
required: true,
message: '请输入后端生成路径',
trigger: 'blur',
},
],
},
{
label: '前端生成路径',
prop: 'webPath',
span: 24,
hide: true,
rules: [
{
required: true,
message: '请输入前端生成路径',
trigger: 'blur',
},
],
},
],
},
],
};
export const genOption = {
labelWidth: 120,
column: [
{
label: '上级菜单',
prop: 'menuId',
type: 'tree',
dicData: [],
span: 24,
hide: true,
addDisabled: false,
props: {
label: 'title',
},
rules: [
{
required: true,
message: '请选择上级菜单',
trigger: 'click',
},
],
},
{
label: '数据源',
prop: 'datasourceId',
search: true,
span: 24,
type: 'select',
dicUrl: '/blade-develop/datasource/select',
props: {
label: 'name',
value: 'id',
},
rules: [
{
required: true,
message: '请选择数据源',
trigger: 'blur',
},
],
},
{
label: '物理表名',
prop: 'modelTable',
type: 'tree',
slot: true,
filterable: true,
span: 24,
display: true,
dicData: [],
props: {
label: 'comment',
value: 'name',
},
rules: [
{
required: true,
message: '请输入数据库表名',
trigger: 'blur',
},
],
},
{
label: '表单设计',
prop: 'modelForm',
type: 'select',
props: {
label: 'name',
value: 'id',
},
dicData: [],
filterable: true,
display: false,
span: 24,
},
{
label: '模型类名',
prop: 'modelClass',
display: false,
disabled: true,
rules: [
{
required: true,
message: '请输入模型类名',
trigger: 'blur',
},
],
},
{
label: '模型编号',
prop: 'modelCode',
display: false,
rules: [
{
required: true,
message: '请输入模型编号',
trigger: 'blur',
},
],
},
{
label: '模块名',
prop: 'codeName',
display: false,
rules: [
{
required: true,
message: '请输入模块名',
trigger: 'blur',
},
],
},
{
label: '表名',
prop: 'tableName',
display: false,
rules: [
{
required: true,
message: '请输入表名',
trigger: 'blur',
},
],
},
{
label: '表前缀',
prop: 'tablePrefix',
display: false,
rules: [
{
required: true,
message: '请输入表前缀',
trigger: 'blur',
},
],
},
{
label: '主键名',
prop: 'pkName',
display: false,
rules: [
{
required: true,
message: '请输入主键名',
trigger: 'blur',
},
],
},
{
label: '服务名',
prop: 'serviceName',
search: true,
rules: [
{
required: true,
message: '请输入服务名',
trigger: 'blur',
},
],
},
{
label: '包名',
prop: 'packageName',
overHidden: true,
rules: [
{
required: true,
message: '请输入包名',
trigger: 'blur',
},
],
},
{
label: '基础业务',
labelTip: '配置是否使用BladeX封装的BaseService解锁更多功能',
prop: 'baseMode',
type: 'radio',
dicUrl: '/blade-system/dict/dictionary?code=yes_no',
props: {
label: 'dictValue',
value: 'dictKey',
},
value: 2,
dataType: 'number',
hide: true,
rules: [
{
required: true,
message: '请选择基础业务',
trigger: 'blur',
},
],
},
{
label: '包装器',
labelTip: '配置是否使用Wrapper包装器来拓展Controller返回列表的字段',
prop: 'wrapMode',
type: 'radio',
dicUrl: '/blade-system/dict/dictionary?code=yes_no',
props: {
label: 'dictValue',
value: 'dictKey',
},
value: 2,
dataType: 'number',
hide: true,
rules: [
{
required: true,
message: '请选择包装器',
trigger: 'blur',
},
],
},
{
label: '远程调用',
labelTip: '配置是否使用Feign远程调用',
prop: 'feignMode',
type: 'radio',
dicUrl: '/blade-system/dict/dictionary?code=yes_no',
props: {
label: 'dictValue',
value: 'dictKey',
},
value: 1,
dataType: 'number',
hide: true,
rules: [
{
required: true,
message: '请选择基础业务',
trigger: 'blur',
},
],
},
{
label: '代码风格',
labelTip: '选择不同底层实现的代码模版',
prop: 'codeStyle',
type: 'radio',
dicData: [
{
label: 'saber3',
value: 'saber3',
},
{
label: 'element-plus',
value: 'element-plus',
},
],
value: 'saber3',
hide: true,
rules: [
{
required: true,
message: '请选择代码风格',
trigger: 'blur',
},
],
},
{
label: '后端生成路径',
prop: 'apiPath',
span: 24,
hide: true,
rules: [
{
required: true,
message: '请输入后端生成路径',
trigger: 'blur',
},
],
},
{
label: '前端生成路径',
prop: 'webPath',
span: 24,
hide: true,
rules: [
{
required: true,
message: '请输入前端生成路径',
trigger: 'blur',
},
],
},
],
};
+229
View File
@@ -0,0 +1,229 @@
export default {
height: 'auto',
calcHeight: 50,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
grid: true,
selection: true,
labelWidth: 120,
searchLabelWidth: 100,
menuWidth: 320,
dialogClickModal: false,
column: [
{
label: '配置名称',
labelTip: '用于定义本配置的代表名称,实际不参与代码生成',
prop: 'name',
gridRow: true,
search: true,
rules: [
{
required: true,
message: '请输入配置名称',
trigger: 'blur',
},
],
},
{
label: '配置编号',
labelTip: '用于定义本配置的代表编号,实际不参与代码生成',
prop: 'code',
gridRow: true,
search: true,
rules: [
{
required: true,
message: '请输入配置编号',
trigger: 'blur',
},
],
},
{
label: '上级菜单',
prop: 'menuId',
type: 'tree',
dicData: [],
span: 24,
hide: true,
addDisabled: false,
props: {
label: 'title',
},
rules: [
{
required: true,
message: '请选择上级菜单',
trigger: 'click',
},
],
},
{
label: '是否启用',
prop: 'status',
span: 24,
width: 85,
align: 'center',
slot: true,
gridRow: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '配置参数',
prop: 'settings',
display: false,
gridRow: true,
overHidden: true,
rules: [
{
required: true,
message: '请输入服务名',
trigger: 'blur',
},
],
},
{
label: '服务名',
prop: 'serviceName',
hide: true,
rules: [
{
required: true,
message: '请输入服务名',
trigger: 'blur',
},
],
},
{
label: '包名',
prop: 'packageName',
hide: true,
rules: [
{
required: true,
message: '请输入包名',
trigger: 'blur',
},
],
},
{
label: '基础业务',
labelTip: '配置是否使用BladeX封装的BaseService解锁更多功能',
prop: 'baseMode',
type: 'radio',
dicUrl: '/blade-system/dict/dictionary?code=yes_no',
props: {
label: 'dictValue',
value: 'dictKey',
},
value: 2,
dataType: 'number',
hide: true,
rules: [
{
required: true,
message: '请选择基础业务',
trigger: 'blur',
},
],
},
{
label: '包装器',
labelTip: '配置是否使用Wrapper包装器来拓展Controller返回列表的字段',
prop: 'wrapMode',
type: 'radio',
dicUrl: '/blade-system/dict/dictionary?code=yes_no',
props: {
label: 'dictValue',
value: 'dictKey',
},
value: 2,
dataType: 'number',
hide: true,
rules: [
{
required: true,
message: '请选择包装器',
trigger: 'blur',
},
],
},
{
label: '远程调用',
labelTip: '配置是否使用Feign远程调用',
prop: 'feignMode',
type: 'radio',
dicUrl: '/blade-system/dict/dictionary?code=yes_no',
props: {
label: 'dictValue',
value: 'dictKey',
},
value: 1,
dataType: 'number',
hide: true,
rules: [
{
required: true,
message: '请选择基础业务',
trigger: 'blur',
},
],
},
{
label: '代码风格',
labelTip: '选择不同底层实现的代码模版',
prop: 'codeStyle',
type: 'radio',
dicData: [
{
label: 'saber3',
value: 'saber3',
},
{
label: 'element-plus',
value: 'element-plus',
},
],
value: 'saber3',
hide: true,
rules: [
{
required: true,
message: '请选择代码风格',
trigger: 'blur',
},
],
},
{
label: '后端生成路径',
prop: 'apiPath',
span: 24,
hide: true,
rules: [
{
required: true,
message: '请输入后端生成路径',
trigger: 'blur',
},
],
},
{
label: '前端生成路径',
prop: 'webPath',
span: 24,
hide: true,
rules: [
{
required: true,
message: '请输入前端生成路径',
trigger: 'blur',
},
],
},
],
};
+95
View File
@@ -0,0 +1,95 @@
export default {
height: 'auto',
calcHeight: 50,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
grid: true,
selection: true,
labelWidth: 120,
searchLabelWidth: 100,
menuWidth: 320,
dialogWidth: 500,
dialogClickModal: false,
column: [
{
label: '数据源',
labelTip: '数据源管理配置的数据源列表',
prop: 'datasourceId',
hide: true,
editDisplay: false,
viewDisplay: false,
span: 24,
type: 'select',
dicUrl: '/blade-develop/datasource/select',
props: {
label: 'name',
value: 'id',
},
rules: [
{
required: true,
message: '请选择数据源',
trigger: 'blur',
},
],
},
{
label: '物理表名',
labelTip: '从数据源列表选择的物理表名',
filterable: true,
prop: 'modelTable',
type: 'tree',
span: 24,
hide: true,
editDisplay: false,
viewDisplay: false,
dicData: [],
props: {
label: 'comment',
value: 'name',
},
rules: [
{
required: true,
message: '请输入数据库表名',
trigger: 'blur',
},
],
},
{
label: '表单名称',
labelTip: '用于定义本配置的代表名称,默认为数据库表说明',
prop: 'name',
gridRow: true,
search: true,
span: 24,
rules: [
{
required: true,
message: '请输入表单名称',
trigger: 'blur',
},
],
},
{
label: '关联表名',
labelTip: '用于定义本配置的代表编号,默认为数据库表名,在代码快速生成时会关联匹配',
prop: 'code',
gridRow: true,
search: true,
disabled: true,
span: 24,
rules: [
{
required: true,
message: '请输入表单编号',
trigger: 'blur',
},
],
},
],
};
+111
View File
@@ -0,0 +1,111 @@
export const option = {
height: 'auto',
calcHeight: 32,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
selection: true,
addBtn: false,
editBtn: false,
delBtn: false,
viewBtn: false,
menuWidth: 180,
dialogClickModal: false,
column: [
{
label: '姓名',
prop: 'driverName',
search: true,
slot: true,
width: 110,
},
{
label: '身份证号',
prop: 'idCardNo',
search: true,
width: 190,
},
{
label: '手机号码',
prop: 'mobile',
search: true,
width: 130,
},
{
label: '性别',
prop: 'gender',
width: 80,
align: 'center',
},
{
label: '司机类型',
prop: 'driverType',
search: true,
type: 'select',
dicData: [
{
label: '自有',
value: '自有',
},
{
label: '外协',
value: '外协',
},
],
width: 100,
align: 'center',
},
{
label: '岗位',
prop: 'posts',
width: 150,
},
{
label: '准驾车型',
prop: 'drivingType',
search: true,
width: 110,
},
{
label: '所属组织',
prop: 'organizationName',
search: true,
width: 140,
},
{
label: '状态',
prop: 'status',
search: true,
type: 'select',
slot: true,
dicData: [
{
label: '启用',
value: 1,
},
{
label: '停用',
value: 2,
},
],
width: 90,
align: 'center',
},
{
label: '驾驶认证',
prop: 'drivingLicenseEndDate',
slot: true,
width: 130,
align: 'center',
},
{
label: '从业资格认证',
prop: 'qualificationEndDate',
slot: true,
width: 140,
align: 'center',
},
],
};
@@ -0,0 +1,66 @@
export const option = {
height: 'auto',
calcHeight: 32,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
selection: true,
addBtn: false,
editBtn: false,
delBtn: false,
viewBtn: false,
menuWidth: 210,
dialogClickModal: false,
column: [
{ label: '船舶名', prop: 'shipName', search: true, slot: true, width: 130 },
{ label: '船舶识别号', prop: 'shipIdentifierNo', search: true, width: 140 },
{ label: '所属组织', prop: 'organizationName', search: true, width: 160 },
{ label: '船检登记号', prop: 'shipInspectionNo', search: true, width: 130 },
{
label: '船舶类型',
prop: 'shipType',
search: true,
type: 'select',
dicData: [
{ label: '干货船', value: '干货船' },
{ label: '集装箱船', value: '集装箱船' },
{ label: '散货船', value: '散货船' },
{ label: '油船', value: '油船' },
{ label: '拖轮', value: '拖轮' },
],
width: 110,
align: 'center',
},
{
label: '状态',
prop: 'status',
search: true,
type: 'select',
slot: true,
dicData: [
{ label: '启用', value: 1 },
{ label: '停用', value: 2 },
],
width: 90,
align: 'center',
},
{ label: '国籍证有效期至', prop: 'nationalityCertEndDate', slot: true, width: 150, align: 'center' },
{
label: '最低安全配员证书有效期至',
prop: 'safeManningCertEndDate',
slot: true,
width: 210,
align: 'center',
},
{
label: '营业运输证有效期至',
prop: 'businessTransportCertEndDate',
slot: true,
width: 170,
align: 'center',
},
{ label: '承租有效期至', prop: 'leaseEndDate', slot: true, width: 140, align: 'center' },
],
};
@@ -0,0 +1,113 @@
export const option = {
height: 'auto',
calcHeight: 32,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
selection: true,
addBtn: false,
editBtn: false,
delBtn: false,
viewBtn: false,
menuWidth: 180,
dialogClickModal: false,
column: [
{
label: '车牌号',
prop: 'plateNo',
search: true,
slot: true,
width: 120,
},
{
label: '所属组织',
prop: 'organizationName',
search: true,
width: 150,
},
{
label: '车辆类型',
prop: 'vehicleType',
search: true,
type: 'select',
dicData: [
{ label: '厢式', value: '厢式' },
{ label: '高栏', value: '高栏' },
{ label: '平板', value: '平板' },
{ label: '仓栅', value: '仓栅' },
{ label: '牵引车', value: '牵引车' },
],
width: 110,
align: 'center',
},
{
label: '业务关系',
prop: 'businessRelation',
search: true,
type: 'select',
dicData: [
{ label: '自有', value: '自有' },
{ label: '业务合作', value: '业务合作' },
{ label: '管理挂靠', value: '管理挂靠' },
],
width: 120,
align: 'center',
},
{
label: '能源类型',
prop: 'energyType',
search: true,
type: 'select',
dicData: [
{ label: '柴油', value: '柴油' },
{ label: '汽油', value: '汽油' },
{ label: '新能源', value: '新能源' },
{ label: '天然气', value: '天然气' },
],
width: 110,
align: 'center',
},
{
label: '核定载质量(KG)',
prop: 'approvedLoadKg',
width: 140,
align: 'right',
},
{
label: '状态',
prop: 'status',
search: true,
type: 'select',
slot: true,
dicData: [
{ label: '启用', value: 1 },
{ label: '停用', value: 2 },
],
width: 90,
align: 'center',
},
{
label: '行驶证有效期',
prop: 'drivingLicenseEndDate',
slot: true,
width: 140,
align: 'center',
},
{
label: '道路运输证有效期',
prop: 'roadTransportCertEndDate',
slot: true,
width: 160,
align: 'center',
},
{
label: '年审有效期',
prop: 'annualReviewEndDate',
slot: true,
width: 130,
align: 'center',
},
],
};
+277
View File
@@ -0,0 +1,277 @@
import { formatUpdateUserName } from '@/utils/audit';
const validateNonNegative = (rule, value, callback) => {
if (value === undefined || value === null || value === '') {
callback();
} else if (Number(value) < 0) {
callback(new Error('不能小于 0'));
} else {
callback();
}
};
export const vehicleTypeDic = [
{ label: '车辆', value: '车辆' },
{ label: '船舶', value: '船舶' },
];
export const accidentNatureDic = [
{ label: '重大事故', value: '重大事故' },
{ label: '一般事故', value: '一般事故' },
{ label: '轻微事故', value: '轻微事故' },
{ label: '其他', value: '其他' },
];
export const accidentResponsibilityDic = [
{ label: '全部责任', value: '全部责任' },
{ label: '主要责任', value: '主要责任' },
{ label: '同等责任', value: '同等责任' },
{ label: '次要责任', value: '次要责任' },
{ label: '无责任', value: '无责任' },
];
export const option = {
height: 'auto',
calcHeight: 32,
dialogWidth: 1050,
labelPosition: 'top',
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
selection: true,
dialogClickModal: false,
menuWidth: 180,
column: [
{
label: '车船类型',
prop: 'vehicleType',
type: 'radio',
minWidth: 110,
dicData: vehicleTypeDic,
value: '车辆',
search: true,
rules: [{ required: true, message: '请选择车船类型', trigger: 'change' }],
},
{
label: '车牌号/船号',
prop: 'vehicleNo',
slot: true,
formslot: true,
search: true,
minWidth: 140,
rules: [
{ required: true, message: '请输入车牌号/船号', trigger: 'blur' },
{ max: 30, message: '最多 30 个字符', trigger: 'blur' },
],
},
{
label: '事故发生日期',
prop: 'accidentDate',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
minWidth: 140,
rules: [{ required: true, message: '请选择事故发生日期', trigger: 'click' }],
},
{
label: '事故发生地点',
prop: 'accidentLocation',
minWidth: 200,
overHidden: true,
rules: [{ max: 100, message: '最多 100 个字符', trigger: 'blur' }],
},
{
label: '事故性质',
prop: 'accidentNature',
type: 'select',
dicData: accidentNatureDic,
search: true,
minWidth: 120,
},
{
label: '事故责任',
prop: 'accidentResponsibility',
type: 'select',
dicData: accidentResponsibilityDic,
search: true,
minWidth: 120,
},
{
label: '直接经济损失',
prop: 'directEconomicLoss',
type: 'number',
precision: 2,
minWidth: 140,
rules: [{ validator: validateNonNegative, trigger: 'blur' }],
},
{
label: '保险理赔金额',
prop: 'insuranceClaimAmount',
type: 'number',
precision: 2,
minWidth: 140,
rules: [{ validator: validateNonNegative, trigger: 'blur' }],
},
{
label: '事故原因',
prop: 'accidentReasonDamage',
type: 'textarea',
minRows: 3,
span: 24,
search: true,
hide: true,
rules: [{ max: 500, message: '最多 500 个字符', trigger: 'blur' }],
},
{
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 3,
span: 24,
hide: true,
rules: [{ max: 200, message: '最多 200 个字符', trigger: 'blur' }],
},
{
label: '附件',
prop: 'attachments',
type: 'upload',
listType: 'text',
multiple: true,
accept: '.jpg,.jpeg,.png,.pdf',
propsHttp: {
res: 'data',
url: 'link',
name: 'name',
},
action: '/blade-resource/oss/endpoint/put-file',
span: 24,
minWidth: 100,
slot: true,
},
{
label: '事故评定开始日期',
prop: 'accidentAssessmentDateStart',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '事故评定结束日期',
prop: 'accidentAssessmentDateEnd',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建时间',
prop: 'createTime',
type: 'date',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
minWidth: 170,
},
{
label: '创建开始时间',
prop: 'createTimeStart',
type: 'date',
format: 'YYYY-MM-DD 00:00:00',
valueFormat: 'YYYY-MM-DD 00:00:00',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建结束时间',
prop: 'createTimeEnd',
type: 'date',
format: 'YYYY-MM-DD 23:59:59',
valueFormat: 'YYYY-MM-DD 23:59:59',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '组织',
prop: 'createDept',
type: 'tree',
dicData: [],
props: {
label: 'title',
value: 'id',
},
checkStrictly: true,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '更新人',
prop: 'updateUserName',
formatter: formatUpdateUserName,
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 180,
},
{
label: '更新时间',
prop: 'updateTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 170,
},
],
};
export const excelOption = {
submitBtn: false,
emptyBtn: false,
column: [
{
label: '模板上传',
prop: 'excelFile',
type: 'upload',
drag: true,
loadText: '模板上传中,请稍等',
span: 24,
propsHttp: {
res: 'data',
},
tip: '请上传 .xls,.xlsx 标准格式文件',
action: '/blade-transport/accident-record/import-accident-record',
},
{
label: '模板下载',
prop: 'excelTemplate',
formslot: true,
span: 24,
},
],
};
@@ -0,0 +1,284 @@
import { formatUpdateUserName } from '@/utils/audit';
const validateNonNegative = (rule, value, callback) => {
if (value === undefined || value === null || value === '') {
callback();
} else if (Number(value) < 0) {
callback(new Error('不能小于 0'));
} else {
callback();
}
};
export const vehicleTypeDic = [
{ label: '车辆', value: '车辆' },
{ label: '船舶', value: '船舶' },
];
export const vehicleTechnicalLevelDic = [
{ label: '一级', value: '一级' },
{ label: '二级', value: '二级' },
{ label: '三级', value: '三级' },
{ label: '其他', value: '其他' },
];
export const shipInspectionTypeDic = [
{ label: '年检', value: '年检' },
{ label: '中检', value: '中检' },
{ label: '特检', value: '特检' },
{ label: '其他', value: '其他' },
];
export const option = {
height: 'auto',
calcHeight: 32,
dialogWidth: 1050,
labelPosition: 'top',
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
selection: true,
dialogClickModal: false,
menuWidth: 180,
column: [
{
label: '车船类型',
prop: 'vehicleType',
type: 'radio',
minWidth: 110,
dicData: vehicleTypeDic,
value: '车辆',
search: true,
rules: [{ required: true, message: '请选择车船类型', trigger: 'change' }],
},
{
label: '车牌号/船号',
prop: 'vehicleNo',
slot: true,
formslot: true,
search: true,
minWidth: 140,
rules: [
{ required: true, message: '请输入车牌号/船号', trigger: 'blur' },
{ max: 30, message: '最多 30 个字符', trigger: 'blur' },
],
},
{
label: '检测评定日期',
prop: 'inspectionAssessmentDate',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
minWidth: 140,
rules: [{ required: true, message: '请选择检测评定日期', trigger: 'click' }],
},
{
label: '有效期截止日',
prop: 'validUntilDate',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
minWidth: 140,
rules: [{ required: true, message: '请选择有效期截止日', trigger: 'click' }],
},
{
label: '车辆技术等级',
prop: 'vehicleTechnicalLevel',
type: 'select',
dicData: vehicleTechnicalLevelDic,
minWidth: 130,
rules: [{ required: true, message: '请选择车辆技术等级', trigger: 'change' }],
},
{
label: '船舶检验类型',
prop: 'shipInspectionType',
type: 'select',
dicData: shipInspectionTypeDic,
display: false,
minWidth: 130,
rules: [{ required: true, message: '请选择船舶检验类型', trigger: 'change' }],
},
{
label: '客车类型及等级',
prop: 'passengerTypeLevel',
minWidth: 150,
hide: true,
rules: [{ max: 50, message: '最多 50 个字符', trigger: 'blur' }],
},
{
label: '检测评定单位',
prop: 'inspectionUnit',
minWidth: 160,
rules: [{ max: 50, message: '最多 50 个字符', trigger: 'blur' }],
},
{
label: '费用',
prop: 'fee',
type: 'number',
precision: 2,
minWidth: 100,
rules: [
{ required: true, message: '请输入费用', trigger: 'blur' },
{ validator: validateNonNegative, trigger: 'blur' },
],
},
{
label: '评定(复核)单位',
prop: 'assessmentUnit',
minWidth: 160,
hide: true,
rules: [{ max: 50, message: '最多 50 个字符', trigger: 'blur' }],
},
{
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 3,
span: 24,
hide: true,
rules: [{ max: 200, message: '最多 200 个字符', trigger: 'blur' }],
},
{
label: '附件',
prop: 'attachments',
type: 'upload',
listType: 'text',
multiple: true,
accept: '.jpg,.jpeg,.png,.pdf',
propsHttp: {
res: 'data',
url: 'link',
name: 'name',
},
action: '/blade-resource/oss/endpoint/put-file',
span: 24,
minWidth: 100,
slot: true,
},
{
label: '检测评定开始日期',
prop: 'inspectionAssessmentDateStart',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '检测评定结束日期',
prop: 'inspectionAssessmentDateEnd',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建时间',
prop: 'createTime',
type: 'date',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
minWidth: 170,
},
{
label: '创建开始时间',
prop: 'createTimeStart',
type: 'date',
format: 'YYYY-MM-DD 00:00:00',
valueFormat: 'YYYY-MM-DD 00:00:00',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建结束时间',
prop: 'createTimeEnd',
type: 'date',
format: 'YYYY-MM-DD 23:59:59',
valueFormat: 'YYYY-MM-DD 23:59:59',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '组织',
prop: 'createDept',
type: 'tree',
dicData: [],
props: {
label: 'title',
value: 'id',
},
checkStrictly: true,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '更新人',
prop: 'updateUserName',
formatter: formatUpdateUserName,
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 180,
},
{
label: '更新时间',
prop: 'updateTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 170,
},
],
};
export const excelOption = {
submitBtn: false,
emptyBtn: false,
column: [
{
label: '模板上传',
prop: 'excelFile',
type: 'upload',
drag: true,
loadText: '模板上传中,请稍等',
span: 24,
propsHttp: {
res: 'data',
},
tip: '请上传 .xls,.xlsx 标准格式文件',
action: '/blade-transport/annual-inspection-record/import-annual-inspection-record',
},
{
label: '模板下载',
prop: 'excelTemplate',
formslot: true,
span: 24,
},
],
};
+211
View File
@@ -0,0 +1,211 @@
import { formatUpdateUserName } from '@/utils/audit';
const isEmpty = value => value === undefined || value === null || value === '';
const validateNonNegative = (rule, value, callback) => {
if (isEmpty(value)) {
callback();
} else if (Number(value) < 0) {
callback(new Error('不能小于 0'));
} else {
callback();
}
};
const maskEtcCardNo = value => {
if (!value) return '';
const cardNo = String(value);
if (cardNo.length <= 8) return cardNo.replace(/.(?=.{4})/g, '*');
return `${cardNo.slice(0, 4)}**** ****${cardNo.slice(-8)}`;
};
export const option = {
height: 'auto',
calcHeight: 32,
dialogWidth: 980,
labelPosition: 'top',
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
selection: true,
dialogClickModal: false,
menuWidth: 180,
menuFixed: 'right',
column: [
{
label: '车牌号',
prop: 'vehicleNo',
slot: true,
formslot: true,
search: true,
minWidth: 140,
rules: [
{ required: true, message: '请输入车牌号', trigger: 'blur' },
{ max: 30, message: '最多 30 个字符', trigger: 'blur' },
],
},
{
label: 'ETC卡号',
prop: 'etcCardNo',
formatter: row => maskEtcCardNo(row.etcCardNo),
search: true,
minWidth: 220,
rules: [
{ required: true, message: '请输入ETC卡号', trigger: 'blur' },
{ max: 30, message: '最多 30 个字符', trigger: 'blur' },
],
},
{
label: '入口时间',
prop: 'entryTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
minWidth: 170,
},
{
label: '出口时间',
prop: 'exitTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
minWidth: 170,
rules: [{ required: true, message: '请选择出口时间', trigger: 'click' }],
},
{
label: '入口站',
prop: 'entryStation',
minWidth: 150,
rules: [{ max: 50, message: '最多 50 个字符', trigger: 'blur' }],
},
{
label: '出口站',
prop: 'exitStation',
minWidth: 150,
rules: [{ max: 50, message: '最多 50 个字符', trigger: 'blur' }],
},
{
label: '数据来源',
prop: 'dataSource',
value: '手工录入',
minWidth: 120,
addDisplay: false,
editDisplay: false,
},
{
label: '交易金额',
prop: 'transactionAmount',
type: 'number',
precision: 2,
append: '元',
minWidth: 130,
rules: [
{ required: true, message: '请输入交易金额', trigger: 'blur' },
{ validator: validateNonNegative, trigger: 'blur' },
],
},
{
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
span: 24,
minWidth: 180,
overHidden: true,
rules: [{ max: 200, message: '最多 200 个字符', trigger: 'blur' }],
},
{
label: '附件',
prop: 'attachments',
type: 'upload',
listType: 'text',
multiple: true,
accept: '.jpg,.jpeg,.png,.pdf',
propsHttp: {
res: 'data',
url: 'link',
name: 'name',
},
action: '/blade-resource/oss/endpoint/put-file',
span: 24,
minWidth: 100,
slot: true,
},
{
label: '组织',
prop: 'createDept',
type: 'tree',
dicData: [],
props: {
label: 'title',
value: 'id',
},
checkStrictly: true,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建时间',
prop: 'createTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
viewDisplay: false,
minWidth: 170,
},
{
label: '更新人',
prop: 'updateUserName',
formatter: formatUpdateUserName,
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 180,
},
{
label: '更新时间',
prop: 'updateTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 170,
},
],
};
export const excelOption = {
submitBtn: false,
emptyBtn: false,
column: [
{
label: '模板上传',
prop: 'excelFile',
type: 'upload',
drag: true,
loadText: '模板上传中,请稍等',
span: 24,
propsHttp: {
res: 'data',
},
tip: '请上传 .xls,.xlsx 标准格式文件',
action: '/blade-transport/etc-record/import-etc-record',
},
{
label: '模板下载',
prop: 'excelTemplate',
formslot: true,
span: 24,
},
],
};
+262
View File
@@ -0,0 +1,262 @@
import { formatUpdateUserName } from '@/utils/audit';
const validateNonNegative = (rule, value, callback) => {
if (value === undefined || value === null || value === '') {
callback();
} else if (Number(value) < 0) {
callback(new Error('不能小于 0'));
} else {
callback();
}
};
export const vehicleTypeDic = [
{ label: '车辆', value: '车辆' },
{ label: '船舶', value: '船舶' },
];
export const insuranceTypeDic = [
{ label: '交强险', value: '交强险' },
{ label: '商业险', value: '商业险' },
{ label: '承运人责任险', value: '承运人责任险' },
{ label: '货运险', value: '货运险' },
{ label: '船舶险', value: '船舶险' },
];
export const ocrTemplateDic = [
{ label: '紫金-机动车交强险', value: '紫金-机动车交强险' },
{ label: '机动车商业险', value: '机动车商业险' },
{ label: '船舶保险', value: '船舶保险' },
];
export const option = {
height: 'auto',
calcHeight: 32,
dialogWidth: 1100,
labelPosition: 'top',
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
selection: true,
dialogClickModal: false,
menuWidth: 180,
column: [
{
label: '车船类型',
prop: 'vehicleType',
type: 'radio',
minWidth: 110,
dicData: vehicleTypeDic,
value: '车辆',
search: true,
rules: [{ required: true, message: '请选择车船类型', trigger: 'change' }],
},
{
label: 'OCR识别模板',
prop: 'ocrTemplate',
type: 'select',
dicData: ocrTemplateDic,
value: '紫金-机动车交强险',
hide: true,
span: 12,
},
{
label: '上传文件',
prop: 'policyFile',
formslot: true,
hide: true,
span: 24,
},
{
label: '车牌号/船号',
prop: 'vehicleNo',
slot: true,
formslot: true,
search: true,
minWidth: 140,
rules: [
{ required: true, message: '请输入车牌号/船号', trigger: 'blur' },
{ max: 50, message: '最多 50 个字符', trigger: 'blur' },
],
},
{
label: '保险类型',
prop: 'insuranceType',
type: 'select',
dicData: insuranceTypeDic,
search: true,
minWidth: 130,
rules: [{ required: true, message: '请选择保险类型', trigger: 'change' }],
},
{
label: '保单号',
prop: 'policyNo',
minWidth: 170,
rules: [
{ required: true, message: '请输入保单号', trigger: 'blur' },
{ max: 80, message: '最多 80 个字符', trigger: 'blur' },
],
},
{
label: '开始日期',
prop: 'startDate',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
minWidth: 120,
rules: [{ required: true, message: '请选择开始日期', trigger: 'click' }],
},
{
label: '结束日期',
prop: 'endDate',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
minWidth: 120,
rules: [{ required: true, message: '请选择结束日期', trigger: 'click' }],
},
{
label: '保额',
prop: 'insuredAmount',
type: 'number',
precision: 2,
minWidth: 120,
rules: [{ validator: validateNonNegative, trigger: 'blur' }],
},
{
label: '保费',
prop: 'premium',
type: 'number',
precision: 2,
minWidth: 120,
rules: [
{ required: true, message: '请输入保费', trigger: 'blur' },
{ validator: validateNonNegative, trigger: 'blur' },
],
},
{
label: '发票号',
prop: 'invoiceNo',
minWidth: 150,
rules: [{ max: 80, message: '最多 80 个字符', trigger: 'blur' }],
},
{
label: '开票日期',
prop: 'invoiceDate',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
minWidth: 120,
},
{
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 3,
span: 24,
hide: true,
rules: [{ max: 200, message: '备注最多 200 个字', trigger: 'blur' }],
},
{
label: '创建时间',
prop: 'createTime',
type: 'date',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
minWidth: 170,
},
{
label: '创建开始时间',
prop: 'createTimeStart',
type: 'date',
format: 'YYYY-MM-DD 00:00:00',
valueFormat: 'YYYY-MM-DD 00:00:00',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建结束时间',
prop: 'createTimeEnd',
type: 'date',
format: 'YYYY-MM-DD 23:59:59',
valueFormat: 'YYYY-MM-DD 23:59:59',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '组织',
prop: 'createDept',
type: 'tree',
dicData: [],
props: {
label: 'title',
value: 'id',
},
checkStrictly: true,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '更新人',
prop: 'updateUserName',
formatter: formatUpdateUserName,
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 180,
},
{
label: '更新时间',
prop: 'updateTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 170,
},
],
};
export const excelOption = {
submitBtn: false,
emptyBtn: false,
column: [
{
label: '模板上传',
prop: 'excelFile',
type: 'upload',
drag: true,
loadText: '模板上传中,请稍等',
span: 24,
propsHttp: {
res: 'data',
},
tip: '请上传 .xls,.xlsx 标准格式文件',
action: '/blade-transport/insurance-record/import-insurance-record',
},
{
label: '模板下载',
prop: 'excelTemplate',
formslot: true,
span: 24,
},
],
};
+223
View File
@@ -0,0 +1,223 @@
import { formatUpdateUserName } from '@/utils/audit';
const isEmpty = value => value === undefined || value === null || value === '';
const validateNonNegative = (rule, value, callback) => {
if (isEmpty(value)) {
callback();
} else if (Number(value) < 0) {
callback(new Error('不能小于 0'));
} else {
callback();
}
};
export const option = {
height: 'auto',
calcHeight: 32,
dialogWidth: 980,
labelPosition: 'top',
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
selection: true,
dialogClickModal: false,
menuWidth: 180,
menuFixed: 'right',
column: [
{
label: '车牌号',
prop: 'vehicleNo',
slot: true,
formslot: true,
search: true,
minWidth: 130,
rules: [
{ required: true, message: '请输入车牌号', trigger: 'blur' },
{ max: 30, message: '最多 30 个字符', trigger: 'blur' },
],
},
{
label: '上月统计日里程表示值(km)',
prop: 'previousMonthMileage',
type: 'number',
precision: 2,
minWidth: 210,
rules: [{ validator: validateNonNegative, trigger: 'blur' }],
},
{
label: '本月统计日里程表示值(km)',
prop: 'currentMonthMileage',
type: 'number',
precision: 2,
minWidth: 210,
rules: [{ validator: validateNonNegative, trigger: 'blur' }],
},
{
label: '本月行驶里程(km',
prop: 'monthlyMileage',
type: 'number',
precision: 2,
minWidth: 170,
rules: [{ validator: validateNonNegative, trigger: 'blur' }],
},
{
label: '累计行驶里程(km',
prop: 'totalMileage',
type: 'number',
precision: 2,
minWidth: 170,
rules: [{ validator: validateNonNegative, trigger: 'blur' }],
},
{
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
span: 24,
minWidth: 180,
overHidden: true,
rules: [{ max: 200, message: '最多 200 个字符', trigger: 'blur' }],
},
{
label: '附件',
prop: 'attachments',
type: 'upload',
listType: 'text',
multiple: true,
accept: '.jpg,.jpeg,.png,.pdf',
propsHttp: {
res: 'data',
url: 'link',
name: 'name',
},
action: '/blade-resource/oss/endpoint/put-file',
span: 24,
minWidth: 100,
slot: true,
},
{
label: '累计行驶里程开始值',
prop: 'totalMileageStart',
type: 'number',
precision: 2,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '累计行驶里程结束值',
prop: 'totalMileageEnd',
type: 'number',
precision: 2,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建时间',
prop: 'createTime',
type: 'date',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
minWidth: 170,
},
{
label: '创建开始时间',
prop: 'createTimeStart',
type: 'date',
format: 'YYYY-MM-DD 00:00:00',
valueFormat: 'YYYY-MM-DD 00:00:00',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建结束时间',
prop: 'createTimeEnd',
type: 'date',
format: 'YYYY-MM-DD 23:59:59',
valueFormat: 'YYYY-MM-DD 23:59:59',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '组织',
prop: 'createDept',
type: 'tree',
dicData: [],
props: {
label: 'title',
value: 'id',
},
checkStrictly: true,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '更新人',
prop: 'updateUserName',
formatter: formatUpdateUserName,
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 180,
},
{
label: '更新时间',
prop: 'updateTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 170,
},
],
};
export const excelOption = {
submitBtn: false,
emptyBtn: false,
column: [
{
label: '模板上传',
prop: 'excelFile',
type: 'upload',
drag: true,
loadText: '模板上传中,请稍等',
span: 24,
propsHttp: {
res: 'data',
},
tip: '请上传 .xls,.xlsx 标准格式文件',
action: '/blade-transport/mileage-record/import-mileage-record',
},
{
label: '模板下载',
prop: 'excelTemplate',
formslot: true,
span: 24,
},
],
};
+321
View File
@@ -0,0 +1,321 @@
import { formatUpdateUserName } from '@/utils/audit';
const isEmpty = value => value === undefined || value === null || value === '';
const validateNonNegative = (rule, value, callback) => {
if (isEmpty(value)) {
callback();
} else if (Number(value) < 0) {
callback(new Error('不能小于 0'));
} else {
callback();
}
};
export const vehicleTypeDic = [
{ label: '车辆', value: '车辆' },
{ label: '船舶', value: '船舶' },
];
export const feeTypeDic = [
{ label: '加油', value: '加油' },
{ label: '充电', value: '充电' },
];
export const option = {
height: 'auto',
calcHeight: 32,
dialogWidth: 980,
labelPosition: 'top',
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
selection: true,
dialogClickModal: false,
menuWidth: 180,
menuFixed: 'right',
column: [
{
label: '卡号',
prop: 'cardNo',
minWidth: 150,
rules: [{ max: 30, message: '最多 30 个字符', trigger: 'blur' }],
},
{
label: '交易时间',
prop: 'transactionTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
minWidth: 170,
rules: [{ required: true, message: '请选择交易时间', trigger: 'click' }],
},
{
label: '车船类型',
prop: 'vehicleType',
type: 'radio',
dicData: vehicleTypeDic,
value: '车辆',
search: true,
minWidth: 110,
rules: [{ required: true, message: '请选择车船类型', trigger: 'change' }],
},
{
label: '费用类型',
prop: 'feeType',
type: 'select',
dicData: feeTypeDic,
search: true,
minWidth: 120,
rules: [{ required: true, message: '请选择费用类型', trigger: 'change' }],
},
{
label: '油品',
prop: 'oilProduct',
minWidth: 160,
rules: [{ max: 50, message: '最多 50 个字符', trigger: 'blur' }],
},
{
label: '车牌号/船号',
prop: 'vehicleNo',
slot: true,
formslot: true,
search: true,
minWidth: 150,
rules: [
{ required: true, message: '请输入车牌号/船号', trigger: 'blur' },
{ max: 30, message: '最多 30 个字符', trigger: 'blur' },
],
},
{
label: '持卡人',
prop: 'cardHolder',
minWidth: 120,
rules: [{ max: 20, message: '最多 20 个字符', trigger: 'blur' }],
},
{
label: '数据来源',
prop: 'dataSource',
value: '手工录入',
minWidth: 120,
addDisplay: false,
editDisplay: false,
},
{
label: '数量',
prop: 'quantity',
type: 'number',
precision: 2,
minWidth: 110,
rules: [{ validator: validateNonNegative, trigger: 'blur' }],
},
{
label: '单价',
prop: 'unitPrice',
type: 'number',
precision: 2,
minWidth: 120,
append: '元/升',
rules: [{ validator: validateNonNegative, trigger: 'blur' }],
},
{
label: '交易金额',
prop: 'transactionAmount',
type: 'number',
precision: 2,
minWidth: 130,
rules: [
{ required: true, message: '请输入交易金额', trigger: 'blur' },
{ validator: validateNonNegative, trigger: 'blur' },
],
},
{
label: '余额',
prop: 'balance',
type: 'number',
precision: 2,
minWidth: 110,
rules: [{ validator: validateNonNegative, trigger: 'blur' }],
},
{
label: '站点',
prop: 'station',
minWidth: 150,
rules: [{ max: 50, message: '最多 50 个字符', trigger: 'blur' }],
},
{
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
span: 24,
minWidth: 180,
overHidden: true,
rules: [{ max: 200, message: '最多 200 个字符', trigger: 'blur' }],
},
{
label: '附件',
prop: 'attachments',
type: 'upload',
listType: 'text',
multiple: true,
accept: '.jpg,.jpeg,.png,.pdf',
propsHttp: {
res: 'data',
url: 'link',
name: 'name',
},
action: '/blade-resource/oss/endpoint/put-file',
span: 24,
minWidth: 100,
slot: true,
},
{
label: '交易开始时间',
prop: 'transactionTimeStart',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '交易结束时间',
prop: 'transactionTimeEnd',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '消费金额开始值',
prop: 'transactionAmountStart',
type: 'number',
precision: 2,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '消费金额结束值',
prop: 'transactionAmountEnd',
type: 'number',
precision: 2,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建时间',
prop: 'createTime',
type: 'date',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
minWidth: 170,
},
{
label: '创建开始时间',
prop: 'createTimeStart',
type: 'date',
format: 'YYYY-MM-DD 00:00:00',
valueFormat: 'YYYY-MM-DD 00:00:00',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建结束时间',
prop: 'createTimeEnd',
type: 'date',
format: 'YYYY-MM-DD 23:59:59',
valueFormat: 'YYYY-MM-DD 23:59:59',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '组织',
prop: 'createDept',
type: 'tree',
dicData: [],
props: {
label: 'title',
value: 'id',
},
checkStrictly: true,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '更新人',
prop: 'updateUserName',
formatter: formatUpdateUserName,
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 180,
},
{
label: '更新时间',
prop: 'updateTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 170,
},
],
};
export const excelOption = {
submitBtn: false,
emptyBtn: false,
column: [
{
label: '模板上传',
prop: 'excelFile',
type: 'upload',
drag: true,
loadText: '模板上传中,请稍等',
span: 24,
propsHttp: {
res: 'data',
},
tip: '请上传 .xls,.xlsx 标准格式文件',
action: '/blade-transport/oil-electric-record/import-oil-electric-record',
},
{
label: '模板下载',
prop: 'excelTemplate',
formslot: true,
span: 24,
},
],
};
+220
View File
@@ -0,0 +1,220 @@
import { formatUpdateUserName } from '@/utils/audit';
const isEmpty = value => value === undefined || value === null || value === '';
const validateNonNegative = (rule, value, callback) => {
if (isEmpty(value)) {
callback();
} else if (Number(value) < 0) {
callback(new Error('不能小于 0'));
} else {
callback();
}
};
export const vehicleTypeDic = [
{ label: '车辆', value: '车辆' },
{ label: '船舶', value: '船舶' },
];
export const expenseTypeDic = [
{ label: '过路费', value: '过路费' },
{ label: '停车费', value: '停车费' },
{ label: '维修费', value: '维修费' },
{ label: '保险费', value: '保险费' },
{ label: '年检费', value: '年检费' },
{ label: '装卸费', value: '装卸费' },
{ label: '其他', value: '其他' },
];
export const option = {
height: 'auto',
calcHeight: 32,
dialogWidth: 980,
labelPosition: 'top',
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
selection: true,
dialogClickModal: false,
menuWidth: 180,
menuFixed: 'right',
column: [
{
label: '费用日期',
prop: 'expenseDate',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
minWidth: 140,
rules: [{ required: true, message: '请选择费用日期', trigger: 'click' }],
},
{
label: '其他费用类型',
prop: 'expenseType',
type: 'select',
dicData: expenseTypeDic,
search: true,
minWidth: 150,
rules: [{ required: true, message: '请选择其他费用类型', trigger: 'change' }],
},
{
label: '车船类型',
prop: 'vehicleType',
type: 'radio',
dicData: vehicleTypeDic,
value: '车辆',
search: true,
minWidth: 110,
rules: [{ required: true, message: '请选择车船类型', trigger: 'change' }],
},
{
label: '车牌号/船号',
prop: 'vehicleNo',
slot: true,
formslot: true,
search: true,
minWidth: 150,
rules: [
{ required: true, message: '请输入车牌号/船号', trigger: 'blur' },
{ max: 30, message: '最多 30 个字符', trigger: 'blur' },
],
},
{
label: '数据来源',
prop: 'dataSource',
value: '手工录入',
minWidth: 120,
addDisplay: false,
editDisplay: false,
},
{
label: '金额',
prop: 'amount',
type: 'number',
precision: 2,
append: '元',
minWidth: 120,
rules: [
{ required: true, message: '请输入金额', trigger: 'blur' },
{ validator: validateNonNegative, trigger: 'blur' },
],
},
{
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
span: 24,
minWidth: 180,
overHidden: true,
rules: [{ max: 200, message: '最多 200 个字符', trigger: 'blur' }],
},
{
label: '附件',
prop: 'attachments',
type: 'upload',
listType: 'text',
multiple: true,
accept: '.jpg,.jpeg,.png,.pdf',
propsHttp: {
res: 'data',
url: 'link',
name: 'name',
},
action: '/blade-resource/oss/endpoint/put-file',
span: 24,
minWidth: 100,
slot: true,
},
{
label: '费用日期',
prop: 'expenseDateRange',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
searchRange: true,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '组织',
prop: 'createDept',
type: 'tree',
dicData: [],
props: {
label: 'title',
value: 'id',
},
checkStrictly: true,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建时间',
prop: 'createTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
viewDisplay: false,
minWidth: 170,
},
{
label: '更新人',
prop: 'updateUserName',
formatter: formatUpdateUserName,
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 180,
},
{
label: '更新时间',
prop: 'updateTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 170,
},
],
};
export const excelOption = {
submitBtn: false,
emptyBtn: false,
column: [
{
label: '模板上传',
prop: 'excelFile',
type: 'upload',
drag: true,
loadText: '模板上传中,请稍等',
span: 24,
propsHttp: {
res: 'data',
},
tip: '请上传 .xls,.xlsx 标准格式文件',
action: '/blade-transport/other-expense-record/import-other-expense-record',
},
{
label: '模板下载',
prop: 'excelTemplate',
formslot: true,
span: 24,
},
],
};
@@ -0,0 +1,223 @@
import { formatUpdateUserName } from '@/utils/audit';
const validateNonNegative = (rule, value, callback) => {
if (value === undefined || value === null || value === '') {
callback();
} else if (Number(value) < 0) {
callback(new Error('不能小于 0'));
} else {
callback();
}
};
const validatePositiveInteger = (rule, value, callback) => {
if (value === undefined || value === null || value === '') {
callback();
} else if (!Number.isInteger(Number(value)) || Number(value) <= 0) {
callback(new Error('换胎数量必须为正整数'));
} else {
callback();
}
};
export const option = {
height: 'auto',
calcHeight: 32,
dialogWidth: 980,
labelPosition: 'top',
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
selection: true,
dialogClickModal: false,
menuWidth: 180,
column: [
{
label: '车牌号',
prop: 'vehicleNo',
slot: true,
formslot: true,
search: true,
minWidth: 130,
rules: [
{ required: true, message: '请输入车牌号', trigger: 'blur' },
{ max: 30, message: '最多 30 个字符', trigger: 'blur' },
],
},
{
label: '处理人',
prop: 'handler',
minWidth: 120,
rules: [{ max: 20, message: '最多 20 个字符', trigger: 'blur' }],
},
{
label: '换胎时间',
prop: 'replacementTime',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
minWidth: 130,
rules: [{ required: true, message: '请选择换胎时间', trigger: 'click' }],
},
{
label: '轮胎品牌',
prop: 'tireBrand',
minWidth: 140,
rules: [{ max: 50, message: '最多 50 个字符', trigger: 'blur' }],
},
{
label: '换胎数量',
prop: 'tireQuantity',
type: 'number',
precision: 0,
minWidth: 110,
rules: [{ validator: validatePositiveInteger, trigger: 'blur' }],
},
{
label: '换胎费用',
prop: 'replacementCost',
type: 'number',
precision: 2,
minWidth: 120,
rules: [
{ required: true, message: '请输入换胎费用', trigger: 'blur' },
{ validator: validateNonNegative, trigger: 'blur' },
],
},
{
label: '换胎说明',
prop: 'replacementDescription',
minWidth: 180,
overHidden: true,
rules: [{ max: 200, message: '最多 200 个字符', trigger: 'blur' }],
},
{
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
span: 24,
minWidth: 180,
overHidden: true,
rules: [{ max: 500, message: '最多 500 个字符', trigger: 'blur' }],
},
{
label: '附件',
prop: 'attachments',
type: 'upload',
listType: 'text',
multiple: true,
accept: '.jpg,.jpeg,.png,.pdf',
propsHttp: {
res: 'data',
url: 'link',
name: 'name',
},
action: '/blade-resource/oss/endpoint/put-file',
span: 24,
minWidth: 100,
slot: true,
},
{
label: '创建时间',
prop: 'createTime',
type: 'date',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
minWidth: 170,
},
{
label: '创建开始时间',
prop: 'createTimeStart',
type: 'date',
format: 'YYYY-MM-DD 00:00:00',
valueFormat: 'YYYY-MM-DD 00:00:00',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建结束时间',
prop: 'createTimeEnd',
type: 'date',
format: 'YYYY-MM-DD 23:59:59',
valueFormat: 'YYYY-MM-DD 23:59:59',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '组织',
prop: 'createDept',
type: 'tree',
dicData: [],
props: {
label: 'title',
value: 'id',
},
checkStrictly: true,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '更新人',
prop: 'updateUserName',
formatter: formatUpdateUserName,
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 180,
},
{
label: '更新时间',
prop: 'updateTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 170,
},
],
};
export const excelOption = {
submitBtn: false,
emptyBtn: false,
column: [
{
label: '模板上传',
prop: 'excelFile',
type: 'upload',
drag: true,
loadText: '模板上传中,请稍等',
span: 24,
propsHttp: {
res: 'data',
},
tip: '请上传 .xls,.xlsx 标准格式文件',
action: '/blade-transport/tire-replacement-record/import-tire-replacement-record',
},
{
label: '模板下载',
prop: 'excelTemplate',
formslot: true,
span: 24,
},
],
};
@@ -0,0 +1,199 @@
import { formatUpdateUserName } from '@/utils/audit';
export const vehicleTypeDic = [
{ label: '车辆', value: '车辆' },
{ label: '船舶', value: '船舶' },
];
export const changeItemDic = [
{ label: '所有人变更', value: '所有人变更' },
{ label: '挂靠变更', value: '挂靠变更' },
{ label: '经营范围变更', value: '经营范围变更' },
{ label: '车牌号变更', value: '车牌号变更' },
{ label: '其他', value: '其他' },
];
export const option = {
height: 'auto',
calcHeight: 32,
dialogWidth: 980,
labelPosition: 'top',
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
selection: true,
dialogClickModal: false,
menuWidth: 180,
menuFixed: 'right',
column: [
{
label: '车船类型',
prop: 'vehicleType',
type: 'radio',
minWidth: 110,
dicData: vehicleTypeDic,
value: '车辆',
search: true,
rules: [{ required: true, message: '请选择车船类型', trigger: 'change' }],
},
{
label: '车牌号/船号',
prop: 'vehicleNo',
slot: true,
formslot: true,
search: true,
minWidth: 140,
rules: [{ max: 30, message: '最多 30 个字符', trigger: 'blur' }],
},
{
label: '变更事项',
prop: 'changeItem',
type: 'select',
dicData: changeItemDic,
minWidth: 180,
rules: [{ required: true, message: '请选择变更事项', trigger: 'change' }],
},
{
label: '变更内容',
prop: 'changeContent',
type: 'textarea',
minRows: 4,
span: 24,
search: true,
minWidth: 260,
overHidden: true,
rules: [
{ required: true, message: '请输入变更内容', trigger: 'blur' },
{ max: 200, message: '最多 200 个字符', trigger: 'blur' },
],
},
{
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
span: 24,
minWidth: 180,
overHidden: true,
rules: [{ max: 200, message: '最多 200 个字符', trigger: 'blur' }],
},
{
label: '附件',
prop: 'attachments',
type: 'upload',
listType: 'text',
multiple: true,
accept: '.jpg,.jpeg,.png,.pdf',
propsHttp: {
res: 'data',
url: 'link',
name: 'name',
},
action: '/blade-resource/oss/endpoint/put-file',
span: 24,
minWidth: 100,
slot: true,
},
{
label: '创建时间',
prop: 'createTime',
type: 'date',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
minWidth: 170,
},
{
label: '创建开始时间',
prop: 'createTimeStart',
type: 'date',
format: 'YYYY-MM-DD 00:00:00',
valueFormat: 'YYYY-MM-DD 00:00:00',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建结束时间',
prop: 'createTimeEnd',
type: 'date',
format: 'YYYY-MM-DD 23:59:59',
valueFormat: 'YYYY-MM-DD 23:59:59',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '组织',
prop: 'createDept',
type: 'tree',
dicData: [],
props: {
label: 'title',
value: 'id',
},
checkStrictly: true,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '更新人',
prop: 'updateUserName',
formatter: formatUpdateUserName,
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 180,
},
{
label: '更新时间',
prop: 'updateTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 170,
},
],
};
export const excelOption = {
submitBtn: false,
emptyBtn: false,
column: [
{
label: '模板上传',
prop: 'excelFile',
type: 'upload',
drag: true,
loadText: '模板上传中,请稍等',
span: 24,
propsHttp: {
res: 'data',
},
tip: '请上传 .xls,.xlsx 标准格式文件',
action: '/blade-transport/transport-change-record/import-transport-change-record',
},
{
label: '模板下载',
prop: 'excelTemplate',
formslot: true,
span: 24,
},
],
};
+297
View File
@@ -0,0 +1,297 @@
import { formatUpdateUserName } from '@/utils/audit';
const validateNonNegative = (rule, value, callback) => {
if (value === undefined || value === null || value === '') {
callback();
} else if (Number(value) < 0) {
callback(new Error('不能小于 0'));
} else {
callback();
}
};
const validateDeductPoints = (rule, value, callback) => {
if (value === undefined || value === null || value === '') {
callback();
} else if (!Number.isInteger(Number(value)) || Number(value) < 0 || Number(value) > 15) {
callback(new Error('被扣分数范围为 0-15 分'));
} else {
callback();
}
};
export const vehicleTypeDic = [
{ label: '车辆', value: '车辆' },
{ label: '船舶', value: '船舶' },
];
export const violationTypeDic = [
{ label: '闯红灯', value: '闯红灯' },
{ label: '超速', value: '超速' },
{ label: '违停', value: '违停' },
{ label: '压线', value: '压线' },
{ label: '其他', value: '其他' },
];
export const processStatusDic = [
{ label: '未处理', value: '未处理' },
{ label: '已处理', value: '已处理' },
];
export const option = {
height: 'auto',
calcHeight: 32,
dialogWidth: 1100,
labelPosition: 'top',
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
selection: true,
dialogClickModal: false,
menuWidth: 180,
column: [
{
label: '车船类型',
prop: 'vehicleType',
type: 'radio',
minWidth: 110,
dicData: vehicleTypeDic,
value: '车辆',
search: true,
rules: [{ required: true, message: '请选择车船类型', trigger: 'change' }],
},
{
label: '车牌号/船号',
prop: 'vehicleNo',
slot: true,
formslot: true,
search: true,
minWidth: 140,
rules: [
{ required: true, message: '请输入车牌号/船号', trigger: 'blur' },
{ max: 30, message: '最多 30 个字符', trigger: 'blur' },
],
},
{
label: '驾驶人',
prop: 'driverName',
formslot: true,
search: true,
minWidth: 120,
rules: [
{ required: true, message: '请输入驾驶人/船长', trigger: 'blur' },
{ max: 20, message: '最多 20 个字符', trigger: 'blur' },
],
},
{
label: '类型',
prop: 'violationType',
type: 'select',
dicData: violationTypeDic,
minWidth: 120,
rules: [{ required: true, message: '请选择类型', trigger: 'change' }],
},
{
label: '事项',
prop: 'violationItem',
minWidth: 180,
overHidden: true,
display: false,
rules: [
{ required: true, message: '请输入事项', trigger: 'blur' },
{ max: 100, message: '最多 100 个字符', trigger: 'blur' },
],
},
{
label: '日期',
prop: 'violationTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
minWidth: 170,
rules: [{ required: true, message: '请选择时间', trigger: 'click' }],
},
{
label: '地点',
prop: 'location',
minWidth: 180,
overHidden: true,
rules: [
{ required: true, message: '请输入地点', trigger: 'blur' },
{ max: 100, message: '最多 100 个字符', trigger: 'blur' },
],
},
{
label: '罚款',
prop: 'fineAmount',
type: 'number',
precision: 2,
minWidth: 100,
rules: [{ validator: validateNonNegative, trigger: 'blur' }],
},
{
label: '被扣分数',
prop: 'deductPoints',
type: 'number',
precision: 0,
hide: true,
rules: [{ validator: validateDeductPoints, trigger: 'blur' }],
},
{
label: '被罚单位',
prop: 'penaltyUnit',
minWidth: 150,
hide: true,
rules: [{ max: 50, message: '最多 50 个字符', trigger: 'blur' }],
},
{
label: '状态',
prop: 'processStatus',
type: 'radio',
dicData: processStatusDic,
value: '已处理',
search: true,
minWidth: 120,
rules: [{ required: true, message: '请选择状态', trigger: 'change' }],
},
{
label: '过程描述',
prop: 'processDescription',
type: 'textarea',
minRows: 3,
span: 24,
hide: true,
rules: [
{ required: true, message: '请输入过程描述', trigger: 'blur' },
{ max: 500, message: '最多 500 个字符', trigger: 'blur' },
],
},
{
label: '处理结果',
prop: 'processResult',
type: 'textarea',
minRows: 3,
span: 24,
hide: true,
rules: [{ max: 500, message: '最多 500 个字符', trigger: 'blur' }],
},
{
label: '附件',
prop: 'attachments',
type: 'upload',
listType: 'text',
multiple: true,
accept: '.jpg,.jpeg,.png,.pdf',
propsHttp: {
res: 'data',
url: 'link',
name: 'name',
},
action: '/blade-resource/oss/endpoint/put-file',
span: 24,
minWidth: 100,
slot: true,
},
{
label: '创建时间',
prop: 'createTime',
type: 'date',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
minWidth: 170,
},
{
label: '创建开始时间',
prop: 'createTimeStart',
type: 'date',
format: 'YYYY-MM-DD 00:00:00',
valueFormat: 'YYYY-MM-DD 00:00:00',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '创建结束时间',
prop: 'createTimeEnd',
type: 'date',
format: 'YYYY-MM-DD 23:59:59',
valueFormat: 'YYYY-MM-DD 23:59:59',
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '组织',
prop: 'createDept',
type: 'tree',
dicData: [],
props: {
label: 'title',
value: 'id',
},
checkStrictly: true,
search: true,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '更新人',
prop: 'updateUserName',
formatter: formatUpdateUserName,
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 180,
},
{
label: '更新时间',
prop: 'updateTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
addDisplay: false,
editDisplay: false,
display: false,
minWidth: 170,
},
],
};
export const excelOption = {
submitBtn: false,
emptyBtn: false,
column: [
{
label: '模板上传',
prop: 'excelFile',
type: 'upload',
drag: true,
loadText: '模板上传中,请稍等',
span: 24,
propsHttp: {
res: 'data',
},
tip: '请上传 .xls,.xlsx 标准格式文件',
action: '/blade-transport/violation-record/import-violation-record',
},
{
label: '模板下载',
prop: 'excelTemplate',
formslot: true,
span: 24,
},
],
};