Skip to content

Commit 3820710

Browse files
author
puhui999
committed
二次封装 form-create 组件,使用项目重新封装的文件上传组件实现文件上载
1 parent cce1fad commit 3820710

File tree

12 files changed

+166
-98
lines changed

12 files changed

+166
-98
lines changed

src/components/FormCreate/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import MyFormCreate from './src/MyFormCreate.vue'
2+
3+
export { MyFormCreate }
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<template>
2+
<form-create v-bind="attrs">
3+
<!-- 保障 form-create 的原始插槽 -->
4+
<template v-for="(_, name) in slots" #[name]="slotData">
5+
<slot :name="name" v-bind="slotData || {}"></slot>
6+
</template>
7+
<!-- 使用项目重新封装的文件上传组件实现文件上载 -->
8+
<template #type-upload="scope">
9+
<!-- {{ logC(scope) }}-->
10+
<template v-if="scope.prop.props.uploadType === 'file'">
11+
<!-- TODO puhui999: 考虑是否使用属性透传直接把整个 scope.prop.props 传递给组件 -->
12+
<UploadFile
13+
:disabled="scope.prop.props.disabled"
14+
:limit="scope.prop.props.limit"
15+
:modelValue="scope.model.value || scope.prop.value"
16+
@update:modelValue="(val) => setValue(scope, val)"
17+
/>
18+
</template>
19+
<template v-if="scope.prop.props.uploadType === 'image' && scope.prop.props.limit === 1">
20+
<UploadImg
21+
:disabled="scope.prop.props.disabled"
22+
:modelValue="scope.model.value || scope.prop.value"
23+
@update:modelValue="(val) => setValue(scope, val)"
24+
/>
25+
</template>
26+
<template v-if="scope.prop.props.uploadType === 'image' && scope.prop.props.limit > 1">
27+
<UploadImgs
28+
:disabled="scope.prop.props.disabled"
29+
:limit="scope.prop.props.limit"
30+
:modelValue="scope.model.value || scope.prop.value"
31+
@update:modelValue="(val) => setValue(scope, val)"
32+
/>
33+
</template>
34+
</template>
35+
</form-create>
36+
</template>
37+
38+
<script lang="ts" setup>
39+
defineOptions({ name: 'MyFormCreate' })
40+
const attrs = useAttrs()
41+
const slots = useSlots()
42+
43+
// 测试使用,查看组件 scope 值
44+
// const logC = (s) => {
45+
// console.log(s)
46+
// }
47+
48+
// 设置表单值
49+
const setValue = (scope: any, value: any) => {
50+
const obj = {}
51+
obj[scope.prop.field] = value
52+
scope.api.setValue(obj)
53+
}
54+
</script>

src/components/UploadFile/src/UploadFile.vue

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
:action="uploadUrl"
77
:auto-upload="autoUpload"
88
:before-upload="beforeUpload"
9+
:disabled="disabled"
910
:drag="drag"
11+
:http-request="httpRequest"
1012
:limit="props.limit"
1113
:multiple="props.limit > 1"
1214
:on-error="excelUploadError"
@@ -15,15 +17,14 @@
1517
:on-remove="handleRemove"
1618
:on-success="handleFileSuccess"
1719
:show-file-list="true"
18-
:http-request="httpRequest"
1920
class="upload-file-uploader"
2021
name="file"
2122
>
22-
<el-button type="primary">
23+
<el-button v-if="!disabled" type="primary">
2324
<Icon icon="ep:upload-filled" />
2425
选取文件
2526
</el-button>
26-
<template v-if="isShowTip" #tip>
27+
<template v-if="isShowTip && !disabled" #tip>
2728
<div style="font-size: 8px">
2829
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
2930
</div>
@@ -54,7 +55,8 @@ const props = defineProps({
5455
limit: propTypes.number.def(5), // 数量限制
5556
autoUpload: propTypes.bool.def(true), // 自动上传
5657
drag: propTypes.bool.def(false), // 拖拽上传
57-
isShowTip: propTypes.bool.def(true) // 是否显示提示
58+
isShowTip: propTypes.bool.def(true), // 是否显示提示
59+
disabled: propTypes.bool.def(false) // 是否禁用上传组件 ==> 非必传(默认为 false)
5860
})
5961
6062
// ========== 上传相关 ==========

