Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yd-csf-front
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
yuzhenWang
yd-csf-front
Commits
60967843
Commit
60967843
authored
Jun 11, 2026
by
zhangxingmin
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into prod
parents
8d346c7b
a80f9154
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
14 additions
and
244 deletions
+14
-244
src/views/financialCenter/financialBilling.vue
+3
-3
src/views/financialCenter/financialSalary.vue
+10
-8
src/views/financialCenter/payroll.vue
+1
-1
src/views/sign/appointment/components/fileUpload.vue
+0
-232
No files found.
src/views/financialCenter/financialBilling.vue
View file @
60967843
...
...
@@ -498,7 +498,7 @@ const splitTableColumns = ref([
editType
:
'input'
,
prop
:
'originalAmount'
,
label
:
'原币种金额'
,
inputType
:
'decimal'
,
inputType
:
'decimal
Number
'
,
required
:
true
,
width
:
150
},
...
...
@@ -632,7 +632,7 @@ const rateExchangeConfig = [
type
:
'input'
,
prop
:
'originalAmount'
,
label
:
'原币种金额'
,
inputType
:
'decimal'
,
inputType
:
'decimal
Number
'
,
rules
:
[{
required
:
true
,
message
:
'只能输入正整数和小数'
,
trigger
:
'blur'
}]
},
// 汇率3(原币种->港币)
...
...
@@ -1219,7 +1219,7 @@ const addCheckRecordConfig = [
type
:
'input'
,
prop
:
'originalAmount'
,
label
:
'原币种金额'
,
inputType
:
'decimal'
,
inputType
:
'decimal
Number
'
,
rules
:
[{
required
:
true
,
message
:
'只能输入正整数和小数'
,
trigger
:
'blur'
}]
},
// 汇率3(原币种->港币)
...
...
src/views/financialCenter/financialSalary.vue
View file @
60967843
...
...
@@ -46,14 +46,19 @@
<!--
<el-table-column
prop=
"fortuneAccountBizId"
label=
"业务ID"
min-width=
"120"
sortable
/>
-->
<el-table-column
prop=
"broker"
label=
"转介人"
min-width=
"120"
sortable
/>
<el-table-column
prop=
"team"
label=
"所属团队"
min-width=
"120"
sortable
/>
<el-table-column
prop=
"hkdAmount"
label=
"
出账
金额"
width=
"120"
sortable
>
<el-table-column
prop=
"hkdAmount"
label=
"
港币
金额"
width=
"120"
sortable
>
<template
#
default=
"scope"
>
{{
formatCurrency
(
scope
.
row
.
hkdAmount
,
''
,
4
)
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"
currency"
label=
"出账
币种"
width=
"120"
sortable
>
<el-table-column
prop=
"
payoutCurrency"
label=
"发放
币种"
width=
"120"
sortable
>
<
template
#
default=
"scope"
>
<dict-tag
:options=
"currencyTypeOptions"
:value=
"scope.row.currency"
/>
<dict-tag
:options=
"currencyTypeOptions"
:value=
"scope.row.payoutCurrency"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"payoutAmount"
label=
"发放金额"
width=
"120"
sortable
>
<
template
#
default=
"scope"
>
{{
formatCurrency
(
scope
.
row
.
payoutAmount
,
''
,
4
)
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"status"
label=
"出账状态"
width=
"150"
sortable
>
...
...
@@ -115,7 +120,7 @@
<el-col
:xs=
"24"
:sm=
"12"
:md=
"6"
class=
"text-center mb-4"
>
<el-statistic
title=
"原币种总金额"
:value=
"currentRow.
hkd
Amount"
:value=
"currentRow.
payout
Amount"
:formatter=
"value => formatCurrency(value, '', 4)"
/>
</el-col>
...
...
@@ -202,8 +207,6 @@
</el-table-column>
<el-table-column
label=
"原币种金额"
prop=
"fromAmount"
width=
"150"
>
<
template
#
default=
"scope"
>
<!--等生产没问题再删除 @input="val => (scope.row.fromAmount = amountInput.filterInput(val, 4))"
@blur="billInputBlur('fromAmount', scope.row)" -->
<el-input
v-model=
"scope.row.fromAmount"
placeholder=
"请输入"
...
...
@@ -255,7 +258,6 @@
v-model=
"scope.row.toAmount"
placeholder=
"请输入"
clearable
:disabled=
"true"
@
input=
"val => (scope.row.toAmount = amountInput.filterInput(val, 4))"
:formatter=
"value => inputThousands(value)"
:parser=
"value => value.replace(/\$\s?|(,*)/g, '')"
...
...
@@ -674,7 +676,7 @@ const getSplitTableList = async (searchParams = {}) => {
billTableList
.
value
=
[
{
brokerName
:
currentRow
.
value
.
broker
,
fromAmount
:
Number
(
currentRow
.
value
.
hkd
Amount
).
toFixed
(
4
),
fromAmount
:
Number
(
currentRow
.
value
.
payout
Amount
).
toFixed
(
4
),
internalNumber
:
userSale
.
data
?
userSale
.
data
.
internalNumber
:
''
,
id
:
generateId
(),
exchangeRate
:
'0.00'
,
...
...
src/views/financialCenter/payroll.vue
View file @
60967843
...
...
@@ -105,7 +105,7 @@ const tableColumns = ref([
{
prop
:
'toCurrency'
,
label
:
'目标币种'
,
sortable
:
true
,
width
:
'150'
},
{
prop
:
'fortuneAccountMonth'
,
label
:
'出账月(实)'
,
sortable
:
true
,
width
:
'150'
},
{
prop
:
'billOrg'
,
label
:
'出账机构'
,
sortable
:
true
,
width
:
'150'
},
{
prop
:
'
hkdA
mount'
,
label
:
'本期总出账金额(原币种)'
,
sortable
:
true
,
width
:
'150'
}
{
prop
:
'
a
mount'
,
label
:
'本期总出账金额(原币种)'
,
sortable
:
true
,
width
:
'150'
}
// { prop: 'fortuneAccountBizId', label: '出账记录业务id', sortable: true, width: '150'},
])
// 添加表格引用
...
...
src/views/sign/appointment/components/fileUpload.vue
View file @
60967843
...
...
@@ -151,54 +151,6 @@
<!-- 文件预览弹窗 -->
<FilePreview
ref=
"filePreviewRef"
/>
<!-- <el-dialog
v-model="previewDialogVisible"
:title="previewFileName"
width="90%"
:close-on-click-modal="false"
destroy-on-close
@close="closePreview"
>
<div class="preview-container">
<div v-if="previewFileType === 'image'" class="preview-image-wrapper">
<img :src="previewUrl" class="preview-image" alt="预览图片" />
</div>
<div v-else-if="previewFileType === 'pdf'" class="pdf-viewer">
<div class="pdf-toolbar">
<el-button-group>
<el-button size="small" @click="zoomOut">
<el-icon><ZoomOut /></el-icon> 缩小
</el-button>
<el-button size="small" @click="zoomIn">
<el-icon><ZoomIn /></el-icon> 放大
</el-button>
</el-button-group>
<span class="page-info">共 {{ pdfTotalPages }} 页</span>
</div>
<div
class="pdf-scroll-wrapper"
v-loading="pdfLoading"
element-loading-text="正在渲染页面..."
>
<div ref="pdfScrollContainer" class="pdf-scroll-container"></div>
</div>
</div>
<div v-else-if="previewFileType === 'unsupported'" class="preview-unsupported">
<el-icon :size="48" color="#909399"><Document /></el-icon>
<p>暂不支持预览此类型文件</p>
<el-button type="primary" @click="previewDialogVisible = false"> 关闭 </el-button>
</div>
</div>
</el-dialog> -->
<el-dialog
v-model=
"imageViewerVisible"
title=
"图片预览"
width=
"60%"
>
<div
style=
"text-align: center"
>
<el-image
:src=
"imageUrl"
fit=
"contain"
/>
</div>
</el-dialog>
</div>
</template>
...
...
@@ -247,160 +199,7 @@ const limit = ref(10)
const
fileSize
=
ref
(
10
)
const
headers
=
ref
({
Authorization
:
'Bearer '
+
getToken
()
})
const
uploadImgUrl
=
ref
(
import
.
meta
.
env
.
VITE_APP_BASE_API
+
'/oss/api/oss/upload'
)
// 上传的服务器地址
// PDF 预览相关
const
pdfCanvasRef
=
ref
(
null
)
// canvas 元素引用
// 修改 pdfDoc 的定义
const
pdfDoc
=
shallowRef
(
null
)
// pdf 文档实例
const
pdfScale
=
ref
(
1.2
)
// 缩放比例
// 新增标志:是否取消PDF加载
let
pdfLoadingCanceled
=
false
// ==================== 文件预览弹窗 ====================
const
previewDialogVisible
=
ref
(
false
)
const
previewUrl
=
ref
(
''
)
const
previewFileName
=
ref
(
''
)
const
previewFileType
=
ref
(
''
)
// 'image', 'pdf', 'unsupported'
const
pdfScrollContainer
=
ref
(
null
)
// 滚动容器的 ref
const
pdfTotalPages
=
ref
(
0
)
// 总页数(仅供显示)
const
isRendering
=
ref
(
false
)
// 防止重复渲染
const
loadPdf
=
async
url
=>
{
pdfLoadingCanceled
=
false
pdfLoading
.
value
=
true
try
{
if
(
pdfDoc
.
value
)
{
await
pdfDoc
.
value
.
destroy
().
catch
(()
=>
{})
pdfDoc
.
value
=
null
}
// 清空滚动容器
if
(
pdfScrollContainer
.
value
)
{
pdfScrollContainer
.
value
.
innerHTML
=
''
}
const
loadingTask
=
PDFJS
.
getDocument
(
url
)
pdfDoc
.
value
=
await
loadingTask
.
promise
if
(
pdfLoadingCanceled
)
{
if
(
pdfDoc
.
value
)
pdfDoc
.
value
.
destroy
()
pdfLoading
.
value
=
false
return
}
pdfTotalPages
.
value
=
pdfDoc
.
value
.
numPages
await
renderAllPages
(
pdfScale
.
value
)
// 渲染所有页面
pdfLoading
.
value
=
false
}
catch
(
err
)
{
if
(
!
pdfLoadingCanceled
)
{
console
.
error
(
'PDF 加载失败'
,
err
)
ElMessage
.
error
(
'PDF 文件加载失败,请检查文件链接'
)
previewDialogVisible
.
value
=
false
}
pdfLoading
.
value
=
false
}
}
// 修改 renderPdfPage,增加有效性检查
const
renderPdfPage
=
async
pageNum
=>
{
if
(
!
pdfDoc
.
value
||
pdfLoadingCanceled
)
return
try
{
const
page
=
await
pdfDoc
.
value
.
getPage
(
pageNum
)
const
viewport
=
page
.
getViewport
({
scale
:
pdfScale
.
value
})
const
canvas
=
pdfCanvasRef
.
value
if
(
!
canvas
)
return
const
context
=
canvas
.
getContext
(
'2d'
)
canvas
.
height
=
viewport
.
height
canvas
.
width
=
viewport
.
width
const
renderContext
=
{
canvasContext
:
context
,
viewport
:
viewport
}
await
page
.
render
(
renderContext
).
promise
}
catch
(
err
)
{
if
(
!
pdfLoadingCanceled
)
{
console
.
error
(
'渲染PDF页失败'
,
err
)
}
}
}
const
renderAllPages
=
async
scale
=>
{
if
(
!
pdfDoc
.
value
||
pdfLoadingCanceled
||
isRendering
.
value
)
return
isRendering
.
value
=
true
pdfLoading
.
value
=
true
// 显示加载状态
const
container
=
pdfScrollContainer
.
value
if
(
!
container
)
{
isRendering
.
value
=
false
return
}
// 清空之前的 canvas
container
.
innerHTML
=
''
try
{
const
promises
=
[]
for
(
let
pageNum
=
1
;
pageNum
<=
pdfTotalPages
.
value
;
pageNum
++
)
{
if
(
pdfLoadingCanceled
)
break
const
page
=
await
pdfDoc
.
value
.
getPage
(
pageNum
)
const
viewport
=
page
.
getViewport
({
scale
})
// 创建 canvas 元素
const
canvas
=
document
.
createElement
(
'canvas'
)
canvas
.
className
=
'pdf-page-canvas'
const
context
=
canvas
.
getContext
(
'2d'
)
canvas
.
height
=
viewport
.
height
canvas
.
width
=
viewport
.
width
// 添加一些底部间距,便于区分页面
canvas
.
style
.
marginBottom
=
'16px'
canvas
.
style
.
boxShadow
=
'0 2px 8px rgba(0,0,0,0.1)'
container
.
appendChild
(
canvas
)
// 渲染该页
const
renderTask
=
page
.
render
({
canvasContext
:
context
,
viewport
:
viewport
})
promises
.
push
(
renderTask
.
promise
)
}
await
Promise
.
all
(
promises
)
}
catch
(
err
)
{
if
(
!
pdfLoadingCanceled
)
{
console
.
error
(
'渲染多页 PDF 失败'
,
err
)
ElMessage
.
error
(
'渲染 PDF 页面失败'
)
}
}
finally
{
isRendering
.
value
=
false
pdfLoading
.
value
=
false
}
}
// 修改 previewFile 中的 PDF 分支
// function previewFile(file) {
// console.log('====================================')
// console.log('file', file)
// console.log('====================================')
// const url = file.url || file.fileUrl
// if (!url) {
// ElMessage.warning('文件地址不存在')
// return
// }
// const ext = (file.originalName || '').split('.').pop().toLowerCase()
// previewUrl.value = url
// previewFileName.value = file.originalName || '文件'
// if (['jpg', 'jpeg', 'png', 'webp', 'gif', 'bmp', 'svg'].includes(ext)) {
// previewFileType.value = 'image'
// previewDialogVisible.value = true
// } else if (ext === 'pdf') {
// previewFileType.value = 'pdf'
// previewDialogVisible.value = true
// // 先清理旧的资源
// closePreview()
// nextTick(() => {
// loadPdf(previewUrl.value)
// })
// } else {
// previewFileType.value = 'unsupported'
// previewDialogVisible.value = true
// }
// }
// 在需要预览文件的地方调用(例如原来的 previewFile 函数)
function
previewFile
(
file
)
{
// 确保传入对象包含 url 和 name 属性
...
...
@@ -409,32 +208,6 @@ function previewFile(file) {
name
:
file
.
originalName
||
file
.
name
})
}
const
closePreview
=
()
=>
{
pdfLoadingCanceled
=
true
// 取消任何进行中的渲染
pdfLoading
.
value
=
false
isRendering
.
value
=
false
if
(
pdfDoc
.
value
)
{
pdfDoc
.
value
.
destroy
().
catch
(()
=>
{})
pdfDoc
.
value
=
null
}
pdfTotalPages
.
value
=
0
pdfScale
.
value
=
1.2
if
(
pdfScrollContainer
.
value
)
{
pdfScrollContainer
.
value
.
innerHTML
=
''
}
}
const
zoomIn
=
()
=>
{
pdfScale
.
value
=
Math
.
min
(
pdfScale
.
value
+
0.2
,
3.0
)
renderAllPages
(
pdfScale
.
value
)
}
const
zoomOut
=
()
=>
{
pdfScale
.
value
=
Math
.
max
(
pdfScale
.
value
-
0.2
,
0.5
)
renderAllPages
(
pdfScale
.
value
)
}
// 图片查看相关状态
const
imageViewerVisible
=
ref
(
false
)
const
imageUrl
=
ref
(
''
)
const
downLoading
=
ref
(
false
)
const
data
=
reactive
({
form
:
{},
...
...
@@ -678,11 +451,6 @@ const handleUpdate = row => {
uploadedFiles
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
row
.
fileBizIdList
))
}
}
const
handleView
=
row
=>
{
imageUrl
.
value
=
row
.
fileUrl
imageViewerVisible
.
value
=
true
}
// 下载材料包
const
downloadFile
=
()
=>
{
let
apiMaterialDtoList
=
[]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment