Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
zrch-risk-39
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Administrator
zrch-risk-39
Commits
5c6ba540
提交
5c6ba540
authored
3月 18, 2026
作者:
kxjia
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
添加代办任务
上级
bd21c362
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
531 行增加
和
0 行删除
+531
-0
MyTask.api.ts
zrch-risk-client-39/src/views/my/MyTask.api.ts
+64
-0
MyTask.data.ts
zrch-risk-client-39/src/views/my/MyTask.data.ts
+153
-0
MyTaskList.vue
zrch-risk-client-39/src/views/my/MyTaskList.vue
+178
-0
MyTaskForm.vue
zrch-risk-client-39/src/views/my/components/MyTaskForm.vue
+69
-0
MyTaskModal.vue
zrch-risk-client-39/src/views/my/components/MyTaskModal.vue
+67
-0
没有找到文件。
zrch-risk-client-39/src/views/my/MyTask.api.ts
0 → 100644
浏览文件 @
5c6ba540
import
{
defHttp
}
from
'/@/utils/http/axios'
;
import
{
useMessage
}
from
"/@/hooks/web/useMessage"
;
const
{
createConfirm
}
=
useMessage
();
enum
Api
{
list
=
'/my/myTask/list'
,
save
=
'/my/myTask/add'
,
edit
=
'/my/myTask/edit'
,
deleteOne
=
'/my/myTask/delete'
,
deleteBatch
=
'/my/myTask/deleteBatch'
,
importExcel
=
'/my/myTask/importExcel'
,
exportXls
=
'/my/myTask/exportXls'
,
}
/**
* 导出api
* @param params
*/
export
const
getExportUrl
=
Api
.
exportXls
;
/**
* 导入api
*/
export
const
getImportUrl
=
Api
.
importExcel
;
/**
* 列表接口
* @param params
*/
export
const
list
=
(
params
)
=>
defHttp
.
get
({
url
:
Api
.
list
,
params
});
/**
* 删除单个
*/
export
const
deleteOne
=
(
params
,
handleSuccess
)
=>
{
return
defHttp
.
delete
({
url
:
Api
.
deleteOne
,
params
},
{
joinParamsToUrl
:
true
}).
then
(()
=>
{
handleSuccess
();
});
}
/**
* 批量删除
* @param params
*/
export
const
batchDelete
=
(
params
,
handleSuccess
)
=>
{
createConfirm
({
iconType
:
'warning'
,
title
:
'确认删除'
,
content
:
'是否删除选中数据'
,
okText
:
'确认'
,
cancelText
:
'取消'
,
onOk
:
()
=>
{
return
defHttp
.
delete
({
url
:
Api
.
deleteBatch
,
data
:
params
},
{
joinParamsToUrl
:
true
}).
then
(()
=>
{
handleSuccess
();
});
}
});
}
/**
* 保存或者更新
* @param params
*/
export
const
saveOrUpdate
=
(
params
,
isUpdate
)
=>
{
let
url
=
isUpdate
?
Api
.
edit
:
Api
.
save
;
return
defHttp
.
post
({
url
:
url
,
params
});
}
zrch-risk-client-39/src/views/my/MyTask.data.ts
0 → 100644
浏览文件 @
5c6ba540
import
{
BasicColumn
}
from
'/@/components/Table'
;
import
{
FormSchema
}
from
'/@/components/Table'
;
import
{
rules
}
from
'/@/utils/helper/validator'
;
import
{
render
}
from
'/@/utils/common/renderUtils'
;
//列表数据
export
const
columns
:
BasicColumn
[]
=
[
{
title
:
'待办任务描述'
,
align
:
"left"
,
dataIndex
:
'name'
,
width
:
200
,
},
{
title
:
'待办任务'
,
align
:
"center"
,
dataIndex
:
'taskName'
,
width
:
100
,
},
// {
// title: '跳转地址',
// align:"center",
// dataIndex: 'target',
// width:100,
// },
{
title
:
'是否完成'
,
dataIndex
:
'sta'
,
customRender
:
({
text
})
=>
{
const
color
=
text
==
'0'
?
'red'
:
text
==
'1'
?
'green'
:
'gray'
;
const
strText
=
text
==
'0'
?
'未完成'
:
'已完成'
;
return
render
.
renderTag
(
strText
,
color
);
},
width
:
100
,
},
{
title
:
'优先级'
,
dataIndex
:
'priority'
,
width
:
100
,
customRender
:
({
text
})
=>
{
const
color
=
text
==
'L'
?
'blue'
:
text
==
'M'
?
'yellow'
:
'red'
;
return
render
.
renderTag
(
render
.
renderDict
(
text
,
'priority'
),
color
);
},
},
{
title
:
'开始时间'
,
align
:
"center"
,
dataIndex
:
'stTime'
,
width
:
130
,
// customRender:({text}) =>{
// return !text?"":(text.length>10?text.substr(0,10):text)
// },
},
// {
// title: '完成时间',
// align:"center",
// dataIndex: 'endTime',
// width:130,
// customRender:({text}) =>{
// return !text?"":(text.length>10?text.substr(0,10):text)
// },
// },
{
title
:
'描述'
,
align
:
"center"
,
dataIndex
:
'des'
,
width
:
200
,
},
];
//查询数据
export
const
searchFormSchema
:
FormSchema
[]
=
[
{
label
:
'待办任务描述'
,
field
:
'name'
,
component
:
'Input'
,
},
];
//表单数据
export
const
formSchema
:
FormSchema
[]
=
[
{
label
:
'待办任务描述'
,
field
:
'name'
,
component
:
'Input'
,
},
{
label
:
'待办任务'
,
field
:
'taskName'
,
component
:
'Input'
,
},
{
label
:
'完成状态'
,
field
:
'sta'
,
component
:
'Select'
,
componentProps
:
{
type
:
'radio'
,
options
:
[{
label
:
'未完成'
,
value
:
0
},{
label
:
'已经完成'
,
value
:
1
}]
},
},
{
field
:
'priority'
,
label
:
'优先级'
,
defaultValue
:
'H'
,
component
:
'JDictSelectTag'
,
componentProps
:
{
dictCode
:
'priority'
,
type
:
'radio'
,
placeholder
:
'请选择优先级'
,
},
},
{
label
:
'开始时间'
,
field
:
'stTime'
,
component
:
'DatePicker'
,
},
{
label
:
'完成时间'
,
field
:
'endTime'
,
component
:
'DatePicker'
,
},
{
label
:
'描述'
,
field
:
'des'
,
component
:
'InputTextArea'
,
componentProps
:
{
rows
:
3
}
},
// TODO 主键隐藏字段,目前写死为ID
{
label
:
''
,
field
:
'id'
,
component
:
'Input'
,
show
:
false
},
];
/**
* 流程表单调用这个方法获取formSchema
* @param param
*/
export
function
getBpmFormSchema
(
_formData
):
FormSchema
[]{
// 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema
return
formSchema
;
}
\ No newline at end of file
zrch-risk-client-39/src/views/my/MyTaskList.vue
0 → 100644
浏览文件 @
5c6ba540
<
template
>
<div>
<!--引用表格-->
<BasicTable
@
register=
"registerTable"
:rowSelection=
"rowSelection"
>
<!--插槽:table标题-->
<template
#
tableTitle
>
<a-button
type=
"primary"
@
click=
"handleAdd"
preIcon=
"ant-design:plus-outlined"
>
新增
</a-button>
<a-button
type=
"primary"
preIcon=
"ant-design:export-outlined"
@
click=
"onExportXls"
>
导出
</a-button>
<j-upload-button
type=
"primary"
preIcon=
"ant-design:import-outlined"
@
click=
"onImportXls"
>
导入
</j-upload-button>
<a-dropdown
v-if=
"selectedRowKeys.length > 0"
>
<template
#
overlay
>
<a-menu>
<a-menu-item
key=
"1"
@
click=
"batchHandleDelete"
>
<Icon
icon=
"ant-design:delete-outlined"
></Icon>
删除
</a-menu-item>
</a-menu>
</
template
>
<a-button>
批量操作
<Icon
icon=
"mdi:chevron-down"
></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<
template
#
action=
"{ record }"
>
<TableAction
:actions=
"getTableAction(record)"
:dropDownActions=
"getDropDownAction(record)"
/>
</
template
>
<!--字段回显插槽-->
<
template
#
htmlSlot=
"{text}"
>
<div
v-html=
"text"
></div>
</
template
>
<!--省市区字段回显插槽-->
<
template
#
pcaSlot=
"{text}"
>
{{
getAreaTextByCode
(
text
)
}}
</
template
>
<
template
#
fileSlot=
"{text}"
>
<span
v-if=
"!text"
style=
"font-size: 12px;font-style: italic;"
>
无文件
</span>
<a-button
v-else
:ghost=
"true"
type=
"primary"
preIcon=
"ant-design:download-outlined"
size=
"small"
@
click=
"downloadFile(text)"
>
下载
</a-button>
</
template
>
</BasicTable>
<!-- 表单区域 -->
<MyTaskModal
@
register=
"registerModal"
@
success=
"handleSuccess"
></MyTaskModal>
</div>
</template>
<
script
lang=
"ts"
name=
"my-myTask"
setup
>
import
{
ref
,
computed
,
unref
}
from
'vue'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'/@/components/Table'
;
import
{
useModal
}
from
'/@/components/Modal'
;
import
{
useListPage
}
from
'/@/hooks/system/useListPage'
import
MyTaskModal
from
'./components/MyTaskModal.vue'
import
{
columns
,
searchFormSchema
}
from
'./MyTask.data'
;
import
{
list
,
deleteOne
,
batchDelete
,
getImportUrl
,
getExportUrl
}
from
'./MyTask.api'
;
import
{
downloadFile
}
from
'/@/utils/common/renderUtils'
;
const
checkedKeys
=
ref
<
Array
<
string
|
number
>>
([]);
//注册model
const
[
registerModal
,
{
openModal
}]
=
useModal
();
//注册table数据
const
{
prefixCls
,
tableContext
,
onExportXls
,
onImportXls
}
=
useListPage
({
tableProps
:{
title
:
'待办任务'
,
api
:
list
,
columns
,
canResize
:
false
,
formConfig
:
{
//labelWidth: 120,
schemas
:
searchFormSchema
,
autoSubmitOnEnter
:
true
,
showAdvancedButton
:
true
,
fieldMapToNumber
:
[
],
fieldMapToTime
:
[
],
},
actionColumn
:
{
width
:
120
,
fixed
:
'right'
},
defSort
:{
column
:
'sta'
,
order
:
'asc'
,
},
},
exportConfig
:
{
name
:
"待办任务"
,
url
:
getExportUrl
,
},
importConfig
:
{
url
:
getImportUrl
,
success
:
handleSuccess
},
})
const
[
registerTable
,
{
reload
},{
rowSelection
,
selectedRowKeys
}]
=
tableContext
/**
* 新增事件
*/
function
handleAdd
()
{
openModal
(
true
,
{
isUpdate
:
false
,
showFooter
:
true
,
});
}
/**
* 编辑事件
*/
function
handleEdit
(
record
:
Recordable
)
{
openModal
(
true
,
{
record
,
isUpdate
:
true
,
showFooter
:
true
,
});
}
/**
* 详情
*/
function
handleDetail
(
record
:
Recordable
)
{
openModal
(
true
,
{
record
,
isUpdate
:
true
,
showFooter
:
false
,
});
}
/**
* 删除事件
*/
async
function
handleDelete
(
record
)
{
await
deleteOne
({
id
:
record
.
id
},
handleSuccess
);
}
/**
* 批量删除事件
*/
async
function
batchHandleDelete
()
{
await
batchDelete
({
ids
:
selectedRowKeys
.
value
},
handleSuccess
);
}
/**
* 成功回调
*/
function
handleSuccess
()
{
(
selectedRowKeys
.
value
=
[])
&&
reload
();
}
/**
* 操作栏
*/
function
getTableAction
(
record
){
return
[
{
label
:
'编辑'
,
onClick
:
handleEdit
.
bind
(
null
,
record
),
}
]
}
/**
* 下拉操作栏
*/
function
getDropDownAction
(
record
){
return
[
{
label
:
'详情'
,
onClick
:
handleDetail
.
bind
(
null
,
record
),
},
{
label
:
'删除'
,
popConfirm
:
{
title
:
'是否确认删除'
,
confirm
:
handleDelete
.
bind
(
null
,
record
),
}
}
]
}
</
script
>
<
style
scoped
>
</
style
>
\ No newline at end of file
zrch-risk-client-39/src/views/my/components/MyTaskForm.vue
0 → 100644
浏览文件 @
5c6ba540
<
template
>
<div
style=
"min-height: 400px"
>
<BasicForm
@
register=
"registerForm"
/>
<div
style=
"width: 100%; text-align: center"
v-if=
"!formDisabled"
>
<a-button
@
click=
"submitForm"
pre-icon=
"ant-design:check"
type=
"primary"
>
提 交
</a-button>
</div>
</div>
</
template
>
<
script
lang=
"ts"
>
import
{
BasicForm
,
useForm
}
from
'/@/components/Form/index'
;
import
{
computed
,
defineComponent
}
from
'vue'
;
import
{
defHttp
}
from
'/@/utils/http/axios'
;
import
{
propTypes
}
from
'/@/utils/propTypes'
;
import
{
getBpmFormSchema
}
from
'../MyTask.data'
;
import
{
saveOrUpdate
}
from
'../MyTask.api'
;
export
default
defineComponent
({
name
:
'MyTaskForm'
,
components
:
{
BasicForm
,
},
props
:
{
formData
:
propTypes
.
object
.
def
({}),
formBpm
:
propTypes
.
bool
.
def
(
true
),
},
setup
(
props
)
{
const
[
registerForm
,
{
setFieldsValue
,
setProps
,
getFieldsValue
}]
=
useForm
({
labelWidth
:
150
,
schemas
:
getBpmFormSchema
(
props
.
formData
),
showActionButtonGroup
:
false
,
baseColProps
:
{
span
:
24
},
});
const
formDisabled
=
computed
(()
=>
{
if
(
props
.
formData
.
disabled
===
false
)
{
return
false
;
}
return
true
;
});
let
formData
=
{};
const
queryByIdUrl
=
'/my/myTask/queryById'
;
async
function
initFormData
()
{
let
params
=
{
id
:
props
.
formData
.
dataId
};
const
data
=
await
defHttp
.
get
({
url
:
queryByIdUrl
,
params
});
formData
=
{
...
data
};
//设置表单的值
await
setFieldsValue
(
formData
);
//默认是禁用
await
setProps
({
disabled
:
formDisabled
.
value
});
}
async
function
submitForm
()
{
let
data
=
getFieldsValue
();
let
params
=
Object
.
assign
({},
formData
,
data
);
await
saveOrUpdate
(
params
,
true
);
}
initFormData
();
return
{
registerForm
,
formDisabled
,
submitForm
,
};
},
});
</
script
>
zrch-risk-client-39/src/views/my/components/MyTaskModal.vue
0 → 100644
浏览文件 @
5c6ba540
<
template
>
<BasicModal
v-bind=
"$attrs"
@
register=
"registerModal"
destroyOnClose
:title=
"title"
:width=
"800"
@
ok=
"handleSubmit"
>
<BasicForm
@
register=
"registerForm"
/>
</BasicModal>
</
template
>
<
script
lang=
"ts"
setup
>
import
{
ref
,
computed
,
unref
}
from
'vue'
;
import
{
BasicModal
,
useModalInner
}
from
'/@/components/Modal'
;
import
{
BasicForm
,
useForm
}
from
'/@/components/Form/index'
;
import
{
formSchema
}
from
'../MyTask.data'
;
import
{
saveOrUpdate
}
from
'../MyTask.api'
;
// Emits声明
const
emit
=
defineEmits
([
'register'
,
'success'
]);
const
isUpdate
=
ref
(
true
);
//表单配置
const
[
registerForm
,
{
setProps
,
resetFields
,
setFieldsValue
,
validate
}]
=
useForm
({
//labelWidth: 150,
schemas
:
formSchema
,
showActionButtonGroup
:
false
,
baseColProps
:
{
span
:
24
}
});
//表单赋值
const
[
registerModal
,
{
setModalProps
,
closeModal
}]
=
useModalInner
(
async
(
data
)
=>
{
//重置表单
await
resetFields
();
setModalProps
({
confirmLoading
:
false
,
showCancelBtn
:
!!
data
?.
showFooter
,
showOkBtn
:
!!
data
?.
showFooter
});
isUpdate
.
value
=
!!
data
?.
isUpdate
;
if
(
unref
(
isUpdate
))
{
//表单赋值
await
setFieldsValue
({
...
data
.
record
,
});
}
// 隐藏底部时禁用整个表单
setProps
({
disabled
:
!
data
?.
showFooter
})
});
//设置标题
const
title
=
computed
(()
=>
(
!
unref
(
isUpdate
)
?
'新增'
:
'编辑'
));
//表单提交事件
async
function
handleSubmit
(
v
)
{
try
{
let
values
=
await
validate
();
setModalProps
({
confirmLoading
:
true
});
//提交表单
await
saveOrUpdate
(
values
,
isUpdate
.
value
);
//关闭弹窗
closeModal
();
//刷新列表
emit
(
'success'
);
}
finally
{
setModalProps
({
confirmLoading
:
false
});
}
}
</
script
>
<
style
lang=
"less"
scoped
>
/** 时间和数字输入框样式 */
:deep(.ant-input-number){
width: 100%
}
:deep(.ant-calendar-picker){
width: 100%
}
</
style
>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论