src/components/UploadFile/src/UploadImg.vue

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66
:action="uploadUrl"
77
:before-upload="beforeUpload"
88
:class="['upload', drag ? 'no-border' : '']"
9+
:disabled="disabled"
910
:drag="drag"
11+
:http-request="httpRequest"
1012
:multiple="false"
1113
:on-error="uploadError"
1214
:on-success="uploadSuccess"
1315
:show-file-list="false"
14-
:http-request="httpRequest"
1516
>
1617
<template v-if="modelValue">
1718
<img :src="modelValue" class="upload-image" />
1819
<div class="upload-handle" @click.stop>
19-
<div class="handle-icon" @click="editImg" v-if="!disabled">
20+
<div v-if="!disabled" class="handle-icon" @click="editImg">
2021
<Icon icon="ep:edit" />
2122
<span v-if="showBtnText">{{ t('action.edit') }}</span>
2223
</div>
@@ -77,10 +78,8 @@ const props = defineProps({
7778
height: propTypes.string.def('150px'), // 组件高度 ==> 非必传(默认为 150px)
7879
width: propTypes.string.def('150px'), // 组件宽度 ==> 非必传(默认为 150px)
7980
borderradius: propTypes.string.def('8px'), // 组件边框圆角 ==> 非必传(默认为 8px)
80-
// 是否显示删除按钮
81-
showDelete: propTypes.bool.def(true),
82-
// 是否显示按钮文字
83-
showBtnText: propTypes.bool.def(true)
81+
showDelete: propTypes.bool.def(true), // 是否显示删除按钮
82+
showBtnText: propTypes.bool.def(true) // 是否显示按钮文字
8483
})
8584
const { t } = useI18n() // 国际化
8685
const message = useMessage() // 消息弹窗

src/components/UploadFile/src/UploadImgs.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
:action="uploadUrl"
77
:before-upload="beforeUpload"
88
:class="['upload', drag ? 'no-border' : '']"
9+
:disabled="disabled"
910
:drag="drag"
11+
:http-request="httpRequest"
1012
:limit="limit"
1113
:multiple="true"
1214
:on-error="uploadError"
1315
:on-exceed="handleExceed"
1416
:on-success="uploadSuccess"
15-
:http-request="httpRequest"
1617
list-type="picture-card"
1718
>
1819
<div class="upload-empty">

