Skip to content

Commit 0338cae

Browse files
YunaiVgitee-org
authored andcommitted
!355 修复一些 issues 提到的问题
Merge pull request !355 from puhui999/dev-crm
2 parents 1eefa02 + d766b36 commit 0338cae

File tree

3 files changed

+94
-83
lines changed

3 files changed

+94
-83
lines changed

src/components/UploadFile/src/UploadFile.vue

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,27 @@
22
<div class="upload-file">
33
<el-upload
44
ref="uploadRef"
5-
:multiple="props.limit > 1"
6-
name="file"
7-
v-model="valueRef"
85
v-model:file-list="fileList"
9-
:show-file-list="true"
10-
:auto-upload="autoUpload"
116
:action="updateUrl"
7+
:auto-upload="autoUpload"
8+
:before-upload="beforeUpload"
9+
:drag="drag"
1210
:headers="uploadHeaders"
1311
:limit="props.limit"
14-
:drag="drag"
15-
:before-upload="beforeUpload"
16-
:on-exceed="handleExceed"
17-
:on-success="handleFileSuccess"
12+
:multiple="props.limit > 1"
1813
:on-error="excelUploadError"
19-
:on-remove="handleRemove"
14+
:on-exceed="handleExceed"
2015
:on-preview="handlePreview"
16+
:on-remove="handleRemove"
17+
:on-success="handleFileSuccess"
18+
:show-file-list="true"
2119
class="upload-file-uploader"
20+
name="file"
2221
>
23-
<el-button type="primary"><Icon icon="ep:upload-filled" />选取文件</el-button>
22+
<el-button type="primary">
23+
<Icon icon="ep:upload-filled" />
24+
选取文件
25+
</el-button>
2426
<template v-if="isShowTip" #tip>
2527
<div style="font-size: 8px">
2628
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
@@ -35,8 +37,8 @@
3537
<script lang="ts" setup>
3638
import { propTypes } from '@/utils/propTypes'
3739
import { getAccessToken, getTenantId } from '@/utils/auth'
38-
import type { UploadInstance, UploadUserFile, UploadProps, UploadRawFile } from 'element-plus'
39-
import { isArray, isString } from '@/utils/is'
40+
import type { UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus'
41+
import { isString } from '@/utils/is'
4042
4143
defineOptions({ name: 'UploadFile' })
4244
@@ -54,8 +56,8 @@ const props = defineProps({
5456
drag: propTypes.bool.def(false), // 拖拽上传
5557
isShowTip: propTypes.bool.def(true) // 是否显示提示
5658
})
59+
5760
// ========== 上传相关 ==========
58-
const valueRef = ref(props.modelValue)
5961
const uploadRef = ref<UploadInstance>()
6062
const uploadList = ref<UploadUserFile[]>([])
6163
const fileList = ref<UploadUserFile[]>([])
@@ -64,6 +66,7 @@ const uploadHeaders = ref({
6466
Authorization: 'Bearer ' + getAccessToken(),
6567
'tenant-id': getTenantId()
6668
})
69+
6770
// 文件上传之前判断
6871
const beforeUpload: UploadProps['beforeUpload'] = (file: UploadRawFile) => {
6972
if (fileList.value.length >= props.limit) {
@@ -97,12 +100,10 @@ const beforeUpload: UploadProps['beforeUpload'] = (file: UploadRawFile) => {
97100
// 文件上传成功
98101
const handleFileSuccess: UploadProps['onSuccess'] = (res: any): void => {
99102
message.success('上传成功')
100-
const fileListNew = fileList.value
101-
fileListNew.pop()
102-
fileList.value = fileListNew
103+
fileList.value.shift()
103104
uploadList.value.push({ name: res.data, url: res.data })
104105
if (uploadList.value.length == uploadNumber.value) {
105-
fileList.value = fileList.value.concat(uploadList.value)
106+
fileList.value.push(...uploadList.value)
106107
uploadList.value = []
107108
uploadNumber.value = 0
108109
emitUpdateModelValue()
@@ -131,29 +132,25 @@ const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
131132
// 监听模型绑定值变动
132133
watch(
133134
() => props.modelValue,
134-
() => {
135-
const files: string[] = []
135+
(val: string | string[]) => {
136+
if (!val) {
137+
fileList.value = [] // fix:处理掉缓存,表单重置后上传组件的内容并没有重置
138+
return
139+
}
140+
141+
fileList.value = [] // 保障数据为空
136142
// 情况1:字符串
137-
if (isString(props.modelValue)) {
138-
// 情况1.1:逗号分隔的多值
139-
if (props.modelValue.includes(',')) {
140-
files.concat(props.modelValue.split(','))
141-
} else if (props.modelValue.length > 0) {
142-
files.push(props.modelValue)
143-
}
144-
} else if (isArray(props.modelValue)) {
145-
// 情况2:字符串
146-
files.concat(props.modelValue)
147-
} else if (props.modelValue == null) {
148-
// 情况3:undefined 不处理
149-
} else {
150-
throw new Error('不支持的 modelValue 类型')
143+
if (isString(val)) {
144+
fileList.value.push(
145+
...val.split(',').map((url) => ({ name: url.substring(url.lastIndexOf('/') + 1), url }))
146+
)
151147
}
152-
fileList.value = files.map((url: string) => {
153-
return { url, name: url.substring(url.lastIndexOf('/') + 1) } as UploadUserFile
154-
})
148+
// 情况2:数组
149+
fileList.value.push(
150+
...(val as string[]).map((url) => ({ name: url.substring(url.lastIndexOf('/') + 1), url }))
151+
)
155152
},
156-
{ immediate: true }
153+
{ immediate: true, deep: true }
157154
)
158155
// 发送文件链接列表更新
159156
const emitUpdateModelValue = () => {
@@ -166,7 +163,7 @@ const emitUpdateModelValue = () => {
166163
emit('update:modelValue', result)
167164
}
168165
</script>
169-
<style scoped lang="scss">
166+
<style lang="scss" scoped>
170167
.upload-file-uploader {
171168
margin-bottom: 5px;
172169
}

src/views/bpm/oa/leave/create.vue

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<template>
22
<el-form
33
ref="formRef"
4+
v-loading="formLoading"
45
:model="formData"
56
:rules="formRules"
67
label-width="80px"
7-
v-loading="formLoading"
88
>
99
<el-form-item label="请假类型" prop="type">
10-
<el-select v-model="formData.type" placeholder="请选择请假类型" clearable>
10+
<el-select v-model="formData.type" clearable placeholder="请选择请假类型">
1111
<el-option
1212
v-for="dict in getIntDictOptions(DICT_TYPE.BPM_OA_LEAVE_TYPE)"
1313
:key="dict.value"
@@ -18,27 +18,27 @@
1818
</el-form-item>
1919
<el-form-item label="开始时间" prop="startTime">
2020
<el-date-picker
21-
clearable
2221
v-model="formData.startTime"
22+
clearable
23+
placeholder="请选择开始时间"
2324
type="datetime"
2425
value-format="x"
25-
placeholder="请选择开始时间"
2626
/>
2727
</el-form-item>
2828
<el-form-item label="结束时间" prop="endTime">
2929
<el-date-picker
30-
clearable
3130
v-model="formData.endTime"
31+
clearable
32+
placeholder="请选择结束时间"
3233
type="datetime"
3334
value-format="x"
34-
placeholder="请选择结束时间"
3535
/>
3636
</el-form-item>
3737
<el-form-item label="原因" prop="reason">
38-
<el-input v-model="formData.reason" type="textarea" placeholder="请输请假原因" />
38+
<el-input v-model="formData.reason" placeholder="请输请假原因" type="textarea" />
3939
</el-form-item>
4040
<el-form-item>
41-
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
41+
<el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
4242
</el-form-item>
4343
</el-form>
4444
</template>
@@ -50,9 +50,6 @@ import { useTagsViewStore } from '@/store/modules/tagsView'
5050
defineOptions({ name: 'BpmOALeaveCreate' })
5151
5252
const message = useMessage() // 消息弹窗
53-
const { delView } = useTagsViewStore() // 视图操作
54-
const { currentRoute } = useRouter() // 路由
55-
5653
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
5754
const formData = ref({
5855
type: undefined,
@@ -67,7 +64,8 @@ const formRules = reactive({
6764
endTime: [{ required: true, message: '请假结束时间不能为空', trigger: 'change' }]
6865
})
6966
const formRef = ref() // 表单 Ref
70-
67+
const { delView } = useTagsViewStore() // 视图操作
68+
const { push, currentRoute } = useRouter() // 路由
7169
/** 提交表单 */
7270
const submitForm = async () => {
7371
// 校验表单
@@ -82,6 +80,7 @@ const submitForm = async () => {
8280
message.success('发起成功')
8381
// 关闭当前 Tab
8482
delView(unref(currentRoute))
83+
await push({ name: 'BpmOALeave' })
8584
} finally {
8685
formLoading.value = false
8786
}

src/views/bpm/oa/leave/index.vue

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22
<ContentWrap>
33
<!-- 搜索工作栏 -->
44
<el-form
5-
class="-mb-15px"
6-
:model="queryParams"
75
ref="queryFormRef"
86
:inline="true"
7+
:model="queryParams"
8+
class="-mb-15px"
99
label-width="68px"
1010
>
1111
<el-form-item label="请假类型" prop="type">
1212
<el-select
1313
v-model="queryParams.type"
14-
placeholder="请选择请假类型"
15-
clearable
1614
class="!w-240px"
15+
clearable
16+
placeholder="请选择请假类型"
1717
>
1818
<el-option
1919
v-for="dict in getIntDictOptions(DICT_TYPE.BPM_OA_LEAVE_TYPE)"
@@ -26,16 +26,16 @@
2626
<el-form-item label="申请时间" prop="createTime">
2727
<el-date-picker
2828
v-model="queryParams.createTime"
29-
value-format="YYYY-MM-DD HH:mm:ss"
30-
type="daterange"
31-
start-placeholder="开始日期"
32-
end-placeholder="结束日期"
3329
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
3430
class="!w-240px"
31+
end-placeholder="结束日期"
32+
start-placeholder="开始日期"
33+
type="daterange"
34+
value-format="YYYY-MM-DD HH:mm:ss"
3535
/>
3636
</el-form-item>
3737
<el-form-item label="结果" prop="result">
38-
<el-select v-model="queryParams.result" placeholder="请选择结果" clearable class="!w-240px">
38+
<el-select v-model="queryParams.result" class="!w-240px" clearable placeholder="请选择结果">
3939
<el-option
4040
v-for="dict in getIntDictOptions(DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT)"
4141
:key="dict.value"
@@ -47,17 +47,24 @@
4747
<el-form-item label="原因" prop="reason">
4848
<el-input
4949
v-model="queryParams.reason"
50-
placeholder="请输入原因"
50+
class="!w-240px"
5151
clearable
52+
placeholder="请输入原因"
5253
@keyup.enter="handleQuery"
53-
class="!w-240px"
5454
/>
5555
</el-form-item>
5656
<el-form-item>
57-
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
58-
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
59-
<el-button type="primary" plain @click="handleCreate()">
60-
<Icon icon="ep:plus" class="mr-5px" /> 发起请假
57+
<el-button @click="handleQuery">
58+
<Icon class="mr-5px" icon="ep:search" />
59+
搜索
60+
</el-button>
61+
<el-button @click="resetQuery">
62+
<Icon class="mr-5px" icon="ep:refresh" />
63+
重置
64+
</el-button>
65+
<el-button plain type="primary" @click="handleCreate()">
66+
<Icon class="mr-5px" icon="ep:plus" />
67+
发起请假
6168
</el-button>
6269
</el-form-item>
6370
</el-form>
@@ -66,63 +73,63 @@
6673
<!-- 列表 -->
6774
<ContentWrap>
6875
<el-table v-loading="loading" :data="list">
69-
<el-table-column label="申请编号" align="center" prop="id" />
70-
<el-table-column label="状态" align="center" prop="result">
76+
<el-table-column align="center" label="申请编号" prop="id" />
77+
<el-table-column align="center" label="状态" prop="result">
7178
<template #default="scope">
7279
<dict-tag :type="DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT" :value="scope.row.result" />
7380
</template>
7481
</el-table-column>
7582
<el-table-column
76-
label="开始时间"
83+
:formatter="dateFormatter"
7784
align="center"
85+
label="开始时间"
7886
prop="startTime"
7987
width="180"
80-
:formatter="dateFormatter"
8188
/>
8289
<el-table-column
83-
label="结束时间"
90+
:formatter="dateFormatter"
8491
align="center"
92+
label="结束时间"
8593
prop="endTime"
8694
width="180"
87-
:formatter="dateFormatter"
8895
/>
89-
<el-table-column label="请假类型" align="center" prop="type">
96+
<el-table-column align="center" label="请假类型" prop="type">
9097
<template #default="scope">
9198
<dict-tag :type="DICT_TYPE.BPM_OA_LEAVE_TYPE" :value="scope.row.type" />
9299
</template>
93100
</el-table-column>
94-
<el-table-column label="原因" align="center" prop="reason" />
101+
<el-table-column align="center" label="原因" prop="reason" />
95102
<el-table-column
96-
label="申请时间"
103+
:formatter="dateFormatter"
97104
align="center"
105+
label="申请时间"
98106
prop="createTime"
99107
width="180"
100-
:formatter="dateFormatter"
101108
/>
102-
<el-table-column label="操作" align="center" width="200">
109+
<el-table-column align="center" label="操作" width="200">
103110
<template #default="scope">
104111
<el-button
112+
v-hasPermi="['bpm:oa-leave:query']"
105113
link
106114
type="primary"
107115
@click="handleDetail(scope.row)"
108-
v-hasPermi="['bpm:oa-leave:query']"
109116
>
110117
详情
111118
</el-button>
112119
<el-button
120+
v-hasPermi="['bpm:oa-leave:query']"
113121
link
114122
type="primary"
115123
@click="handleProcessDetail(scope.row)"
116-
v-hasPermi="['bpm:oa-leave:query']"
117124
>
118125
进度
119126
</el-button>
120127
<el-button
128+
v-if="scope.row.result === 1"
129+
v-hasPermi="['bpm:oa-leave:create']"
121130
link
122131
type="danger"
123132
@click="cancelLeave(scope.row)"
124-
v-hasPermi="['bpm:oa-leave:create']"
125-
v-if="scope.row.result === 1"
126133
>
127134
取消
128135
</el-button>
@@ -131,9 +138,9 @@
131138
</el-table>
132139
<!-- 分页 -->
133140
<Pagination
134-
:total="total"
135-
v-model:page="queryParams.pageNo"
136141
v-model:limit="queryParams.pageSize"
142+
v-model:page="queryParams.pageNo"
143+
:total="total"
137144
@pagination="getList"
138145
/>
139146
</ContentWrap>
@@ -228,6 +235,14 @@ const handleProcessDetail = (row) => {
228235
})
229236
}
230237
238+
// fix: 列表不刷新的问题。
239+
watch(
240+
() => router.currentRoute.value,
241+
() => {
242+
getList()
243+
}
244+
)
245+
231246
/** 初始化 **/
232247
onMounted(() => {
233248
getList()

0 commit comments

Comments
 (0)