Commit 5dbff90d by zhangxingmin

Merge remote-tracking branch 'origin/dev' into prod

parents 8e7c07e3 6823a5ab
# 使用 Node.js 18 基础镜像 (Debian bullseye)
FROM docker.m.daocloud.io/library/node:18-bullseye AS build
# 使用 Node.js 18 基础镜像 (Debian bookworm)
FROM docker.m.daocloud.io/library/node:18-bookworm AS build
# 设置环境变量
ENV npm_config_canvas_binary_host_mirror="https://npmmirror.com/mirrors/canvas"
ENV npm_config_sharp_binary_host="https://npmmirror.com/mirrors/sharp"
ENV npm_config_sharp_libvips_binary_host="https://npmmirror.com/mirrors/sharp-libvips"
# 添加 esbuild 镜像源
ENV ESBUILD_BINARY_HOST="https://npmmirror.com/mirrors/esbuild"
# 安装系统依赖 (使用阿里云镜像源)
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
apt-get update && apt-get install -y --no-install-recommends \
build-essential \
python3 \
pkg-config \
libcairo2-dev \
libpango1.0-dev \
libjpeg-dev \
libgif-dev \
librsvg2-dev \
libvips-dev \
&& rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /app
......@@ -30,16 +11,12 @@ WORKDIR /app
COPY package.json ./
# 1. 显式安装 esbuild 二进制
RUN npm install @esbuild/linux-x64 --verbose --registry=https://registry.npmmirror.com
# 2. 安装其他原生模块
RUN npm install canvas@2.11.2 --verbose --ignore-scripts
RUN npm install sharp@0.32.6 --verbose --ignore-scripts
RUN npm install @esbuild/linux-x64 --registry=https://registry.npmmirror.com
# 3. 安装项目依赖(移除 --no-optional)
RUN npm install --verbose --registry=https://registry.npmmirror.com
# 2. 安装项目依赖
RUN npm install --registry=https://registry.npmmirror.com
# 4. 验证 esbuild 安装
# 3. 验证 esbuild 安装
RUN ls -la node_modules/esbuild/bin && \
./node_modules/.bin/esbuild --version
......@@ -52,7 +29,7 @@ FROM docker.m.daocloud.io/library/nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 设置时区
# 设置时区(若 v3.22 源不可用,可改为 v3.21 或 latest)
RUN echo "https://mirrors.aliyun.com/alpine/v3.22/main/" > /etc/apk/repositories && \
echo "https://mirrors.aliyun.com/alpine/v3.22/community/" >> /etc/apk/repositories && \
apk update && \
......
import request from '@/utils/request'
// 审计日志分页查询
export function getAuditLogPage(data) {
return request({
url: '/csf/api/auditlog/log/page',
method: 'post',
data
})
}
// 审计详情查询
export function getAuditLogDetail(requestId) {
return request({
url: '/csf/api/auditlog/log/detail?requestId=' + requestId,
method: 'get'
})
}
......@@ -9,6 +9,16 @@ export function getPolicyFollowList(data) {
})
}
// 按当前筛选条件导出新单跟进清单(xlsx 文件流)
export function exportPolicyFollow(data) {
return request({
url: '/csf/api/policy_follow/export',
method: 'post',
data: data,
responseType: 'blob'
})
}
// 获取预计来佣列表
// /csf/api/commission/list/page/commission_expected
export function getExpectedCommissionList(data) {
......
......@@ -1560,7 +1560,7 @@ const handleCurrentChange = val => {
const loadTableData = async () => {
const searchParams = (await searchFormRef.value.getFormData()) || {}
loading.value = true
if (searchParams.payoutDate.length > 0) {
if (searchParams.payoutDate && searchParams.payoutDate.length > 0) {
searchParams.payoutDateStart = `${searchParams.payoutDate[0]}-01`
searchParams.payoutDateEnd = `${searchParams.payoutDate[1]}-01`
} else {
......
......@@ -529,7 +529,7 @@ const searchConfig = ref([
},
{
type: 'select',
prop: 'fortuneName',
prop: 'commissionType',
label: '入账项目',
dictType: 'csf_commission_type'
},
......@@ -783,8 +783,6 @@ const loadTableData = async () => {
const searchParams = searchFormRef.value.getFormData() || {}
loading.value = true
try {
console.log('searchParams.entryDate', searchParams.entryDate)
if (searchParams.entryDate && searchParams.entryDate.length > 0) {
searchParams.commissionDateStart = `${searchParams.entryDate[0]}-01`
searchParams.commissionDateEnd = `${searchParams.entryDate[1]}-01`
......
......@@ -728,6 +728,7 @@ function getAppointmentInfo(appointmentBizId, changeTab) {
activeName.value = 'appointmentInfo'
}
}
console.log('详情请求完')
}
})
}
......@@ -1068,17 +1069,7 @@ const handleSubmit = async type => {
submitAppointmentObj.value.source = 2
}
submitLoading.value = true
// 编辑预约单
// editAppointmentDetail(submitAppointmentObj.value).then(res => {
// if (res.code == 200) {
// submitLoading.value = false
// editStatus.value = true
// getAppointmentInfo(idsObj.value.appointmentBizId)
// proxy.$message.success('修改预约单成功')
// } else {
// submitLoading.value = false
// }
// })
try {
const res = await editAppointmentDetail(submitAppointmentObj.value)
if (res.code == 200) {
......@@ -1130,17 +1121,7 @@ const handleSubmit = async type => {
// 编辑状态下预约暂存
if (type == 'editStorage') {
submitLoading.value = true
// 暂存预约单
// appointmentEditStorage(submitAppointmentObj.value).then(res => {
// if (res.code == 200) {
// submitLoading.value = false
// proxy.$message.success('预约暂存提交成功')
// editStatus.value = true
// getAppointmentInfo(idsObj.value.appointmentBizId)
// } else {
// submitLoading.value = false
// }
// })
try {
const res = await appointmentEditStorage(submitAppointmentObj.value)
if (res.code == 200) {
......@@ -1274,8 +1255,6 @@ watch(
})
} else {
activeName.value = ''
getAppointmentInfo(idsObj.value.appointmentBizId)
tabsList.value = [
{
label: '签约信息',
......@@ -1347,10 +1326,12 @@ watch(
key: 'fnaBizId'
}
]
getAppointmentInfo(idsObj.value.appointmentBizId, true)
}
nextTick(() => {
activeName.value = 'appointmentInfo'
})
// nextTick(() => {
// activeName.value = 'appointmentInfo'
// })
}
}
)
......@@ -1366,6 +1347,7 @@ const getPolicyDetail = tabName => {
...followRes.data,
...infoRes.data
}
if (route.query.source == 'policyList') {
appointmentSummeryInfo.value.apiAppointmentInfoDto = JSON.parse(
JSON.stringify(
......
......@@ -1183,6 +1183,8 @@ const processFormData = async () => {
}
// 编辑状态下回显值
if (props.idsObj.appointmentBizId) {
console.log('预约详情', props.apiAppointmentInfoDto)
setFormValue(props.apiAppointmentInfoDto, processedData)
return
} else {
......
......@@ -149,6 +149,7 @@ import useUserStore from '@/store/modules/user'
import { safeDownload } from '@/utils/safeDownload'
import {
getPolicyFollowList,
exportPolicyFollow,
getExpectedCommissionList,
changePolicyStatus,
policyFollowReport,
......@@ -341,8 +342,29 @@ const handleAdd = () => {
const handleImport = () => {
ElMessage.info('点击导入按钮')
}
const handleExport = () => {
ElMessage.info('点击导出按钮')
// 查询表单 → 请求体(列表查询与导出共用,保证筛选口径一致)
const buildQueryParams = () => {
const formData = searchFormRef.value?.getFormData() || {}
return {
...formData,
signDateStart: formData.signDate?.[0] || undefined,
signDateEnd: formData.signDate?.[1] || undefined,
signDate: undefined
}
}
const exporting = ref(false)
const handleExport = async () => {
exporting.value = true
try {
const response = await exportPolicyFollow(buildQueryParams())
const now = new Date()
const pad = n => String(n).padStart(2, '0')
const day = `${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}`
await safeDownload(response, `新单跟进清单_${day}.xlsx`)
} finally {
exporting.value = false
}
}
const handleReset = () => {
// 重置搜索表单
......@@ -356,9 +378,14 @@ const handleQuery = async () => {
currentPage.value = 1
loadTableData()
}
const visibleDefaultButtons = ref(['reset', 'query'])
// 按钮配置
const operationBtnList = ref([
const visibleDefaultButtons = ref(['export', 'reset', 'query'])
const operationBtnList = computed(() => [
{
key: 'export',
direction: 'right',
loading: exporting.value,
click: handleExport
},
{
key: 'reset',
direction: 'right',
......@@ -489,10 +516,7 @@ const loadTableData = async () => {
// console.log(searchParams.value)
try {
const params = {
...searchParams.value,
signDateStart: searchParams.value?.signDate[0] || undefined,
signDateEnd: searchParams.value?.signDate[1] || undefined,
signDate: undefined,
...buildQueryParams(),
pageNo: currentPage.value,
pageSize: pageSize.value
}
......
......@@ -691,7 +691,7 @@ const basicPlanFormConfig = ref([
insuranceCompanyBizIdList: [basicPlanFormData.value.insuranceCompanyBizId || ''],
pageNo: 1,
pageSize: 20,
productName: 'productName'
productName: ''
}),
placeholder: '请选择产品名称',
debounceWait: 500,
......@@ -1279,7 +1279,8 @@ const viewRecordDetail = e => {
type: 'edit',
status: newOrderData.value.status,
source: 'newOrder',
appointmentBizId: newOrderData.value.appointmentBizId
appointmentBizId: newOrderData.value.appointmentBizId,
appointmentNo: newOrderData.value.appointmentNo
}
})
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment