Browse Source

代码合并

chenjj 4 days ago
parent
commit
2ee49e9250

+ 8 - 0
src/api/finance/settlement.js

@@ -61,4 +61,12 @@ export function auditorOrderSettlement(data) {
     method: 'post',
     data
   })
+}
+
+
+export function sendCode(phone) {
+  return request({
+    url: `/sms/sendCode/${phone}`,
+    method: 'get',
+  })
 }

+ 4 - 1
src/store/modules/user.js

@@ -12,7 +12,8 @@ const useUserStore = defineStore(
       name: '',
       avatar: '',
       roles: [],
-      permissions: []
+      permissions: [],
+      phonenumber:''
     }),
     actions: {
       // 登录
@@ -49,6 +50,8 @@ const useUserStore = defineStore(
             this.id = user.userId
             this.name = user.userName
             this.avatar = avatar
+
+            this.phonenumber = user.phonenumber;
             resolve(res)
           }).catch(error => {
             reject(error)

+ 70 - 53
src/views/components/DialogForm/index.vue

@@ -1,77 +1,85 @@
-<template>
-    <el-dialog :title="title" v-model="open" width="700px" append-to-body>
-        <el-form ref="dialogFormRef" :model="form" :label-width="labelWidth" >
+<template> 
+    <el-dialog :title="title" v-model="open" width="700px"  append-to-body>
+        <el-form ref="dialogFormRef" :model="form" :label-width="labelWidth" class="dialogClass">
             <template v-for="item in column" :key="item.prop">
                 <!-- 输入框 -->
                 <el-form-item :label="item.label" v-if="item.type === 'input'" :prop="item.prop" :rules="item.rules">
-                    <el-input v-model="form[item.prop]" :placeholder="'请输入' + item.label" clearable  :disabled="disables[item.prop]">
-                        <template v-if="item.dese" #append > <a @click="item.deseClick?item.deseClick(form):''">{{ item.dese }}</a> </template>
+                    <el-input v-model="form[item.prop]" :placeholder="'请输入' + item.label" clearable
+                        :disabled="disables[item.prop]">
+                        <template v-if="item.dese" #append> <a @click="item.deseClick ? item.deseClick(form) : ''">{{
+                                item.dese }}</a> </template>
                     </el-input>
                 </el-form-item>
                 <!-- 文本域 -->
-                <el-form-item :label="item.label" v-if="item.type === 'textarea'&& (item.show ?  item.show(form): true)" :prop="item.prop" :rules="item.rules">
-                    <el-input v-model="form[item.prop]" type="textarea"
-                    :autosize="{ minRows: 2, maxRows: 4 }"
-                     :placeholder="'请输入' + item.label" clearable  :disabled="disables[item.prop]"/>
+                <el-form-item :label="item.label" v-if="item.type === 'textarea' && (item.show ? item.show(form) : true)"
+                    :prop="item.prop" :rules="item.rules">
+                    <el-input v-model="form[item.prop]" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }"
+                        :placeholder="'请输入' + item.label" clearable :disabled="disables[item.prop]" />
                 </el-form-item>
 
-                <el-form-item :label="item.label" v-if="item.type === 'radio' && item.options" :prop="item.prop" :rules="item.rules">   
-                    <el-radio-group v-model="form[item.prop]"  :disabled="disables[item.prop]">
-                        <el-radio v-for="dict in item.options" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+                <el-form-item :label="item.label" v-if="item.type === 'radio' && item.options" :prop="item.prop"
+                    :rules="item.rules">
+                    <el-radio-group v-model="form[item.prop]" :disabled="disables[item.prop]">
+                        <el-radio v-for="dict in item.options" :key="dict.value" :value="dict.value">{{ dict.label
+                            }}</el-radio>
                     </el-radio-group>
                 </el-form-item>
-    
+
 
                 <!-- 时间选择 -->
                 <el-form-item :label="item.label" v-if="item.type === 'date'" :prop="item.prop" :rules="item.rules">
                     <el-date-picker v-model="form[item.prop]" value-format="YYYY-MM-DD" type="daterange"
