Преглед на файлове

Merge branch 'dev' of http://39.101.143.165:8090/dong_k/tenant-Platform into dev

祁鹏飞 преди 5 месеца
родител
ревизия
4bea1635de

+ 6 - 1
src/api/modules/finance.ts

@@ -48,7 +48,12 @@ const financeApi = (axiosInstance: ApiInstance) => ({
     getPlatformReceivableList: (data: any) => axiosInstance.post('/receivable/getPlatFormReceivableList', data),
     // 驾意导入
     importJyExcel: (data: any) => axiosInstance.post('/receivable/importJyExcel', data),
-
+    // 平台协议-模板导出
+    exportReceivable: (data: any) => axiosInstance.post('/receivable/exportTemplatePlatFormReceivable', data),
+    // 平台协议-应收导出
+    exportPlatformReceivable: (data: any) => axiosInstance.post('/receivable/exportPlatFormReceivable', data),
+    // 导入修改
+    importPlatformExcel: (data: any) => axiosInstance.post('/receivable/importPlatFormReceivable', data),
     // 应付账款-提现审核
     amountAuditingList: (data: any) => axiosInstance.post('/amountAuditing/auditList', data), // 提现列表
     amountAuditingIsLock: (data: string) => axiosInstance.get(`/amountAuditing/isLock?id=${data}`), // 判断领取按钮是否锁定

+ 1 - 0
src/components/LoginForm/index.vue

@@ -188,6 +188,7 @@ function handleLogin() {
             placeholder="手机号或工号"
             type="text"
             tabindex="1"
+            maxlength="11"
           >
             <template #prefix>
               <el-icon><User /></el-icon>

+ 12 - 12
src/layouts/components/Header/index.vue

@@ -30,23 +30,23 @@ function handlerMouserScroll(event: WheelEvent) {
     <header v-if="settingsStore.mode === 'pc' && settingsStore.settings.menu.mode === 'head'">
       <div class="header-container">
         <Logo class="title" />
-<!--        <div ref="menuRef" class="menu-container scrollbar-none" @wheel.prevent="handlerMouserScroll">-->
+        <!-- <div ref="menuRef" class="menu-container scrollbar-none" @wheel.prevent="handlerMouserScroll"> -->
         <div ref="menuRef" class="menu-container scrollbar-none" @wheel.prevent="handlerMouserScroll">
-            <!-- 顶部模式 -->
+          <!-- 顶部模式 -->
           <div class="menu h-full flex of-hidden transition-all">
             <template v-for="(item, index) in menuStore.allMenus" :key="index">
-              <div
-                class="menu-item relative mx-1 py-2 transition-all" :class="{
-                  active: index === menuStore.actived,
-                }"
-              >
-                <div
-                  v-if="item.children && item.children.length !== 0" class="group menu-item-container h-full w-full flex cursor-pointer items-center justify-between gap-1 px-3 text-[var(--g-header-menu-color)] transition-all hover-(bg-[var(--g-header-menu-hover-bg)] text-[var(--g-header-menu-hover-color)])" :class="{
+              <div class="menu-item relative mx-1 py-2 transition-all" :class="{
+                active: index === menuStore.actived,
+              }">
+                <div v-if="item.children && item.children.length !== 0"
+                  class="group menu-item-container h-full w-full flex cursor-pointer items-center justify-between gap-1 px-3 text-[var(--g-header-menu-color)] transition-all hover-(bg-[var(--g-header-menu-hover-bg)] text-[var(--g-header-menu-hover-color)])"
+                  :class="{
                     'text-[var(--g-header-menu-active-color)]! bg-[var(--g-header-menu-active-bg)]!': index === menuStore.actived,
-                  }" :title="typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title" @click="switchTo(index)"
-                >
+                  }" :title="typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title"
+                  @click="switchTo(index)">
                   <div class="inline-flex flex-1 items-center justify-center gap-1">
-                    <SvgIcon v-if="item.meta?.icon" :name="item.meta?.icon" class="menu-item-container-icon transition-transform group-hover-scale-120" />
+                    <SvgIcon v-if="item.meta?.icon" :name="item.meta?.icon"
+                      class="menu-item-container-icon transition-transform group-hover-scale-120" />
                     <span class="w-full flex-1 truncate text-sm transition-height transition-opacity transition-width">
                       {{ typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title }}
                     </span>

+ 20 - 22
src/layouts/components/Topbar/Toolbar/rightSide.vue

@@ -7,7 +7,7 @@ import Fullscreen from './Fullscreen/index.vue'
 import DownLoad from './downLoad/index.vue'
 import NavSearch from './NavSearch/index.vue'
 import PageReload from './PageReload/index.vue'
-import {useRouter} from "vue-router"
+import { useRouter } from "vue-router"
 defineOptions({
   name: 'Tools',
 })
@@ -16,7 +16,6 @@ const router = useRouter()
 
 const settingsStore = useSettingsStore()
 const userStore = useUserStore()