src/utils/formCreate.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export const setConfAndFields = (designerRef: object, conf: string, fields: stri
4040
export const setConfAndFields2 = (
4141
detailPreview: object,
4242
conf: string,
43-
fields: string,
43+
fields: string[],
4444
value?: object
4545
) => {
4646
// @ts-ignore

src/views/bpm/definition/index.vue

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,67 @@
33

44
<ContentWrap>
55
<el-table v-loading="loading" :data="list">
6-
<el-table-column label="定义编号" align="center" prop="id" width="400" />
7-
<el-table-column label="流程名称" align="center" prop="name" width="200">
6+
<el-table-column align="center" label="定义编号" prop="id" width="400" />
7+
<el-table-column align="center" label="流程名称" prop="name" width="200">
88
<template #default="scope">
9-
<el-button type="primary" link @click="handleBpmnDetail(scope.row)">
9+
<el-button link type="primary" @click="handleBpmnDetail(scope.row)">
1010
<span>{{ scope.row.name }}</span>
1111
</el-button>
1212
</template>
1313
</el-table-column>
14-
<el-table-column label="定义分类" align="center" prop="category" width="100">
14+
<el-table-column align="center" label="定义分类" prop="category" width="100">
1515
<template #default="scope">
1616
<dict-tag :type="DICT_TYPE.BPM_MODEL_CATEGORY" :value="scope.row.category" />
1717
</template>
1818
</el-table-column>
19-
<el-table-column label="表单信息" align="center" prop="formType" width="200">
19+
<el-table-column align="center" label="表单信息" prop="formType" width="200">
2020
<template #default="scope">
2121
<el-button
2222
v-if="scope.row.formType === 10"
23-
type="primary"
2423
link
24+
type="primary"
2525
@click="handleFormDetail(scope.row)"
2626
>
2727
<span>{{ scope.row.formName }}</span>
2828
</el-button>
29-
<el-button v-else type="primary" link @click="handleFormDetail(scope.row)">
29+
<el-button v-else link type="primary" @click="handleFormDetail(scope.row)">
3030
<span>{{ scope.row.formCustomCreatePath }}</span>
3131
</el-button>
3232
</template>
3333
</el-table-column>
34-
<el-table-column label="流程版本" align="center" prop="processDefinition.version" width="80">
34+
<el-table-column align="center" label="流程版本" prop="processDefinition.version" width="80">
3535
<template #default="scope">
3636
<el-tag v-if="scope.row">v{{ scope.row.version }}</el-tag>
37-
<el-tag type="warning" v-else>未部署</el-tag>
37+
<el-tag v-else type="warning">未部署</el-tag>
3838
</template>
3939
</el-table-column>
40-
<el-table-column label="状态" align="center" prop="version" width="80">
40+
<el-table-column align="center" label="状态" prop="version" width="80">
4141
<template #default="scope">
42-
<el-tag type="success" v-if="scope.row.suspensionState === 1">激活</el-tag>
43-
<el-tag type="warning" v-if="scope.row.suspensionState === 2">挂起</el-tag>
42+
<el-tag v-if="scope.row.suspensionState === 1" type="success">激活</el-tag>
43+
<el-tag v-if="scope.row.suspensionState === 2" type="warning">挂起</el-tag>
4444
</template>
4545
</el-table-column>
4646
<el-table-column
47-
label="部署时间"
47+
:formatter="dateFormatter"
4848
align="center"
49+
label="部署时间"
4950
prop="deploymentTime"
5051
width="180"
51-
:formatter="dateFormatter"
5252
/>
5353
<el-table-column
54-
label="定义描述"
5554
align="center"
55+
label="定义描述"
5656
prop="description"
57-
width="300"
5857
show-overflow-tooltip
58+
width="300"
5959
/>
60-
<el-table-column label="操作" align="center" width="150" fixed="right">
60+
<el-table-column align="center" fixed="right" label="操作" width="150">
6161
<template #default="scope">
6262
<el-button
63+
v-hasPermi="['bpm:task-assign-rule:query']"
6364
link
6465
type="primary"
6566
@click="handleAssignRule(scope.row)"
66-
v-hasPermi="['bpm:task-assign-rule:query']"
6767
>
6868
分配规则
6969
</el-button>
@@ -72,26 +72,26 @@
7272
</el-table>
7373
<!-- 分页 -->
7474
<Pagination
75-
:total="total"
76-
v-model:page="queryParams.pageNo"
7775
v-model:limit="queryParams.pageSize"
76+
v-model:page="queryParams.pageNo"
77+
:total="total"
7878
@pagination="getList"
7979
/>
8080
</ContentWrap>
8181

8282
<!-- 弹窗:表单详情 -->
83-
<Dialog title="表单详情" v-model="formDetailVisible" width="800">
84-
<form-create :rule="formDetailPreview.rule" :option="formDetailPreview.option" />
83+
<Dialog v-model="formDetailVisible" title="表单详情" width="800">
84+
<my-form-create :option="formDetailPreview.option" :rule="formDetailPreview.rule" />
8585
</Dialog>
8686

8787
<!-- 弹窗:流程模型图的预览 -->
88-
<Dialog title="流程图" v-model="bpmnDetailVisible" width="800">
88+
<Dialog v-model="bpmnDetailVisible" title="流程图" width="800">
8989
<MyProcessViewer
9090
key="designer"
9191
v-model="bpmnXML"
92+
:prefix="bpmnControlForm.prefix"
9293
:value="bpmnXML as any"
9394
v-bind="bpmnControlForm"
94-
:prefix="bpmnControlForm.prefix"
9595
/>
9696
</Dialog>
9797
</template>

src/views/bpm/form/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888

8989
<!-- 表单详情的弹窗 -->
9090
<Dialog v-model="detailVisible" title="表单详情" width="800">
91-
<form-create :option="detailData.option" :rule="detailData.rule" />
91+
<my-form-create :option="detailData.option" :rule="detailData.rule" />
9292
</Dialog>
9393
</template>
9494

0 commit comments

Comments
 (0)