-                        range-separator="-" start-placeholder="开始日期" clearable end-placeholder="结束日期"  :disabled="disables[item.prop]"></el-date-picker>
+                        range-separator="-" start-placeholder="开始日期" clearable end-placeholder="结束日期"
+                        :disabled="disables[item.prop]"></el-date-picker>
                 </el-form-item>
 
                 <!-- 下拉框选择 -->
-                <el-form-item :label="item.label" v-if="item.type === 'select' && item.dictionary" :prop="item.prop" :rules="item.rules">
-                    <el-select v-model="form[item.prop]" :placeholder="'请选择' + item.label" clearable  :disabled="disables[item.prop]">
+                <el-form-item :label="item.label" v-if="item.type === 'select' && item.dictionary" :prop="item.prop"
+                    :rules="item.rules">
+                    <el-select v-model="form[item.prop]" :placeholder="'请选择' + item.label" clearable
+                        :disabled="disables[item.prop]">
                         <el-option v-for="dict in dictionaryOptions[item.dictionary]" :key="dict.value"
                             :label="dict.label" :value="dict.value"></el-option>
                     </el-select>
                 </el-form-item>
 
-                <el-form-item :label="item.label" v-if="item.type === 'select' && item.options" :prop="item.prop" :rules="item.rules">
-                    <el-select v-model="form[item.prop]" :placeholder="'请选择' + item.label" clearable  :disabled="disables[item.prop]">
-                        <el-option v-for="dict in item.options" :key="dict.value"
-                            :label="dict.label" :value="dict.value"></el-option>
+                <el-form-item :label="item.label" v-if="item.type === 'select' && item.options" :prop="item.prop"
+                    :rules="item.rules">
+                    <el-select v-model="form[item.prop]" :placeholder="'请选择' + item.label" clearable
+                        :disabled="disables[item.prop]">
+                        <el-option v-for="dict in item.options" :key="dict.value" :label="dict.label"
+                            :value="dict.value"></el-option>
                     </el-select>
                 </el-form-item>
 
-                <!-- <el-form-item :label="item.label" v-if="item.type === 'dict' && item.dict" :prop="item.prop" :rules="item.rules">
-                    <el-select v-model="form[item.prop]" :placeholder="'请选择' + item.label" clearable  :disabled="disables[item.prop]">
-                        <el-option v-for="dict in item.dict" :key="dict.value"
-                            :label="dict.label" :value="dict.value"></el-option>
-                    </el-select>
-                </el-form-item> -->
 
-                 <!-- 联动选择框 -->
-                <el-form-item :label="item.label" v-if="item.type === 'cascader' " :prop="item.prop">
+
+                <!-- 联动选择框 -->
+                <el-form-item :label="item.label" v-if="item.type === 'cascader'" :prop="item.prop">
                     <el-cascader v-model="form[item.prop]" :options="item.options || []" style="width: 100%;"
-                        :props="item.props"  :disabled="disables[item.prop]"/>
+                        :props="item.props" :disabled="disables[item.prop]" />
                 </el-form-item>
 
-                 <!-- 图片预览 -->
-                 <el-form-item :label="item.label" v-if="item.type === 'img' " :prop="item.prop">
+                <!-- 图片预览 -->
+                <el-form-item :label="item.label" v-if="item.type === 'img'" :prop="item.prop">
                     <el-space wrap>
-                        <div v-for="(imgItem,imgIndex) in getImages(item.prop)" :key="imgIndex">
-                            <img  :src="imgItem" alt="" srcset="" style="width: 180px;" />
+                        <div v-for="(imgItem, imgIndex) in getImages(item.prop)" :key="imgIndex">
+                            <img :src="imgItem" alt="" srcset="" style="width: 100px;" />
                         </div>
                     </el-space>
                 </el-form-item>
+                 <!-- 文本显示 -->
+                 <el-form-item :label="item.label" v-if="item.type === 'text'" :prop="item.prop" :rules="item.rules">
+                        {{ form[item.prop] }} <a v-if="item.dese" @click="item.deseClick ? item.deseClick(form) : ''">{{
+                                item.dese }}</a>
+                    </el-form-item>
+
+                    <!-- 字典显示 -->
+                    <el-form-item :label="item.label" v-if="item.type === 'dict'" :prop="item.prop" :rules="item.rules">
+                        <dict-tag v-if="item.dict" :options="item.dict" :value="String(form[item.prop])" />
+                    </el-form-item>
             </template>
 