-
 const avatarError = ref(false)
 watch(() => userStore.avatar, () => {
   if (avatarError.value) {
@@ -27,34 +26,33 @@ watch(() => userStore.avatar, () => {
 
 <template>
   <div class="flex items-center">
-    <!-- <NavSearch v-if="settingsStore.settings.toolbar.navSearch" /> -->
+    <NavSearch v-if="settingsStore.settings.toolbar.navSearch" />
     <DownLoad v-if="settingsStore.settings.toolbar.fullscreen" />
     <Fullscreen v-if="settingsStore.settings.toolbar.fullscreen" />
     <PageReload v-if="settingsStore.settings.toolbar.pageReload" />
-    <ColorScheme v-if="settingsStore.settings.toolbar.colorScheme" />
+    <!-- <ColorScheme v-if="settingsStore.settings.toolbar.colorScheme" /> -->
 
     <span class="flex-center cursor-pointer px-2 py-1">
-    <SvgIcon @click="router.push({
-      path:'/content/notice',
-    })" name="i-ion:notifications" />
+      <SvgIcon @click="router.push({
+        path: '/content/notice',
+      })" name="i-ion:notifications" />
     </span>
-    <HDropdownMenu
-      :items="[
-        [
-          { label: settingsStore.settings.home.title, handle: () => router.push({ path: settingsStore.settings.home.fullPath }), hide: !settingsStore.settings.home.enable },
-        ],
-        [
-          { label: '快捷键介绍', handle: () => eventBus.emit('global-hotkeys-intro-toggle'), hide: settingsStore.mode !== 'pc' },
-        ],
-        [
-          { label: '退出登录', handle: () => userStore.logout(settingsStore.settings.home.fullPath) },
-        ],
-      ]" class="flex-center cursor-pointer px-2"
-    >
+    <HDropdownMenu :items="[
+      [
+        { label: settingsStore.settings.home.title, handle: () => router.push({ path: settingsStore.settings.home.fullPath }), hide: !settingsStore.settings.home.enable },
+      ],
+      [
+        { label: '快捷键介绍', handle: () => eventBus.emit('global-hotkeys-intro-toggle'), hide: settingsStore.mode !== 'pc' },
+      ],
+      [
+        { label: '退出登录', handle: () => userStore.logout(settingsStore.settings.home.fullPath) },
+      ],
+    ]" class="flex-center cursor-pointer px-2">
       <div class="flex-center gap-1">
-        <img v-if="userStore.avatar && !avatarError" :src="userStore.avatar" :onerror="() => (avatarError = true)" class="h-[24px] w-[24px] rounded-full">
+        <img v-if="userStore.avatar && !avatarError" :src="userStore.avatar" :onerror="() => (avatarError = true)"
+          class="h-[24px] w-[24px] rounded-full">
         <SvgIcon v-else name="i-carbon:user-avatar-filled-alt" :size="24" class="text-gray-400" />
-        {{ userStore.userName }}
+        {{ userStore.realName }}   {{ userStore.userName }}
         <SvgIcon name="i-ep:caret-bottom" />
       </div>
     </HDropdownMenu>

+ 9 - 8
src/store/modules/user.ts