-
-            <!-- <el-form-item v-if="form.appStatus === '3'" label="驳回原因" prop="rejectReason" :rules="{ required: true, message: '请输入驳回原因', trigger: 'blur' }">
-                    <el-input v-model="form.rejectReason" type="textarea"
-                    :autosize="{ minRows: 2, maxRows: 4 }"
-                     placeholder="请输入驳回原因" clearable  :disabled="disables.appStatus"/>
-                </el-form-item> -->
         </el-form>
         <template #footer>
             <div class="dialog-footer">
@@ -102,6 +110,7 @@ const props = defineProps({
         default: '120px',
     },
 
+
 })
 
 const open = ref(false);
@@ -113,12 +122,14 @@ const dialogFormRef = ref(null);
 
 const disables = ref({});
 
+const formStatus = ref('form') //form:表单 details:详情
+
 
 const getImages = (key) => {
     const imgs = form.value[key];
-    console.log(233,imgs,key);
-    
-    if(!imgs){
+    console.log(233, imgs, key);
+
+    if (!imgs) {
         return [];
     }
     return imgs.split(',')
@@ -126,13 +137,13 @@ const getImages = (key) => {
 
 const handleInit = () => {
     try {
-        const data = props.column.value || props.column ;
+        const data = props.column.value || props.column;
         const keys = data.map(item => {
             if (item.type === 'select' && item.dictionary) {
                 return item.dictionary;
             }
         }).filter(Boolean);
-        if(keys && keys.length > 0){
+        if (keys && keys.length > 0) {
             const res = proxy.useDict(keys);
             Object.assign(dictionaryOptions, res)
         }
@@ -147,9 +158,9 @@ onMounted(() => {
     handleInit();
 })
 
-const handleDialog = (status,data) => {
-    console.log('status',status);
-    if(data){
+const handleDialog = (status, data) => {
+    console.log('status', status);
+    if (data) {
         form.value = data;
     }
     open.value = status;
@@ -160,7 +171,7 @@ const submitForm = () => {
     proxy.$refs["dialogFormRef"].validate(valid => {
         if (valid) {
             console.log('form', form.value);
-            emit('submit',form.value)
+            emit('submit', form.value)
         }
     });
 }
@@ -172,10 +183,10 @@ const cancel = () => {
 }
 
 
-const initForm = (data,disableData) => {
-    console.log('initForm',data);
+const initForm = (data, disableData,formStatus) => {
+    console.log('initForm', data);
     form.value = data;
-    if(disableData){
+    if (disableData) {
         disables.value = disableData;
     }
 }
@@ -183,8 +194,14 @@ const initForm = (data,disableData) => {
 
 defineExpose({
     handleDialog,
-    initForm
+    initForm,
 })
 </script>
 
-<style lang='scss' scoped></style>
+<style lang='scss' scoped>
+.dialogClass {
+    height: calc(100vh - 280px);
+    overflow: hidden;
+    overflow-y: auto;
+}
+</style>

+ 1 - 1
src/views/components/ListPage/Search.vue

@@ -1,5 +1,5 @@
 <template>
-    <div>
+    <div v-if="column && column.length > 0">
         <el-form :inline="true" ref="searchRef" :model="formInline" class="demo-form-inline">
             <template v-for="item in column" :key="item.prop">
                 <!-- 输入框 -->

+ 5 - 1
src/views/components/ListPage/Table.vue

@@ -30,7 +30,7 @@
                 <el-table-column v-else :label="item.label" :prop="item.tableProp || item.prop"
                     :width="item.width" show-overflow-tooltip></el-table-column>
             </template>
-            <el-table-column label="操作"  class-name="small-padding fixed-width">
+            <el-table-column label="操作"  class-name="small-padding fixed-width" v-if="isScope">
                 <template #default="scope">
                     <el-space wrap>
                         <div v-for="item in scopeBtns" :key="item.key">
@@ -94,6 +94,10 @@ const props = defineProps({
     isSelect:{
         type: Boolean,
         default: true
+    },
+    isScope:{
+        type: Boolean,
+        default: true
     }
 })
 

+ 11 - 2
src/views/components/ListPage/index.vue

@@ -7,7 +7,7 @@
             <Search :column="searchColumn" @submit="searchSubmit" @reset="resetForm" :searchBtns="searchBtns"/>
         </div>
         <div class="table-div">
-            <Table :tableKey="tableKey" ref="tableRef" :column="tableColumn" :data="tableData.list" :loading="loading" :scopeBtns="scopeBtns" :isSelect="isSelect" />
+            <Table :isScope="isScope" :tableKey="tableKey" ref="tableRef" :column="tableColumn" :data="tableData.list" :loading="loading" :scopeBtns="scopeBtns" :isSelect="isSelect" />
         </div>
         <div class="pagination-div">
             <pagination v-show="tableData.total > 0" :total="tableData.total" v-model:page="queryParams.pageNum"
@@ -60,6 +60,10 @@ const props = defineProps({
     defaultTab:{
         type: String,
         default: '2'
+    },
+    isScope:{
+        type: Boolean,
+        default: true
     }
 })
 const tabsValue = ref('2')
@@ -145,9 +149,14 @@ const ids = computed(() =>{
     return tableRef.value.ids
 })
 
+const handleExist = (value) => {
+const f = props.tabList.filter(item => item.name === value);
+return f && f.length > 0
+}
+
 onMounted(() => {
   const tabs = sessionStorage.getItem('tabsValue');  
-  if(tabs){
+  if(tabs && handleExist(tabs)){
     tabsValue.value = tabs;
   }else{
     tabsValue.value = props.defaultTab;

+ 76 - 8
src/views/finance/withdrawal/index.vue

@@ -1,13 +1,49 @@
 <template>
     <div>
-        <ListPage :column="tabkey!=='4'? talkeColumn:paymentColumn" :tableApi="getList" :isSelect="true" :scopeBtns="scopeBtns"
-            :searchBtns="searchBtns" ref="userTableRef" tableKey="volunteerTakeRecordId" :tabList="tabList"
-            tabsearchKey="tabkeys" defaultTab="0" />
+        <ListPage :column="tabkey !== '4' ? talkeColumn : paymentColumn" :tableApi="getList" :isSelect="true"
+            :scopeBtns="scopeBtns" :searchBtns="searchBtns" ref="userTableRef" tableKey="volunteerTakeRecordId"
+            :tabList="tabList" tabsearchKey="tabkeys" defaultTab="0" />
         <DialogForm ref="dialogFormRef" :title="dialogData.title" :column="dialogData.column" @submit="submitForm"
-            labelWidth="120px"  />
+            labelWidth="120px" />
+
+        <!-- <DialogForm ref="dialogVerifyRef" :title="dialogVerifyData.title" :column="dialogVerifyData.column"
+            @submit="submitVerify" labelWidth="120px" /> -->
+
+        <el-dialog v-model="dialogPlay" title="打款单详情" :before-close="verifyClose" :footer="false">
+            <div>
+                <el-descriptions class="margin-top" :column="3" :size="size">
+                    <el-descriptions-item label="打款单总金额(元):">{{ dialogRow.totalPaymentAmount }}</el-descriptions-item>
+                    <el-descriptions-item label="应打款金额:">{{ dialogRow.totalPaymentAmount }}</el-descriptions-item>
+                    <el-descriptions-item label="实际打款金额:">{{ dialogRow.actualPaymentAmount }}</el-descriptions-item>
+                </el-descriptions>
+                <ListPage :column="dialogColumn" :tableApi="getVerList" :isSelect="false" :scopeBtns="scopeBtns"
+                    :searchBtns="searchBtns" :isScope="false" ref="userTableRef" tableKey="volunteerTakeRecordId" />
+            </div>
+        </el-dialog>
+
+        <el-dialog v-model="dialogVerify" title="打款验证" :before-close="verifyCancel" width="500px">
+            <div class="verify-box">
+                    <div>业务类型: 支付宝</div>
+                    <div>打款单总金额:<span class="price-size">¥{{ dialogRow.actualPaymentAmount }}</span></div>
+                </div>
+                <div class="yzm-box">
+                   <div><span style="color:red">*</span>
+                   验证密码:</div>
+                   <div>
+                    <el-input v-model="verifyCode" placeholder="请输入短信验证码" clearable />
+                   </div>
+                </div>
+            <template #footer>
+                <div class="dialog-footer">
+                    <el-button @click="verifyCancel">取消</el-button>
+                    <el-button type="primary" @click="submitVerify">
+                        确定
+                    </el-button>
+                </div>
+            </template>
+        </el-dialog>
+
 
-            <DialogForm ref="dialogVerifyRef" :title="dialogVerifyData.title" :column="dialogVerifyData.column" @submit="submitVerify"
-            labelWidth="120px"  />
     </div>
 </template>
 
@@ -34,9 +70,17 @@ const {
     scopeBtns,
     dialogVerifyRef,
     dialogVerifyData,
+    verifyCode,
+    dialogPlay,
+    dialogColumn,
+    dialogRow,
+    dialogVerify,
     getList,
     submitForm,
-    submitVerify
+    submitVerify,
+    verifyClose,
+    getVerList,
+    verifyCancel
 } = useData({ proxy, jlzj_area_type });
 console.log('tableColumn', dialogData);
 
@@ -46,4 +90,28 @@ console.log('tableColumn', dialogData);
 
 </script>
 
-<style lang='scss' scoped></style>
+<style lang='scss' scoped>
+
+.verify-box {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    padding: 40px 0;
+    margin-bottom: 16px;
+    font-size: 18px;
+    line-height: 34px;
+    background: #f9f9f9;
+    border-radius: 12px;
+}
+
+.yzm-box {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+.price-size {
+    color: red;
+    font-size: 22px;
+}
+</style>

+ 151 - 42
src/views/finance/withdrawal/useData.js

@@ -1,6 +1,6 @@
 import { ref, computed } from "vue";
-import { auditorOrderSettlement } from "@/api/finance/settlement.js";
-
+import { auditorOrderSettlement,sendCode } from "@/api/finance/settlement.js";
+import useUserStore from '@/store/modules/user'
 import { takeList, paymentList, takeApproval, careatPayment,payoutCheck } from "@/api/finance/withdrawal.js";
 //功能
 export default ({ proxy, jlzj_area_type }) => {
@@ -8,6 +8,9 @@ export default ({ proxy, jlzj_area_type }) => {
     const dialogFormRef = ref(null);
     const userTableRef = ref(null);
     const dialogVerifyRef =ref(null);
+    const verifyCode =ref('');
+   
+    
     const tabkey = ref('0');
     const {
         pay_type,
@@ -17,6 +20,9 @@ export default ({ proxy, jlzj_area_type }) => {
         payment_status
     } = proxy.useDict("pay_type", "is_pay", "volunteer_app_status","payment_status","is_verified");
 
+    const dialogPlay = ref(false); //打款单详情
+    const dialogRow = ref({});
+    const dialogVerify =ref(false);
 
     //打开弹窗
     const openDialog = (data, type) => {
@@ -112,13 +118,15 @@ export default ({ proxy, jlzj_area_type }) => {
         }
     }
 
-    const openVerify = (data) => {
+    const openVerify = (data,type) => {
         try {
             const disabledData = {
                 volunteerPaymentRecordsId: true,
                 paymentOrderNumber:true,
                 payType:true
-
+            }
+            if(type === 'details'){
+                disabledData['payPassword'] = true;
             }
             dialogVerifyRef.value.initForm(data, disabledData)
         } catch (error) {
@@ -128,17 +136,18 @@ export default ({ proxy, jlzj_area_type }) => {
             dialogVerifyRef.value.handleDialog(true);
         }
     }
-    const submitVerify = async(data) => {
+    const submitVerify = async() => {
         try {
-            console.log('submit', data);
+            const data =dialogRow.value;
+            console.log('submit',  data);
             const parmas = {
                 volunteerPaymentRecordsId: data.volunteerPaymentRecordsId,
                 paymentOrderNumber: data.paymentOrderNumber,
-                payPassword:data.payPassword
+                payPassword:verifyCode.value
             }
             const res = await payoutCheck(parmas);
             if (up_res.code === 200) {
-                proxy.$modal.msgSuccess("审核成功");
+                proxy.$modal.msgSuccess("操作成功");
                 return;
             }
             proxy.$modal.msgSuccess(res.msg);
@@ -149,12 +158,41 @@ export default ({ proxy, jlzj_area_type }) => {
             dialogVerifyRef.value.handleDialog(false);
         }
     }
+    const verifyCancel =()=>{
+        dialogVerify.value = false;
+        dialogRow.value = {};
+        verifyCode.value ='';
+    }
+
+    const getVerList = async (data) => {
+        console.log('dialogRow.value',dialogRow.value);
+        
+        return takeList({ ...data,paymentRecordId: dialogRow.value.volunteerPaymentRecordsId})
+    }
+
+    const verifyClose = ()=>{
+        dialogPlay.value = false;
+        dialogRow.value = {};
+    }
     
 
     return {
         dialogFormRef,
-        userTableRef,
+        userTableRef,                                                     
         dialogVerifyRef,
+        dialogPlay,
+        tabkey,
+        dialogRow,
+        dialogVerify,
+        verifyCode,
+        openDialog,
+        exportFile,
+        submitForm,
+        getList,
+        submitVerify,
+        verifyClose,
+        getVerList,
+        verifyCancel,
         tabList: [
             {
                 title: '待审核',
@@ -173,12 +211,6 @@ export default ({ proxy, jlzj_area_type }) => {
                 name: '4'
             },
         ],
-        openDialog,
-        exportFile,
-        submitForm,
-        getList,
-        submitVerify,
-        tabkey,
         talkeColumn:ref([
             {
                 label: '支付宝账户',
@@ -261,34 +293,62 @@ export default ({ proxy, jlzj_area_type }) => {
             },
             {
                 label: '打款时间',
-                prop: 'createTime',
+                prop: 'paymentTime',
+            },
+        ]),
+        dialogColumn:ref([
+            {
+                label: '业务编码',
+                prop: 'takeSn',
+                type: 'input',
+            },
+            {
+                label: '用户信息',
+                prop: 'alipayName',
+                type: 'input',
+            },
+            {
+                label: '提现金额',
+                prop: 'receiveAmount',
+            },
+            {
+                label: '扣除的税额',
+                prop: 'taxAmount',
+            },
+            {
+                label: '应打款金额',
+                prop: 'shoudAmount',
+            },
+            {
+                label: '实际打款金额',
+                prop: 'shoudAmount',
             },
         ]),
         dialogData: {
             title: '结算申请',
             column: [
                 {
-                    label: '支付宝账户',
+                    label: '支付宝账户',
                     prop: 'alipayAccountNo',
-                    type: 'input',
+                    type: 'text',
                 },
                 {
-                    label: '支付宝姓名',
+                    label: '支付宝姓名',
                     prop: 'alipayName',
-                    type: 'input',
+                    type: 'text',
                 },
                 {
-                    label: '提现申请金额',
+                    label: '提现申请金额',
                     prop: 'takeAmount',
-                    type: 'input',
+                    type: 'text',
                 },
                 {
-                    label: '申请时间',
+                    label: '申请时间',
                     prop: 'createTime',
-                    type: 'input',
+                    type: 'text',
                 },
                 {
-                    label: '审核状态',
+                    label: '审核状态',
                     prop: 'appStatus',
                     type: 'radio',
                     rules: [
@@ -307,7 +367,7 @@ export default ({ proxy, jlzj_area_type }) => {
                     ]
                 },
                 {
-                    label: '驳回原因',
+                    label: '驳回原因',
                     prop: 'rejectReason',
                     type: 'textarea',
                     show: (form) => {
@@ -342,25 +402,74 @@ export default ({ proxy, jlzj_area_type }) => {
                     openDialog(row, 'examine')
                 },
                 show: (row) => {
-                    return tabkey.value === '0' && row.appStatus === '1'
+                    
+                    return tabkey.value === '1' && row.appStatus === '1'
+                }
+            },
+            {
+                label: '查看详情',
+                type: 'primary',
+                key: 'details',
+                func: (row) => {
+                    console.log(row)
+                    openDialog(row, 'details')
+                },
+                show: (row) => {
+                    return tabkey.value !== '4'
+                }
+            },
+            {
+                label: '打款验证',
+                type: 'primary',
+                key: 'details',
+                func: async(row) => {
+                    console.log(row)
+                    const userStore = useUserStore();
+					console.log("TCL: exportFile -> userStore", userStore)
+                    if(userStore.phonenumber){
+                        try {
+                            const res =await sendCode(userStore.phonenumber);
+                            if(res.code === 200){
+                                proxy.$modal.msgSuccess(res.msg);
+                            }else{
+                                proxy.$modal.msgError(res.msg);
+                            }
+                        } catch (error) {
+							console.log("TCL: exportFile -> error", error)
+                        }finally {
+                            dialogRow.value = row;
+                            dialogVerify.value = true;
+                        }
+                    }
+                    
+                },
+                show: (row) => {
+                    return tabkey.value === '4' && row.paymentStatus === '1'
                 }
             },
-            // {
-            //     label: '查看详情',
-            //     type: 'primary',
-            //     key: 'details',
-            //     func: (row) => {
-            //         console.log(row)
-            //         openDialog(row, 'details')
-            //     }
-            // },
             {
-                label: '验证',
+                label: '创建打款单',
                 type: 'primary',
                 key: 'details',
                 func: (row) => {
                     console.log(row)
-                    openVerify(row)
+                    paymentSubmit([row.volunteerTakeRecordId])
+                },
+                show: (row) => {
+                    return tabkey.value === '2' && row.appStatus === '2'
+                }
+            },
+            {
+                label: '查看打款结果',
+                type: 'primary',
+                key: 'see',
+                func: (row) => {
+					console.log("TCL: exportFile -> row", row)
+                    dialogPlay.value = true;
+                    dialogRow.value = row;
+                },
+                show: (row) => {
+                    return tabkey.value === '4'
                 }
             },
         ],
@@ -370,18 +479,18 @@ export default ({ proxy, jlzj_area_type }) => {
                 {
                     label: '打款id',
                     prop: 'volunteerPaymentRecordsId',
-                    type: 'input',
+                    type: 'text',
                 },
                 {
                     label: '打款单单号',
                     prop: 'paymentOrderNumber',
-                    type: 'input',
+                    type: 'text',
                 },
                 {
                     label: '打款方式',
                     prop: 'payType',
-                    type: 'select',
-                    options: pay_type
+                    type: 'dict',
+                    dict: pay_type
                 },
                 {
                     label: '打款验证密码',

+ 24 - 14
src/views/order/manage/index.vue

@@ -2,7 +2,7 @@
     <div>
         <ListPage :column="listPageData.tableColumn" :tableApi="listPageData.tableApi" :isSelect="listPageData.isSelect"
             :scopeBtns="listPageData.scopeBtns" :searchBtns="listPageData.searchBtns" ref="userTableRef"
-            v-if="options && options.length > 0"  />
+            v-if="options && options.length > 0" />
         <DialogForm ref="dialogFormRef" :title="title" :column="dialogData.column" @submit="submitForm" />
     </div>
 </template>
@@ -25,7 +25,7 @@ const listPageData = reactive({
         {
             label: '订单ID',
             prop: 'mainOrderId',
-             width: '180px'
+            width: '180px'
         },
         {
             label: '时间',
@@ -120,8 +120,8 @@ const listPageData = reactive({
                 // openDialog(row)
 
                 router.push({
-                    path:"/order-details",
-                    query: {id:row.mainOrderId}
+                    path: "/order-details",
+                    query: { id: row.mainOrderId }
                 });
 
             }
@@ -144,34 +144,35 @@ const dialogData = reactive({
         {
             label: '姓名',
             prop: 'name',
-            type: 'input',
+            type: 'text',
 
         },
         {
             label: '年龄',
             prop: 'age',
-            type: 'input',
+            type: 'text',
 
         },
         {
             label: '电话',
             prop: 'phonenumber',
-            type: 'input',
+            type: 'text',
 
         },
         {
             label: '家庭地址',
             prop: 'address',
-            type: 'input',
+            type: 'text',
 
         },
         {
             label: '服务项目/类别',
-            prop: 'businessManagementId',
-            type: 'cascader',
-            isSearch: true,
-            options: options,
-            props: { label: 'businessName', value: 'id', checkStrictly:true },
+            prop: 'businessTierName',
+            type: 'text',
+            // type: 'cascader',
+            // isSearch: true,
+            // options: options,
+            // props: { label: 'businessName', value: 'id', checkStrictly:true },
 
         },
         {
@@ -189,7 +190,7 @@ const dialogData = reactive({
         {
             label: '技能简介',
             prop: 'skillDescribe',
-            type: 'textarea',
+            type: 'text',
         },
         {
             label: '审核状态',
@@ -209,6 +210,15 @@ const dialogData = reactive({
                 }
             ]
         },
+        {
+            label: '驳回原因:',
+            prop: 'rejectReason',
+            type: 'textarea',
+            show: (form) => {
+                console.log('驳回原因', form);
+                return form.appStatus === '3'
+            }
+        },
     ]
 })
 const { title } = toRefs(dialogData);

+ 27 - 22
src/views/staff/volunteer/manage/index.vue

@@ -65,14 +65,19 @@ const listPageData = reactive({
             label: '家庭地址',
             prop: 'address',
         },
+        {
+            label: '个人头像',
+            prop: 'volunteerPicture',
+            type: 'img',
+        },
         {
             label: '身份证件',
             prop: 'idCardPicture',
             type: 'img',
         },
         {
-            label: '职业证书',
-            prop: 'volunteerPicture',
+            label: '资质证书',
+            prop: 'certificationPicture',
             type: 'img',
         },
         {
@@ -146,45 +151,50 @@ const dialogData = reactive({
         {
             label: '姓名',
             prop: 'name',
-            type: 'input',
+            type: 'text',
 
         },
         {
             label: '年龄',
             prop: 'age',
-            type: 'input',
+            type: 'text',
 
         },
         {
             label: '电话',
             prop: 'phonenumber',
-            type: 'input',
+            type: 'text',
 
         },
         {
             label: '家庭地址',
             prop: 'address',
-            type: 'input',
+            type: 'text',
         },
         {
             label: '服务项目/类别',
             prop: 'businessTierName',
-            type: 'input',
-            options: options,
-            props: { label: 'businessName', value: 'id', checkStrictly: true },
+            type: 'text',
+            // options: options,
+            // props: { label: 'businessName', value: 'id', checkStrictly: true },
         },
         {
             label: '服务时长',
             prop: 'businessDuration',
-            type: 'input',
+            type: 'text',
             dese: '分钟'
         },
         {
             label: '服务价格',
             prop: 'businessPrice',
-            type: 'input',
+            type: 'text',
             dese: '元'
         },
+        {
+            label: '身份证件',
+            prop: 'idCardPicture',
+            type: 'img',
+        },
         {
             label: '职业证书',
             prop: 'certificationPicture',
@@ -193,7 +203,7 @@ const dialogData = reactive({
         {
             label: '技能简介',
             prop: 'skillDescribe',
-            type: 'textarea',
+            type: 'text',
         },
         {
             label: '审核状态',
@@ -236,8 +246,10 @@ const tabList = [
         name: '1',
     },
 ]
-const openDialog = (row, type) => {
-    console.log('row', row);
+
+const openDialog = (data, type) => {
+
+    const row = JSON.parse(JSON.stringify(data));
     try {
         const disabledData = {
             name: true,
@@ -256,6 +268,7 @@ const openDialog = (row, type) => {
 
         } else {
             disabledData['appStatus'] = true;
+            disabledData['rejectReason'] = true;
             //查看详情
             title.value = '查看详情'
         }
@@ -270,14 +283,6 @@ const openDialog = (row, type) => {
         dialogFormRef.value.handleDialog(true);
     }
 }
-const handleDelete = (ids) => {
-    proxy.$modal.confirm('是否确认删除角色编号为"' + ids + '"的数据项?').then(function () {
-        return true
-    }).then(() => {
-        userTableRef.value.resetForm();
-        proxy.$modal.msgSuccess("删除成功");
-    }).catch(() => { });
-}
 
 const submitForm = async (parmas) => {
 

+ 2 - 3
vite.config.js

@@ -37,10 +37,9 @@ export default defineConfig(({ mode, command }) => {
         },
         // https://cn.vitejs.dev/config/#server-proxy
         '/dev-api': {
-          // target: 'http://localhost:9527',
-          target: 'http://192.168.100.95:9527',
+          // target: 'http://192.168.100.95:9527',
           // target: 'https://zybooks.tech/prod-api', 
-          // target: 'http://192.168.100.112:9527',
+          target: 'http://192.168.100.101:9527',
           changeOrigin: true,
           rewrite: (p) => p.replace(/^\/dev-api/, '')
         },