@@ -6,7 +6,7 @@ import useTabbarStore from './tabbar'
 import api from '@/api'
 
 import {
-    clearId
+  clearId
 } from "@/utils/composables/routeUtils"; // 导入工具方法
 
 const useUserStore = defineStore(
@@ -21,9 +21,10 @@ const useUserStore = defineStore(
     const userName = ref(localStorage.userName ?? '')
     const token = ref(localStorage.token ?? '')
     const avatar = ref(localStorage.avatar ?? '')
+    const userInfo = ref(localStorage.userInfo ?? '')
+    const realName = userInfo.value ? JSON.parse(userInfo.value)?.name ?? '' : '';
     const permissions = ref<string[]>([])
-    const staticRouter=ref<string[]>([])
-    let userInfo = ref({})
+    const staticRouter = ref<string[]>([])
     const isLogin = computed(() => {
       if (token.value) {
         return true
@@ -39,7 +40,6 @@ const useUserStore = defineStore(
       captchaId: number
     }) {
       const res = await api.userApi.login(data)
-
       localStorage.setItem('userName', data.userName)
       localStorage.setItem('token', res.data.token)
       userName.value = data.userName
@@ -52,10 +52,10 @@ const useUserStore = defineStore(
     }
     //获取运营交付菜单
     async function getMenu(codeItem) {
-      const res = await api.menuApi.getTenantConfig({...codeItem})
-      if(res.code===200){
+      const res = await api.menuApi.getTenantConfig({ ...codeItem })
+      if (res.code === 200) {
         // staticRouter.value=JSON.parse(res.data.sysConfig)
-        localStorage.setItem("menu",res.data.sysConfig)
+        localStorage.setItem("menu", res.data.sysConfig)
         // routeStore.routesRaw=JSON.parse(res.data.sysConfig)
       }
     }
@@ -78,7 +78,7 @@ const useUserStore = defineStore(
           ...(redirect !== settingsStore.settings.home.fullPath && router.currentRoute.value.name !== 'login' && { redirect }),
         },
       })
-        clearId()
+      clearId()
     }
     // 获取权限
     async function getPermissions() {
@@ -95,6 +95,7 @@ const useUserStore = defineStore(
 
     return {
       userName,
+      realName,
       token,
       avatar,
       permissions,

+ 11 - 7
src/views/externalAgreement/agreement/components/contactPersonFeeDialogEdit.vue

@@ -16,6 +16,9 @@
               <span class="m-right-20">审核人:{{ costitemEditInfo.auditPerson }}</span>
               <span >审核时间:{{costitemEditInfo.auditTime }}</span>
             </div>
+            <span class="primary" v-if="costitemEditInfo.auditStatus == 2" @click="disabledShow = false"  style="color: #409eff;" >
+                修改并重提交
+              </span>
           </div>
         </div>
         <ElRow :gutter="20" class="m-top-20">
@@ -85,15 +88,15 @@
           <el-table-column prop="costType" label="类型"></el-table-column>
             <el-table-column prop="inlet" label="入口比例" width="180" align="center">
                 <template #default="scope">
-                    <el-input-number v-model="scope.row.inlet" :precision="2" controls-position="right"
+                    <el-input-number v-model="scope.row.inlet"  :disabled="disabledShow" :precision="2" controls-position="right"
                                      style="width: 100%;" :min="0" :max="100" @change="handelRK(scope)">
                         <template #suffix>%</template>
                     </el-input-number>
                 </template>
             </el-table-column>
-            <el-table-column prop="export" label="出口比例" width="180" align="center">
+            <el-table-column prop="export" label="出口比例"   width="180" align="center">
                 <template #default="scope">
-                    <el-input-number v-model="scope.row.export" :precision="2" controls-position="right"
+                    <el-input-number v-model="scope.row.export" :disabled="disabledShow" :precision="2" controls-position="right"
                                      style="width: 100%;" :min="0" :max="100" @change="handelCK(scope)">
                         <template #suffix>%</template>
                     </el-input-number>
@@ -109,7 +112,7 @@
                                   </el-table-column>-->
             <el-table-column prop="addThrow" label="加投比例" width="180" align="center">
                 <template #default="scope">
-                    <el-input-number v-model="scope.row.addThrow" :precision="2" controls-position="right"
+                    <el-input-number v-model="scope.row.addThrow" :disabled="disabledShow" :precision="2" controls-position="right"
                                      style="width: 100%;" :min="0" :max="100" @change="handelJT(scope)">
                         <template #suffix>%</template>
                     </el-input-number>
@@ -117,8 +120,8 @@
             </el-table-column>
             <el-table-column prop="keepPointRatio" label="留点比例" width="180" align="center">
                 <template #default="scope">
-                    <el-input-number v-model="scope.row.keepPointRatio" :precision="2" controls-position="right"
-                                     style="width: 100%;" :min="0" :max="100" @change="handelLD(scope)">
+                    <el-input-number v-model="scope.row.keepPointRatio" :disabled="disabledShow" :precision="2" controls-position="right"
+                                    style="width: 100%;" :min="0" :max="100" @change="handelLD(scope)">
                         <template #suffix>%</template>
                     </el-input-number>
                 </template>
@@ -130,7 +133,7 @@
           <el-button @click="cancel">取消</el-button>
           <el-button type="primary" @click="save(contactPersonFormRef)">提交审核</el-button>
         </div>
-        <div class="flex f-c " v-if="!costitemEditInfo?.reviewDescription && disabledShow">
+        <div class="flex f-c " v-if="!costitemEditInfo?.reviewDescription && props.operationType == 'audit'">
           <el-checkbox v-model="automatic" label="审核后,自动跳支审核下一条费用" size="large" />
           <div class="flex a-c">
             <el-button @click="rejectOperation">审核驳回</el-button>
@@ -158,6 +161,7 @@ const props = defineProps<{
 }>();
 const emits = defineEmits(["cancel", 'save', 'auditOperation', 'rejectOperation']);
 watch(props, () => {
+  console.log(props.costitemEditInfo)
   contactPersonEditInfo.value = props.costitemEditInfo;
   //审核和驳回操作不可编辑
   if (props.operationType == 'audit' || props.operationType == 'rejected') {

+ 10 - 10
src/views/index.vue

@@ -11,16 +11,16 @@ import api from '@/api'
 
 import { useRouter } from 'vue-router'
 
-import up from '../assets/images/home/up.png'
-import down from '../assets/images/home/down.png'
-import cxcd from '../assets/images/home/cxcd.png'
-import bldd from '../assets/images/home/bldd.png'
-import ddcx from '../assets/images/home/ddcx.png'
-import xygl from '../assets/images/home/xygl.png'
-import fygl from '../assets/images/home/fygl.png'
-import bxgs from '../assets/images/home/bxgs.png'
-import bxgszh from '../assets/images/home/bxgszh.png'
-import ywygl from '../assets/images/home/ywygl.png'
+import up from '@/assets/images/home/up.png'
+import down from '@/assets/images/home/down.png'
+import cxcd from '@/assets/images/home/cxcd.png'
+import bldd from '@/assets/images/home/bldd.png'
+import ddcx from '@/assets/images/home/ddcx.png'
+import xygl from '@/assets/images/home/xygl.png'
+import fygl from '@/assets/images/home/fygl.png'
+import bxgs from '@/assets/images/home/bxgs.png'
+import bxgszh from '@/assets/images/home/bxgszh.png'
+import ywygl from '@/assets/images/home/ywygl.png'
 
 import chinaMap from '@/assets/json/china.Json';
 import anhui from '@/assets/json/anhui.json'

+ 33 - 15
src/views/insurancePolicy/index.vue

@@ -898,8 +898,8 @@
                       @click="handleOpenEquities(scope.row.quoteResult.ordersNo)">选择权益</el-button>
                   </div>
                   <div class="equitiesChoice">
-                    已选<span style="color: #0083FF">{{ insOrderRightsInfoDto.length }}</span>项权益,共计<span
-                      style="color: #FF8C21">{{ insOrderRightsInfoDto.totalPriceCount }}</span>元
+                    已选<span style="color: #0083FF">{{ insOrderRightsInfoDto.length || 0 }}</span>项权益,共计<span
+                      style="color: #FF8C21">{{ insOrderRightsInfoDto.totalPriceCount || 0 }}</span>元
                   </div>
                 </div>
                 <div class="expandFlex">
@@ -1125,7 +1125,7 @@
                 </el-select>
               </template>
             </el-table-column>
-            <el-table-column prop="" align="center">
+            <el-table-column prop="" >
               <template #header>
                 <div style="">
                   <span style="margin-right: 10px">报价结果</span>
@@ -1133,7 +1133,7 @@
                 </div>
               </template>
               <template #default="scope">
-                <div class="result" v-if="currentRow.some((a: any) => a.id === scope.row.id) && !scope.row.loading">
+                <div class="result"  v-if="currentRow.some((a: any) => a.id === scope.row.id) && !scope.row.loading">
                   <div class="resultItem">
                     <span v-if="scope.row.quoteResult?.costs?.sumPremium">总保费:{{
                       scope.row.quoteResult?.costs?.sumPremium }}</span>
@@ -1172,11 +1172,10 @@
                   </span>
                   <div>
                     <div class="quoteFail" v-if="scope.row.quoteResult?.failMsg">
-                      <el-icon style="color: #FF4545; font-size: 14px" @click="handleOpen">
+                      <el-icon style="color: #FF4545; font-size: 14px" >
                         <Warning />
-                      </el-icon>&nbsp;&nbsp;报价失败
+                      </el-icon>&nbsp;&nbsp;{{scope.row.quoteResult?.failMsg}}
                     </div>
-                    <!--                    <div class="quoteReason">{{ scope.row.quoteResult?.failMsg }}</div>-->
                   </div>
                 </div>
                 <!-- loding动效 -->
@@ -2665,7 +2664,7 @@ const handleDrivingDel = (scope: any, props: any) => {
 const getJYXDetail = (row: any) => {
   JYXDetailShow.value = true
   nextTick(() => {
-    JYXDetail.value.initData(row.drivingIntentionId)
+    JYXDetail.value.initData(row.id)
   })
 }
 const handleDrivingClose = (data: any) => {
@@ -2916,15 +2915,23 @@ const handleUnderwriting = (scope: any) => {
 
 let underwritingMsgShow = ref(false)
 
-const handleUnderwritingClose = (bool: any, msg: any) => {
-  console.log(bool, msg)
+const handleUnderwritingClose = (bool: any, dataObj: any) => {
+  insOrderRightsInfoDto.value.length=dataObj.equitiesData;
+  insOrderRightsInfoDto.value.totalPriceCount=dataObj.totalPriceCount;
   underwritingShow.value = false
-  if (msg) {
-    console.log(msg)
-    quoteData.value[underwritingIndex.value].underwritingMsg = msg
-  }
-  if (bool === 'success') {
+  if (bool.code==200) {
+    ElMessage({
+        message: bool.msg,
+        type: 'success'
+      })
     underwritingMsgShow.value = true
+  }else{
+    ElMessage({
+        message: bool.msg,
+        type: 'success'
+      })
+    quoteData.value[underwritingIndex.value].underwritingMsg = bool.msg
+
   }
 }
 
@@ -3344,6 +3351,15 @@ const handleSubmit = async (InsurancePolicyRefs: FormInstance | undefined, scope
                 let c = res.data.biPremium ? res.data.biPremium : 0  // 商业险保费
                 let d = res.data.niPremium ? res.data.niPremium : 0  // 未知险种保费
                 res.data.quoteTotal = Number(a) + Number(b) + Number(c) + Number(d)  // 总保费
+                // 替换保险公司返回的正确日期
+                if(res.data.ciStartDate){
+                  insurancePolicyForm.value.JQStartDate = res.data.ciStartDate
+                  insurancePolicyForm.value.JQEndDate = res.data.ciEndDate
+                }
+                if(res.data.biStartDate){
+                  insurancePolicyForm.value.SYStartDate = res.data.biStartDate
+                  insurancePolicyForm.value.SYEndDate = res.data.biEndDate
+                }
               }
               // 设置折扣信息
               quoteData.value[scope.$index].discounts = [
@@ -3384,7 +3400,9 @@ const handleSubmit = async (InsurancePolicyRefs: FormInstance | undefined, scope
                 message: res.msg,
                 type: 'warning'
               })
+              quoteData.value[scope.$index].quoteResult = res.data
               quoteData.value[scope.$index].quoteResult.failMsg = res.msg
+              console.log(quoteData.value[scope.$index].quoteResult)
               loading.value = false
               quoteData.value[scope.$index].loading = false
             }

+ 24 - 25
src/views/insurancePolicy/modules/underwriting.vue

@@ -134,6 +134,8 @@
       <el-button plain type="primary" @click="handleSubmit(false)">取消</el-button>
       <el-button type="primary" @click="handleSubmit(true)">提交核保</el-button>
     </div>
+    <Equities v-if="equitiesShow" :show="equitiesShow" :recipientInfo="recipientInfo"
+      :availableAmount="props.availableAmount" @cancel="equitiesShow = false" @save="handleEquitiesSave"></Equities>
   </div>
 </template>
 
@@ -142,7 +144,7 @@ import api from '@/api'
 import { ElMessage } from 'element-plus'
 import imageTypeSelect from './imageTypeSelect.vue'
 import Decimal from 'decimal.js'
-
+import Equities from './Equities.vue' // 驾意险详情模块
 const props = defineProps<{
   insOrderRightsInfoDto: any,//权益信息
   availableAmount: number,//可用金额
@@ -151,6 +153,7 @@ const props = defineProps<{
 const insOrderRightsInfoDto = ref()//权益信息
 const equitiesData = ref()//权益数据
 const recipient = ref('')//接收人
+const recipientInfo = ref(props.recipientInfo)//接收人信息
 const useMoney = ref(0)//可用金额
 const usedMoney = ref(0)//已使用金额
 const lastMoney = ref(0)//剩余金额
@@ -315,11 +318,15 @@ const selectionChange = (val) => {
 const handleSubmit = (bool) => {
   if (bool) {
     let info = props.recipientInfo.find((item: any) => item.title == recipient.value);
-    api.insurancePolicyApi.underwriting({
+    let params = {
       order: {
         ordersNo: ordersNo.value
       },
-      insOrderRightsInfoDto: {
+      specialAppointmentsVos: [...clauseList.value],
+      insOrderRightsInfoDto: {},
+    }
+    if(info){
+      params.insOrderRightsInfoDto = {
         insOrderRightsPackageList: insOrderRightsInfoDto.value.insOrderRightsPackageList,
         insOrderRightsList: insOrderRightsInfoDto.value.insOrderRightsList,
         rightsGrantReceiverDTO: {
@@ -327,26 +334,14 @@ const handleSubmit = (bool) => {
           receiverName: info.name,
           receiverMobile: info.mobile
         }
-      },
-      specialAppointmentsVos: [...clauseList.value]
-    }).then((res: any) => {
-      if (res.code === 200) {
-        ElMessage({
-          message: res.msg,
-          type: 'success'
-        })
-        emit('close', 'success')
-      } else {
-        if (res.code == 500) {
-          emit('close', 'error', res.msg)
-        } else {
-          emit('close', 'error')
-        }
-        ElMessage({
-          message: res.msg,
-          type: 'warning'
-        })
       }
+    }
+    api.insurancePolicyApi.underwriting(params).then((res: any) => {
+      emit('close', res, {
+        equitiesData: equitiesData.value.length,
+        totalPriceCount: totalPriceCount.value
+      })
+
     })
   } else {
     emit('close', false)
@@ -374,12 +369,16 @@ let changeIndex = ref(1)
 // 选择权益
 let equitiesShow = ref(false)
 const handleOpenEquities = () => {
+  console.log(1)
   equitiesShow.value = true
 }
-const handleEquities = (bool) => {
-  equitiesShow.value = bool
+const handleEquitiesSave = (data: any) => {
+  console.log(data)
+  insOrderRightsInfoDto.value = data;
+  recipient.value = insOrderRightsInfoDto.value?.recipient || ''
+  equitiesData.value = insOrderRightsInfoDto.value?.insOrderRightsPackageList?.concat(insOrderRightsInfoDto.value?.insOrderRightsList || []) || [];
+  equitiesShow.value = false
 }
-
 defineExpose({
   initEdit
 })

+ 0 - 2
src/views/insurancePolicy/order.vue

@@ -459,8 +459,6 @@ const exportOrder = () => {
   }
   let exportDynamicFields = checkList.value.join(';')
   api.insurancePolicyApi.exportDynamicFields({
-    pages: pages.value,
-    size: size.value,
     ...orderForm.value,
     startDate: range.value?.[0],
     endDate: range.value?.[1],

Файловите разлики са ограничени, защото са твърде много
+ 1049 - 1025
src/views/insurancePolicy/orderDetail.vue


+ 52 - 68
src/views/operationManagement/modules/addCard.vue

@@ -1,47 +1,33 @@
 <template>
   <div class="form">
-    <el-form ref="BankRef" :rules="bankRules" :model="bankForm" label-width="80">
-      <el-form-item prop="name" label="姓名">
-        <el-input v-model="bankForm.name" disabled></el-input>
+    <el-form ref="BankRef" :rules="bankRules" :model="bankForm" label-width="120">
+      <el-form-item prop="cardHolderName" label="姓名">
+        <el-input v-model="bankForm.cardHolderName" :disabled="props.userInfo.isRead"></el-input>
       </el-form-item>
-      <el-form-item prop="bank" label="银行">
-        <el-select v-model="bankForm.bankName" :disabled="bankForm.isRead">
-          <el-option v-for="item in bankOption" :key="item.id" :value="item.id" :label="item.label"></el-option>
+      <el-form-item prop="cardHolderMobile" label="持卡人手机号">
+        <el-input v-model="bankForm.cardHolderMobile"  maxlength="11" :disabled="props.userInfo.isRead"></el-input>
+      </el-form-item>
+      <el-form-item prop="bankName" label="银行">
+        <el-select v-model="bankForm.bankName" :disabled="props.userInfo.isRead">
+          <el-option v-for="item in bankOption" :key="item.id" :value="item.label" :label="item.label"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item prop="bankCardNumber" label="银行卡号">
-        <el-input v-model="bankForm.bankCardNumber" :disabled="bankForm.isRead"></el-input>
-      </el-form-item>
-      <el-form-item prop="bankName" label="开户行">
-        <el-input v-model="bankForm.bankAddress" :disabled="bankForm.isRead"></el-input>
+        <el-input v-model="bankForm.bankCardNumber" :disabled="props.userInfo.isRead"></el-input>
       </el-form-item>
-      <el-form-item prop="photo" label="照片" class="upload-btn">
-        <el-upload :auto-upload="false" v-if="!bankForm.imageUrl" :show-file-list="false" accept=".png, .jpg, .jpeg" @change="uploadImage">
-          <el-button size="large" icon="Plus" />
-        </el-upload>
-        <div class="image-view" v-else>
-          <img :src="bankForm.imageUrl" />
-          <div class="btns" v-if="!bankForm.isRead">
-            <el-upload  :disabled="bankForm.isRead" style="display: inline" :auto-upload="false" :show-file-list="false" accept=".png, .jpg, .jpeg" @change="uploadImage">
-              <el-icon class="btn-icon"><Upload /></el-icon>
-            </el-upload>
-<!--            <el-icon class="btn-icon" @click="imageView"><View /></el-icon>-->
-          </div>
-        </div>
+      <el-form-item prop="bankAddress" label="开户行">
+        <el-input v-model="bankForm.bankAddress" :disabled="props.userInfo.isRead"></el-input>
       </el-form-item>
-      <div style="display: flex; justify-content: flex-end" v-if="!bankForm.isRead">
+      <div style="display: flex; justify-content: flex-end" v-if="!props.userInfo.isRead">
         <el-button @click="onSubmit(BankRef, 0)">取消</el-button>
         <el-button type="primary" @click="onSubmit(BankRef, 1)">确定</el-button>
       </div>
     </el-form>
-    <div class="image-show" v-show="imageShow" @click="() => { imageShow = false }">
-      <img :src="bankForm.imageUrl" />
-    </div>
   </div>
 </template>
 
 <script setup lang="ts">
-import { ref, defineEmits, onMounted, watch } from 'vue'
+import { ref, onMounted, watch } from 'vue'
 import {ElMessage, FormInstance} from 'element-plus'
 import api from "@/api";
 
@@ -49,37 +35,50 @@ const BankRef = ref<FormInstance>()
 
 let props = defineProps<{
   userInfo: {
-    userJzgInfoId: string,
-    name: string,
-    bankName?: string,
-    bankCardNumber?: string,
-    bankAddress?: string,
-    attachment?: string,
-    imageUrl?: string
-    isRead?: boolean
+    userJzgInfoId?: string,
+    name?: string,
+    isRead?: boolean,
+    DetailInfo?: any
   }
 }>()
+let bankForm = ref({
+  userJzgInfoId: '',
+  cardHolderName: "",
+  cardHolderMobile: "",
+  bankName: "",
+  bankCardNumber: "",
+  bankAddress: "",
+})
 const emits = defineEmits(['closeDialog'])
 watch(() => props.userInfo, (newVal, oldVal) => {
-  bankForm.value = newVal
-}, { deep: true });
+  bankForm.value.cardHolderName = newVal.name || ''
+  bankForm.value.userJzgInfoId = newVal.userJzgInfoId || ''
+  if(newVal.DetailInfo) {
+    bankForm.value.userJzgInfoId = newVal.DetailInfo.userJzgInfoId || ''
+    bankForm.value.cardHolderName = newVal.DetailInfo.name || ''
+    bankForm.value.cardHolderMobile = newVal.DetailInfo.cardHolderMobile || ''
+    bankForm.value.bankName = newVal.DetailInfo.bankName || ''
+    bankForm.value.bankCardNumber = newVal.DetailInfo.bankCardNumber || ''
+    bankForm.value.bankAddress = newVal.DetailInfo.bankAddress || ''
+  }
+}, { immediate: true })
+
+
 
-let bankForm = ref({
-  userJzgInfoId: props.userInfo.userJzgInfoId,
-  name: props.userInfo.name,
-  bankName: props.userInfo.bankName,
-  bankCardNumber: props.userInfo.bankCardNumber,
-  bankAddress: props.userInfo.bankAddress,
-  attachment: props.userInfo.attachment,
-  imageUrl: props.userInfo.attachment,
-  isRead: props.userInfo.isRead
-})
 const bankRules = {
-  name: [
+  cardHolderName: [
     { required: true, message: '请填写姓名', trigger: 'blur' }
   ],
+  cardHolderMobile: [
+    { required: true, message: '请填写持卡人手机号', trigger: 'blur' },
+    {
+      pattern: /^1[0-9]{10}$/,
+      message: '请填写正确的手机号',
+      trigger: 'blur'
+    }
+  ],
   bankName: [
-    { required: true, message: '请填写开户行', trigger: 'blur' }
+    { required: true, message: '请填写银行名称', trigger: 'blur' }
   ],
   bankCardNumber: [
     { required: true, message: '请填写银行卡号', trigger: 'blur' },
@@ -94,28 +93,12 @@ const bankRules = {
   ],
 }
 
-// 照片
-let imageShow = ref(false)
-const uploadImage = async (file) => {
-  let files = file.raw
-  const params = new FormData(); // 声明formData数据类型
-  params.append("file", files);
-  params.append("type", "image");
-  const { code, data, msg } = await api.commonApi.fileUpload(params)
-  if(code == 200) {
-    bankForm.value.imageUrl = data.downloadUrl
-    bankForm.value.attachment = data.id
-  }
-}
-const imageView = () => {
-  imageShow.value = true
-}
 
 // 初始化银行数据
 let bankOption = ref([])
 const initBankCard = () => {
-  api.commonApi.personInfo('bank_info').then(res => {
-    if(res.code == 200) {
+  api.commonApi.personInfo('bank_info').then((res:any) => {
+    if(res?.code == 200) {
       bankOption.value = res.data
     } else {
       ElMessage({
@@ -135,6 +118,7 @@ const onSubmit = async (BankRef:FormInstance | undefined, type: number) => {
   if(type) {
     await BankRef.validate((valid) => {
       if(valid) {
+        console.log(bankForm.value)
         api.operationApi.addBankCard(bankForm.value).then(res => {
           if(res.code == 200) {
             ElMessage({

+ 20 - 43
src/views/operationManagement/operationDetail.vue

@@ -81,14 +81,10 @@
                 <template #default>
                   <el-table
                     :data="dataDetail?.bankCardList"
-                    height="200"
+                    height="300"
                   >
                     <el-table-column prop="name" label="姓名"></el-table-column>
-                    <el-table-column prop="bankName" label="开户行">
-                      <template #default="scope">
-                        {{ bankCardChange(bankOption, scope.row.bankName) }}
-                      </template>
-                    </el-table-column>
+                    <el-table-column prop="bankName" label="开户行"></el-table-column>
                     <el-table-column prop="bankCardNumber" label="卡号"></el-table-column>
                     <el-table-column prop="bankAddress" label="开户支行"></el-table-column>
                     <el-table-column prop="auditStatus" label="审核状态">
@@ -96,21 +92,9 @@
                         {{ scope.row.auditStatus == '0'?'未审核':scope.row.auditStatus == '1'?'审核通过':scope.row.auditStatus == '2'?'审核驳回':''}}
                       </template>
                     </el-table-column>
-                    <el-table-column prop="" label="身份证件照片">
-                      <template #default="scope">
-<!--                        <img class="cardImage" :src="dataDetail?.fileList.length>0?dataDetail?.fileList?.[0].fileUrl:''">-->
-                          {{ dataDetail?.fileList.length>0?`${dataDetail?.fileList?.length}张`: '暂无' }}
-                      </template>
-                    </el-table-column>
-                    <el-table-column prop="cardFile" label="银行卡照片">
-                      <template #default="scope">
-<!--                        <img class="cardImage" :src="scope.row.cardFile">-->
-                          {{ scope.row.cardFileUrl?`1张`: '暂无' }}
-                      </template>
-                    </el-table-column>
                     <el-table-column label="操作">
                       <template #default="scope">
-                        <a style="color: #409EFF; cursor: pointer" @click="editBankCard(scope.row)">详情</a>
+                        <el-button link type="primary" @click="editBankCard(scope.row)">详情</el-button>
                       </template>
                     </el-table-column>
                   </el-table>
@@ -158,7 +142,7 @@
       :title="bankTitle"
       width="500"
     >
-      <addCard @closeDialog="closeAddBankCard" :userInfo="bankCardInfo"></addCard>
+      <addCard v-if="bankCardDialogShow" @closeDialog="closeAddBankCard" :userInfo="bankCardInfo"></addCard>
     </el-dialog>
     <el-dialog
       v-model="dialogShow"
@@ -198,6 +182,7 @@ import { useRoute, useRouter } from 'vue-router'
 import api from '@/api'
 import {OperationIsEnable} from "@/api/modules/operation.ts";
 import router from "@/router";
+import Detail from '../representative/detail.vue';
 
 let AddOperationRef = ref(null)
 const AllocationRef = ref(null)
@@ -325,27 +310,25 @@ let bankCardDialogShow = ref(false)
 // 添加银行卡
 const addBankCard = () => {
   bankTitle.value = '添加银行卡'
-  bankCardDialogShow.value = true
   bankCardInfo.value = {
-    userJzgInfoId: dataDetail.value.id,
-    name: dataDetail.value.name,
+    userJzgInfoId: dataDetail.value?.id || '',
+    name: dataDetail.value?.name || '',
     isRead: false
   }
+  bankCardDialogShow.value = true
+
 }
 // 编辑银行卡
-const editBankCard = (row) => {
+const editBankCard = (row:any) => {
   bankTitle.value = '查看银行卡'
-  bankCardDialogShow.value = true
   bankCardInfo.value = {
     userJzgInfoId: dataDetail.value.id,
     name: dataDetail.value.name,
-    bankName: row.bankName,
-    bankCardNumber: row.bankCardNumber,
-    bankAddress: row.bankAddress,
-    attachment: row.cardFile,
-    imageUrl: row.cardFile,
-    isRead: true
+    isRead: true,
+    DetailInfo: row || {}
   }
+  bankCardDialogShow.value = true
+
 }
 // 关闭添加银行卡弹框
 const closeAddBankCard = (type: string) => {
@@ -479,7 +462,7 @@ const imageChangeUrl = (type) => {
 // 预览
 let imageUrl = ref('')
 let imageShow = ref(false)
-const imageView = (type) => {
+const imageView = (type: string) => {
   imageUrl.value = imageChangeUrl(type)
   imageShow.value = true
 }
@@ -488,7 +471,7 @@ const imageView = (type) => {
 let dataDetail = ref(null)
 const initDetail = () => {
   let id = myRoute.query?.id
-  api.operationApi.operationDetail(id).then(res => {
+  api.operationApi.operationDetail(id).then((res:any) => {
     if(res?.code == 200) {
       dataDetail.value = res.data
     } else {
@@ -503,8 +486,8 @@ const initDetail = () => {
 // 初始化银行数据
 let bankOption = ref([])
 const initBankCard = () => {
-  api.commonApi.personInfo('bank_info').then(res => {
-    if(res.code == 200) {
+  api.commonApi.personInfo('bank_info').then((res:any) => {
+    if(res?.code == 200) {
       bankOption.value = res.data
     } else {
       ElMessage({
@@ -514,16 +497,10 @@ const initBankCard = () => {
     }
   })
 }
-// 转换
-const bankCardChange = (list, code) => {
-  if(code&&list.length>0) {
-    let obj = list.find(item => item.id == code)
-    return obj.label
-  }
-}
+
 
 // 名字转换首字母
-const initName = (name) => {
+const initName = (name: string) => {
   return name?pinyin.getFullChars(name).substring(0, 1):''
 }
 

+ 1 - 2
src/views/partnerManagement/modules/addCard.vue

@@ -6,7 +6,7 @@
       </el-form-item>
       <el-form-item prop="bank" label="银行">
         <el-select v-model="bankForm.bankName" :disabled="bankForm.isRead">
-          <el-option v-for="item in bankOption" :key="item.id" :value="item.id" :label="item.label"></el-option>
+          <el-option v-for="item in bankOption" :key="item.id" :value="item.label" :label="item.label"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item prop="bankCardNumber" label="银行卡号">
@@ -136,7 +136,6 @@ const onSubmit = async (BankRef:FormInstance | undefined, type: number) => {
     await BankRef.validate((valid) => {
       if(valid) {
         console.log(bankForm.value)
-        return
         api.operationApi.addBankCard(bankForm.value).then(res => {
           if(res.code == 200) {
             ElMessage({

Файловите разлики са ограничени, защото са твърде много
+ 483 - 587
src/views/platform/index.vue


+ 42 - 22
src/views/quoteConfig/agreement/agreementCopy.vue

@@ -186,29 +186,49 @@ function findpage() {
 }
 //费用复制
 const agreementcopy = () => {
-  ElMessageBox.confirm(
-    '没有选中要复制的协议费用,请确认是否继续复制',
-    '提示',
-    {
-      confirmButtonText: '确定复制',
-      type: 'info',
-      center: true,
-      confirmButtonClass: 'el-button--primary',
-    }
-  )
-    .then(() => {
-      api.agreementApi.agreementCopy({ id: id.value, costIds: sysUpAndDownList.value }).then((res: any) => {
-        if (res.code == '200') {
-          ElMessage({
-            type: 'success',
-            message: res.msg,
-            plain: true,
-          })
+  if (sysUpAndDownList.value.length == 0) {
+    ElMessageBox.confirm(
+      '没有选中要复制的协议费用,请确认是否继续复制',
+      '提示',
+      {
+        confirmButtonText: '确定复制',
+        type: 'info',
+        center: true,
+        confirmButtonClass: 'el-button--primary',
+      }
+    )
+      .then(() => {
+        api.agreementApi.agreementCopy({ id: id.value, costIds: sysUpAndDownList.value }).then((res: any) => {
+          if (res.code == '200') {
+            ElMessage({
+              type: 'success',
+              message: res.msg,
+              plain: true,
+            })
+            setTimeout(() => {
+              router.back()
+            }, 1000);
+          } else {
+          }
+        });
+      })
+  } else {
+    api.agreementApi.agreementCopy({ id: id.value, costIds: sysUpAndDownList.value }).then((res: any) => {
+      if (res.code == '200') {
+        ElMessage({
+          type: 'success',
+          message: res.msg,
+          plain: true,
+        })
+        setTimeout(() => {
           router.back()
-        } else {
-        }
-      });
-    })
+        }, 1000);
+
+      } else {
+      }
+    });
+  }
+
 
 }
 //多选事件

+ 1 - 1
src/views/quoteConfig/agreement/agreementDetails.vue

@@ -202,7 +202,7 @@
       :RulesInfo="RulesInfo" @save="ruleFeeSave" @cancel="ruleFeeVisible = false" />
     <!-- 规则费用编辑组件 -->
     <ruleFeeDialogEdit :ruleFeeVisible="ruleFeeEditVisible" :headerTitle="ruleFeeHeaderTitle"
-      :agreementInfo="agreementInfo" :RulesInfo="RulesInfo" operationType="audit" :costitemEditInfo="costitemEditInfo" @save="ruleFeeEditSave"
+      :agreementInfo="agreementInfo" :RulesInfo="RulesInfo"  :costitemEditInfo="costitemEditInfo" @save="ruleFeeEditSave"
       @cancel="ruleFeeEditVisible = false" />
   </div>
 </template>

+ 6 - 3
src/views/quoteConfig/agreement/components/ruleFeeDialog.vue

@@ -486,7 +486,8 @@ const ptlAgreementCostTypeList = [
     export: 0,
     // commission: 0,
     addThrow: 0,
-    keepPointRatio: 0
+    keepPointRatio: 0,
+    exportKeepPointRatio: 0,
   },
   {
     costType: "商业险",
@@ -494,7 +495,8 @@ const ptlAgreementCostTypeList = [
     export: 0,
     // commission: 0,
     addThrow: 0,
-    keepPointRatio: 0
+    keepPointRatio: 0,
+    exportKeepPointRatio: 0,
   },
   {
     costType: "驾意险",
@@ -502,7 +504,8 @@ const ptlAgreementCostTypeList = [
     export: 0,
     // commission: 0,
     addThrow: 0,
-    keepPointRatio: 0
+    keepPointRatio: 0,
+    exportKeepPointRatio: 0,
   }
 ];
 

+ 6 - 5
src/views/quoteConfig/agreement/components/ruleFeeDialogEdit.vue

@@ -15,6 +15,9 @@
               <span class="m-right-20">审核人:{{ costitemEditInfo.auditPerson }}</span>
               <span >审核时间:{{costitemEditInfo.auditTime }}</span>
             </div>
+            <span class="primary" v-if="costitemEditInfo.approved == 2" @click="disabledShow = false"  style="color: #409eff;" >
+                修改并重提交
+              </span>
           </div>
         </div>
         <div class="agreement ">
@@ -134,7 +137,7 @@
             </el-table-column>
               <el-table-column prop="exportKeepPointRatio" label="出口留点比例" width="180" align="center">
                   <template #default="scope">
-                      <el-input-number v-model="scope.row.exportKeepPointRatio" :precision="2" controls-position="right"
+                      <el-input-number v-model="scope.row.exportKeepPointRatio" :disabled="disabledShow" :precision="2" controls-position="right"
                                        style="width: 100%;" :min="0" :max="100">
                           <template #suffix>%</template>
                       </el-input-number>
@@ -149,8 +152,8 @@
           <el-button @click="cancel">取消</el-button>
           <el-button type="primary" @click="save(editFormRefs)">提交审核</el-button>
         </div>
-<!--          <div class="flex f-c " v-if="!costitemEditInfo?.reviewDescription && props.operationType == 'audit'">-->
-        <div class="flex f-c " v-if="!costitemEditInfo?.approved && !isHideFoot">
+         <div class="flex f-c " v-if="!costitemEditInfo?.reviewDescription && props.operationType == 'audit'">
+        <!-- <div class="flex f-c " v-if="!costitemEditInfo?.approved"> -->
           <el-checkbox v-model="automatic" label="审核后,自动跳支审核下一条费用" size="large" />
           <div class="flex a-c">
             <el-button @click="rejectOperation">审核驳回</el-button>
@@ -171,7 +174,6 @@
 import { ref, } from 'vue'
 import { DrawerProps, ComponentSize, ElMessageBox } from 'element-plus';
 import { loadDicts } from '@/utils/composables/dictService';//字典组件
-import { defineProps, defineEmits } from "vue";
 const direction = ref<DrawerProps['direction']>('rtl')
 const fromSize = ref<ComponentSize>('default')
 
@@ -181,7 +183,6 @@ let RuleConditionRefs = ref()
 
 const props = defineProps<{
   ruleFeeVisible: boolean,
-  isHideFoot: {type:boolean,default:false},  // 是否隐藏底部审核信息
   agreementInfo: any,//协议信息
   RulesInfo: any,//费用信息
   costitemEditInfo: any,//编辑回显数据

Някои файлове не бяха показани, защото твърде много файлове са промени