Bladeren bron

结算'

chenjj 1 dag geleden
bovenliggende
commit
e155a9b954

+ 1 - 1
README.md

@@ -39,7 +39,7 @@ yarn dev
 ## 内置功能
 
 1.  用户管理:用户是系统操作者,该功能主要完成系统用户配置。
-2.  部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
+2.  区域管理:配置系统组织机构(公司、区域、小组),树结构展现支持数据权限。
 3.  岗位管理:配置系统用户所属担任职务。
 4.  菜单管理:配置系统菜单,操作权限,按钮权限标识等。
 5.  角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。

+ 1 - 1
src/api/staff/user.js

@@ -127,7 +127,7 @@ export function updateAuthRole(data) {
   })
 }
 
-// 查询部门下拉树结构
+// 查询区域下拉树结构
 export function deptTreeSelect() {
   return request({
     url: '/system/user/deptTree',

+ 1 - 1
src/api/system/classification.js

@@ -1,6 +1,6 @@
 import request from '@/utils/request'
 
-// 查询部门列表
+// 查询区域列表
 export function listClass(query) {
   return request({
     url: '/core/business/management/getTreeList?parentId=0',

+ 6 - 6
src/api/system/dept.js

@@ -1,6 +1,6 @@
 import request from '@/utils/request'
 
-// 查询部门列表
+// 查询区域列表
 export function listDept(query) {
   return request({
     url: '/system/dept/list',
@@ -9,7 +9,7 @@ export function listDept(query) {
   })
 }
 
-// 查询部门列表(排除节点)
+// 查询区域列表(排除节点)
 export function listDeptExcludeChild(deptId) {
   return request({
     url: '/system/dept/list/exclude/' + deptId,
@@ -17,7 +17,7 @@ export function listDeptExcludeChild(deptId) {
   })
 }
 
-// 查询部门详细
+// 查询区域详细
 export function getDept(deptId) {
   return request({
     url: '/system/dept/' + deptId,
@@ -25,7 +25,7 @@ export function getDept(deptId) {
   })
 }
 
-// 新增部门
+// 新增区域
 export function addDept(data) {
   return request({
     url: '/system/dept',
@@ -34,7 +34,7 @@ export function addDept(data) {
   })
 }
 
-// 修改部门
+// 修改区域
 export function updateDept(data) {
   return request({
     url: '/system/dept',
@@ -43,7 +43,7 @@ export function updateDept(data) {
   })
 }
 
-// 删除部门
+// 删除区域
 export function delDept(deptId) {
   return request({
     url: '/system/dept/' + deptId,

+ 1 - 1
src/api/system/role.js

@@ -110,7 +110,7 @@ export function authUserSelectAll(data) {
   })
 }
 
-// 根据角色ID查询部门树结构
+// 根据角色ID查询区域树结构
 export function deptTreeSelect(roleId) {
   return request({
     url: '/system/role/deptTree/' + roleId,

+ 1 - 1
src/api/system/user.js

@@ -127,7 +127,7 @@ export function updateAuthRole(data) {
   })
 }
 
-// 查询部门下拉树结构
+// 查询区域下拉树结构
 export function deptTreeSelect() {
   return request({
     url: '/system/user/deptTree',

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

@@ -14,7 +14,7 @@ const useUserStore = defineStore(
       roles: [],
       permissions: [],
       phonenumber:'',
-      areaType:'', //部门类型
+      areaType:'', //区域类型
       user:{},
     }),
     actions: {

+ 27 - 2
src/views/components/ListPage/Search.vue

@@ -41,8 +41,28 @@
         </el-form>
         <el-row :gutter="10" class="mb8">
             <el-col :span="1.5" v-for="item in searchBtns" :key="item.key">
-                <el-button :type="item.type || 'primary'" plain :icon="item.icon" @click="() => item.func(formInline)"
-                    v-if="item.show ? item.show() : true">{{ item.label }}</el-button>
+                <!-- <el-button :type="item.type || 'primary'" plain :icon="item.icon" @click="() => item.func(formInline)"
+                    v-if="item.show ? item.show() : true">{{ item.label }}</el-button> -->
+
+
+                    <template v-if="item.show">
+                                <template v-if="item.hasPermi">
+                                    <el-button  :type="item.type || 'primary'" :icon="item.icon"
+                                    @click="() => item.func(formInline)" plain v-if="item.show(tabsValue)"> {{ item.label }}</el-button>
+                                </template>
+                                <template v-else>
+                                    <el-button   :type="item.type || 'primary'" :icon="item.icon"
+                                    @click="() => item.func(formInline)" plain v-if="item.show(tabsValue)"> {{ item.label }}</el-button>
+                                </template>
+                           </template>
+                           <template v-else-if="item.hasPermi">
+                                <el-button   :type="item.type || 'primary'" :icon="item.icon"
+                                @click="() => item.func(formInline)" plain v-hasPermi="item.hasPermi"> {{ item.label }}</el-button>
+                           </template>
+                           <template v-else>
+                                <el-button  :type="item.type || 'primary'" :icon="item.icon"
+                                @click="() => item.func(formInline)"  plain> {{ item.label }}</el-button>
+                           </template>
             </el-col>
         </el-row>
     </div>
@@ -61,7 +81,12 @@ const props = defineProps({
     searchBtns: {
         type: Array,
         default: [],
+    },
+    tabsValue:{
+        type: String,
+        default: '',
     }
+
 })
 
 const emit = defineEmits(['submit', 'reset'])

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

@@ -4,7 +4,7 @@
             <el-tab-pane v-for="item in tabList" :key="item.name" :label="item.title" :name="item.name"></el-tab-pane>
         </el-tabs>
         <div class="search-div">
-            <Search :column="searchColumn" @submit="searchSubmit" @reset="resetForm" :searchBtns="searchBtns"/>
+            <Search :column="searchColumn" @submit="searchSubmit" @reset="resetForm" :searchBtns="searchBtns" :tabsValue="tabsValue"/>
         </div>
         <div class="table-div">
             <Table :isScope="isScope" :tableKey="tableKey" ref="tableRef" :column="tableColumn" :data="tableData.list" :loading="loading" :scopeBtns="scopeBtns" :isSelect="isSelect" />
@@ -167,7 +167,8 @@ onMounted(() => {
 
 defineExpose({
     ids,
-    resetForm
+    resetForm,
+    tabsValue
 })
 </script>
 

+ 30 - 30
src/views/finance/examine/useData.js

@@ -202,24 +202,24 @@ export default ({proxy,jlzj_area_type}) => {
             ]
         },
         searchBtns:[
-            {
-                label: '批量审核',
-                func: () => {
-                    const ids = userTableRef.value.ids;
-                    console.log('批量删除', ids)
-                    ids.length > 0 && openDialog(ids)
-                },
-                key: 'applicant',
-                type: 'primary'
-            },
-            {
-                label: '导出',
-                func: (parmas) => {
-                    exportFile(parmas);
-                },
-                key: 'export',
-                type: 'primary'
-            },
+            // {
+            //     label: '批量审核',
+            //     func: () => {
+            //         const ids = userTableRef.value.ids;
+            //         console.log('批量删除', ids)
+            //         ids.length > 0 && openDialog(ids)
+            //     },
+            //     key: 'applicant',
+            //     type: 'primary'
+            // },
+            // {
+            //     label: '导出',
+            //     func: (parmas) => {
+            //         exportFile(parmas);
+            //     },
+            //     key: 'export',
+            //     type: 'primary'
+            // },
         ],
         scopeBtns:[
             {
@@ -234,18 +234,18 @@ export default ({proxy,jlzj_area_type}) => {
                     return row.auditorStatus === '10'
                 }
             },
-            {
-                label: '查看详情',
-                type: 'primary',
-                key: 'details',
-                func: (row) => {
-                    console.log(row)
-                    router.push({
-                        path: "/order-details",
-                        query: { id: row.mainOrderId }
-                    });
-                }
-            },
+            // {
+            //     label: '查看详情',
+            //     type: 'primary',
+            //     key: 'details',
+            //     func: (row) => {
+            //         console.log(row)
+            //         router.push({
+            //             path: "/order-details",
+            //             query: { id: row.mainOrderId }
+            //         });
+            //     }
+            // },
         ]
        
     }

+ 15 - 23
src/views/finance/settlement/index.vue

@@ -1,10 +1,10 @@
 <template>
     <div>
         <ListPage :column="tableColumn" :tableApi="settlementOrderList" :isSelect="true" :scopeBtns="scopeBtns"
-            :searchBtns="searchBtns" ref="userTableRef" tableKey="orderId" :tabList="tabList"
-            :tabsearchKey="tabKey" defaultTab="10" />
-        <DialogForm ref="dialogFormRef" :title="dialogType ==='settlement'?costdialogData.title : dialogData.title" 
-        :column="dialogType ==='settlement'?costdialogData.column : dialogData.column" 
+            :searchBtns="searchBtns" ref="userTableRef" tableKey="orderId" :tabList="tabList" :tabsearchKey="tabKey"
+            defaultTab="10" />
+            <DialogForm ref="dialogFormRef" :title="dialogType ==='settlement'?costdialogData.title : dialogData.title" 
+            :column="dialogType ==='settlement'?costdialogData.column : dialogData.column" 
         @submit="submitForm"
             labelWidth="120px" />
     </div>
@@ -15,39 +15,31 @@ import { ref, computed } from 'vue';
 import ListPage from '@/views/components/ListPage/index.vue';
 import DialogForm from '@/views/components/DialogForm/index.vue';
 import { settlementOrderList } from "@/api/finance/settlement.js";
+import useRegional from './useRegional';
 import useUserStore from '@/store/modules/user'
-
 import useData from './useData';
-import usePlatform from './usePlatform';
-import useRegional from './useRegional';
-import useService from './useService';
 const { proxy } = getCurrentInstance();
 const userStore = useUserStore();
 const jlzj_area_type = ref(userStore.user.dept.areaType);// 0: 平台 3:区域公司 4:服务中心
-const useFun ={
-    "0":usePlatform,
-    "3":useRegional,
-    "4":useService,
-}
-const {
-    tableColumn,
-    tabList,
-    tabKey,
-} = useFun[jlzj_area_type.value](proxy);
-
 const {
     dialogFormRef,
     userTableRef,
+    tabList,
+    tabKey,
+    submitForm,
     searchBtns,
+    tableColumn,
     scopeBtns,
-    dialogData,
+    dialogType
+} = useRegional({ proxy, jlzj_area_type });
+const {
     costdialogData,
-    dialogType,
-    submitForm
+    dialogData
 } = useData({ proxy, jlzj_area_type });
-console.log('tableColumn', tableColumn);
 
 
+console.log('tableColumn', tableColumn);
+
 
 
 

+ 48 - 0
src/views/finance/settlement/service.vue

@@ -0,0 +1,48 @@
+<template>
+    <div>
+        <ListPage :column="tableColumn" :tableApi="settlementOrderList" :isSelect="true" :scopeBtns="scopeBtns"
+            :searchBtns="searchBtns" ref="userTableRef" tableKey="orderId" :tabList="tabList" :tabsearchKey="tabKey"
+            defaultTab="10" />
+            <DialogForm ref="dialogFormRef" :title="dialogType ==='settlement'?costdialogData.title : dialogData.title" 
+            :column="dialogType ==='settlement'?costdialogData.column : dialogData.column" 
+        @submit="submitForm"
+            labelWidth="120px" />
+    </div>
+</template>
+
+<script setup>
+import { ref, computed } from 'vue';
+import ListPage from '@/views/components/ListPage/index.vue';
+import DialogForm from '@/views/components/DialogForm/index.vue';
+import { settlementOrderList } from "@/api/finance/settlement.js";
+import useService from './useService';
+import useUserStore from '@/store/modules/user'
+import useData from './useData';
+const { proxy } = getCurrentInstance();
+const userStore = useUserStore();
+const jlzj_area_type = ref(userStore.user.dept.areaType);// 0: 平台 3:区域公司 4:服务中心
+const {
+    dialogFormRef,
+    userTableRef,
+    tabList,
+    tabKey,
+    submitForm,
+    searchBtns,
+    tableColumn,
+    scopeBtns,
+    dialogType
+} = useService({ proxy, jlzj_area_type });
+const {
+    costdialogData,
+    dialogData
+} = useData({ proxy, jlzj_area_type });
+
+
+console.log('tableColumn', tableColumn);
+
+
+
+
+</script>
+
+<style lang='scss' scoped></style>

+ 2 - 206
src/views/finance/settlement/useData.js

@@ -1,213 +1,9 @@
 import { ref, computed } from "vue";
-import { 
-    applyOrderSettlement,
-    serviceSettlement,regionalsettlement
- } from "@/api/finance/settlement.js";
-
- const PING_TAI = '0'; //平台
- const QU_YU = '3'; //区域
- const FU_WU_ZHONG_XIN = '4'; //服务中心
-
 
 //功能
-export default ({ proxy, jlzj_area_type }) => {
-    const router = useRouter();
-    const dialogFormRef = ref(null);
-    const userTableRef = ref(null);
-
-    const dialogType = ref('applyfor');
-    //打开弹窗 applyfor:申请  settlement:结算
-    const openDialog = (data, type,row) => {
-		console.log("TCL: openDialog -> data", data,row)
-        try {
-            dialogType.value = type;
-
-            let params = { mainOrderIds: data };
-            let disabledData = {};
-
-            // if (type === 'applyfor') {
-            //     params = { mainOrderIds: data }
-            // }
-            // if (type === 'settlement') {
-            //     params = { mainOrderIds: data }
-            // }
-
-            dialogFormRef.value.initForm(params, disabledData)
-        } catch (error) {
-            console.log('error', error);
-        } finally {
-            console.log('dialogFormRef.value', dialogFormRef.value);
-            dialogFormRef.value.handleDialog(true);
-        }
-    }
-    //导出
-    const exportFile = async (parmas) => {
-        console.log("TCL: exportFile -> parmas", parmas)
-        // try {
-        //     proxy.download("core/orderSettlementApplication/export",{
-        //         ...queryParams.value,
-        //     }, `订单费用结算_${new Date().getTime()}.xlsx`);
-        // } catch (error) { 
-        // }
-    }
-
-    const applyforSubmit = (data) => {
-		console.log("TCL: applyforSubmit -> data", data)
-		
-        return new Promise(async (resolve, reject) => {
-            const parmas = {
-                secondOrderIds: data.mainOrderIds,
-                payeeMethod: data.payeeMethod,
-                payeeAccount: data.payeeAccount,
-                payeeBankName: data.payeeBankName,
-                payeeName: data.payeeName,
-                payeeRemark: data.payeeRemark,
-              
-            }
-            const res = await applyOrderSettlement(parmas);
-            if (res.code === 200) {
-                proxy.$modal.msgSuccess("审核成功");
-                resolve()
-            }
-            proxy.$modal.msgSuccess(res.msg);
-            reject()
-        })
-    }
-
-    const settlementSubmit = async (data) => {
-		console.log("TCL: settlementSubmit -> data", data)
-        const parmas = {
-            secondOrderIds: data.mainOrderIds,
-            payerMethod: data.payerMethod,
-            payerAccount: data.payerAccount,
-            payerBankName: data.payerBankName,
-            payerName: data.payerName,
-            payerRemark: data.payerRemark,
-            payerTime:data.payerTime
-        }
-        let res = null;
-        //平台结算区域的申请
-        if (jlzj_area_type.value === PING_TAI ) {
-            res = await regionalsettlement(parmas)
-        }
-
-        //区域结算服务中心
-        if (jlzj_area_type.value === QU_YU) {
-            res = await serviceSettlement(parmas)
-        
-        }
-        
-        if (res.code === 200) {
-            proxy.$modal.msgSuccess("审核成功");
-            return;
-        }
-    }
-
-    //申请提交
-    const submitForm = async (data) => {
-
-        try {
-            console.log('submit', data,dialogType.value);
-            //申请
-            if (dialogType.value === 'applyfor') {
-                await applyforSubmit(data);
-            }
-            if (dialogType.value === 'settlement') {
-                await settlementSubmit(data);
-            }
-        } catch (error) {
-            console.log('error', error);
-        } finally {
-            userTableRef.value.resetForm();
-            dialogFormRef.value.handleDialog(false);
-        }
-    }
-
-
-
-
+export default () => {
     return {
-        dialogFormRef,
-        userTableRef,
-        dialogType,
-        openDialog,
-        exportFile,
-        submitForm,
-        searchBtns: [
-            {
-                label: '批量申请',
-                func: () => {
-                    const ids = userTableRef.value.ids;
-                    console.log('批量删除', ids)
-                    ids.length > 0 && openDialog(ids, 'applyfor')
-                },
-                key: 'applicant',
-                type: 'primary',
-                hasPermi:["finance:apply"] 
-            },
-            {
-                label: '批量费用结算',
-                func: () => {
-                    const ids = userTableRef.value.ids;
-                    console.log('批量删除', ids)
-                    ids.length > 0 && openDialog(ids, 'settlement')
-                },
-                key: 'settlement',
-                type: 'primary',
-                hasPermi:["finance:settlement"] 
-            },
-            {
-                label: '导出',
-                func: (parmas) => {
-                    exportFile(parmas);
-                },
-                key: 'export',
-                type: 'primary'
-            },
-        ],
-        scopeBtns: [
-            {
-                label: '结算申请',
-                type: 'primary',
-                key: 'examine',
-                func: (row) => {
-                    console.log(row)
-                    openDialog([row.orderId], 'applyfor')
-                },
-                hasPermi:["finance:apply"],
-                show:(row)=>{
-					console.log("TCL: exportFile -> row", row.orderStatus === '4')
-                    return row.areaSettlementStatus === '10'
-                }
-            },
-            {
-                label: '费用结算',
-                type: 'primary',
-                key: 'examine',
-                func: (row) => {
-                    console.log(row)
-                    openDialog([row.orderId], 'settlement')
-                },
-                hasPermi:["finance:settlement"],
-                show:(row)=>{
-					console.log("TCL: exportFile -> row", row.orderStatus === '4')
-                    return row.areaSettlementStatus === '40'
-                }
-            },
-            {
-                label: '查看详情',
-                type: 'primary',
-                key: 'details',
-                func: (row) => {
-                    console.log(row)
-                    router.push({
-                        path: "/order-details",
-                        query: { id: row.orderId }
-                    });
-                },
-                hasPermi:["finance:details"] 
-            },
-        ],
+       
         dialogData: {
             title: '结算申请',
             column: [

+ 0 - 110
src/views/finance/settlement/usePlatform.js

@@ -1,110 +0,0 @@
-import { ref,computed } from "vue";
-// 平台
-export default (proxy) => {
-
-    const { 
-        lrr_service_status,
-        area_settlement_status
-     } = proxy.useDict("lrr_service_status","area_settlement_status");
-
-     const tabList =computed(() => {
-        let data = []
-        data = area_settlement_status.value.map(item => {
-            return {
-                title: item.label,
-                name: item.value
-            }
-        })
-        return data || [];
-    })
-
-    return {
-        tableColumn:ref(
-            [
-                {
-                    label: '订单号',
-                    prop: 'outTradeNo',
-                    type: 'input',
-                    isSearch: true,
-                    width:'200px',
-                },
-                {
-                    label: '订单开始时间',
-                    prop: 'orderTime',
-                    width:'160px',
-                    isSearch: true,
-                    type: 'date',
-                    keys: ['orderTimeStart', 'orderTimeEnd'],
-                },
-                {
-                    label: '订单完成时间',
-                    prop: 'serviceEndTime',
-                    width:'160px',
-                    isSearch: true,
-                    type: 'date',
-                    keys: ['serviceEndTimeStart', 'serviceEndTimeEnd'],
-                },
-                {
-                    label: '用户名称',
-                    prop: 'userNickName',
-                    width:'140px',
-                    type: 'input',
-                    isSearch: true
-                },
-                {
-                    label: '志愿者名称',
-                    prop: 'volunteerName',
-                    width:'140px',
-                    type: 'input',
-                    isSearch: true
-                },
-                {
-                    label: '服务项目',
-                    prop: 'businessTierName',
-                    width:'170px'
-                },
-                {
-                    label: '订单总金额(元)',
-                    prop: 'orderTotalPrice',
-                    width:'140px'
-                },
-                {
-                    label: '订单状态',
-                    prop: 'orderStatus',
-                    type: 'dict',
-                    dict: lrr_service_status,
-                    isSearch: true,
-                    width:'150px'
-                },
-                {
-                    label: '区域公司',
-                    prop: 'areaName',
-                    type: 'input',
-                    isSearch: true,
-                    width:'150px'
-                },
-                {
-                    label: '区域公司抽成金额',
-                    prop: 'areaDistributionAmount',
-                     width:'150px'
-                },
-                {
-                    label: '区域公司结算状态',
-                    prop: 'areaSettlementStatus',
-                    type: 'dict',
-                    dict: area_settlement_status,
-                    width:'150px',
-                },
-                {
-                    label: '区域公司结算时间',
-                    prop: 'areaSettlementTime',
-                    width:'160px'
-                }
-            ]
-            ),
-      
-        tabList,
-        tabKey:'areaSettlementStatus'
-      
-    }
-}

+ 178 - 26
src/views/finance/settlement/useRegional.js

@@ -1,14 +1,26 @@
-import { ref,computed } from "vue";
 // 区域
-export default (proxy) => {
+import { ref, computed } from "vue";
+import {
+    applyOrderSettlement,
+    serviceSettlement, regionalsettlement
+} from "@/api/finance/settlement.js";
 
-    const { 
+const PING_TAI = '0'; //平台
+const QU_YU = '3'; //区域
+const FU_WU_ZHONG_XIN = '4'; //服务中心
+
+export default ({ proxy, jlzj_area_type }) => {
+    const dialogFormRef = ref(null);
+    const userTableRef = ref(null);
+    const dialogType = ref('applyfor');
+
+    const {
         lrr_service_status,
-        area_settlement_status,
-        service_centre_settlement_stauts
-     } = proxy.useDict("lrr_service_status","area_settlement_status","service_centre_settlement_stauts");
+        service_centre_settlement_stauts,
+        area_settlement_status
+    } = proxy.useDict("lrr_service_status", "service_centre_settlement_stauts", "area_settlement_status");
 
-     const tabList =computed(() => {
+    const tabList = computed(() => {
         let data = []
         data = area_settlement_status.value.map(item => {
             return {
@@ -18,20 +30,134 @@ export default (proxy) => {
         })
         return data || [];
     })
+    const openDialog = (data, type) => {
+        try {
+            dialogType.value = type;
+
+
+            let params = { mainOrderIds: data };
+            let disabledData = {};
+
+            dialogFormRef.value.initForm(params, disabledData)
+        } catch (error) {
+            console.log('error', error);
+        } finally {
+            console.log('dialogFormRef.value', dialogFormRef.value);
+            dialogFormRef.value.handleDialog(true);
+        }
+    }
+    //结算申请
+    const applyforSubmit = async (data) => {
+
+        const parmas = {
+            secondOrderIds: data.mainOrderIds,
+            payeeMethod: data.payeeMethod,
+            payeeAccount: data.payeeAccount,
+            payeeBankName: data.payeeBankName,
+            payeeName: data.payeeName,
+            payeeRemark: data.payeeRemark,
+
+        }
+        const res = await applyOrderSettlement(parmas);
+        if (res.code === 200) {
+            proxy.$modal.msgSuccess("审核成功");
+            userTableRef.value.resetForm();
+            dialogFormRef.value.handleDialog(false);
+            return;
+        }
+    }
+
+    //区域费用结算
+    const handleRegionalSettlement = async (data) => {
+        try {
+            const parmas = {
+                secondOrderIds: data.mainOrderIds,
+                payerMethod: data.payerMethod,
+                payerAccount: data.payerAccount,
+                payerBankName: data.payerBankName,
+                payerName: data.payerName,
+                payerRemark: data.payerRemark,
+                payerTime: data.payerTime
+            }
+            const res = await regionalsettlement(parmas);
+            if (res.code === 200) {
+                proxy.$modal.msgSuccess("操作成功");
+                userTableRef.value.resetForm();
+                dialogFormRef.value.handleDialog(false);
+                return;
+            }
+        } catch (error) {
+            console.log("TCL: handleRegionalSettlement -> error", error)
+
+        }
+    }
+    //弹窗申请提交
+    const submitForm = async (data) => {
+        try {
+            console.log('submit', data);
+            //申请
+            if (dialogType.value === 'applyfor') {
+                await applyforSubmit(data);
+            }
 
+            if (dialogType.value === 'settlement') {
+                await handleRegionalSettlement(data);
+            }
+        } catch (error) {
+            console.log('error', error);
+        }
+    }
     return {
-        tableColumn:ref([
+        dialogFormRef,
+        userTableRef,
+        tabList,
+        tabKey: 'areaSettlementStatus',
+        submitForm,
+        searchBtns: [
+            {
+                label: '批量申请',
+                func: () => {
+                    const ids = userTableRef.value.ids;
+                    console.log('批量删除', ids)
+                    ids.length > 0 && openDialog(ids, 'applyfor')
+                },
+                key: 'applicant',
+                type: 'primary',
+                // hasPermi:["finance:apply"] 
+                show: (tabsValue) => {
+					console.log("TCL: tabsValue",jlzj_area_type.value, tabsValue)
+                    return jlzj_area_type.value !== PING_TAI &&  tabsValue === '10'
+                } 
+            },
+            {
+                label: '批量费用结算',
+                func: () => {
+                    const ids = userTableRef.value.ids;
+                    console.log('批量删除', ids)
+                    ids.length > 0 && openDialog(ids, 'settlement')
+                },
+                key: 'settlement',
+                type: 'primary',
+                show: (tabsValue) => {
+                    
+                    return jlzj_area_type.value === PING_TAI &&  tabsValue === '40'
+                }
+                // hasPermi:["finance:settlement"] 
+            },
+        ],
+        dialogType,
+        tableColumn: ref([
             {
                 label: '订单号',
                 prop: 'outTradeNo',
                 type: 'input',
                 isSearch: true,
-                width:'200px',
+                width: '200px',
             },
             {
                 label: '订单时间',
                 prop: 'orderTime',
-                width:'160px',
+                width: '160px',
                 isSearch: true,
                 type: 'date',
                 keys: ['serviceCompleteStartTime', 'serviceCompleteEndTime'],
@@ -39,7 +165,7 @@ export default (proxy) => {
             {
                 label: '订单完成时间',
                 prop: 'serviceEndTime',
-                width:'160px',
+                width: '160px',
                 isSearch: true,
                 type: 'date',
                 keys: ['serviceCompleteStartTime', 'serviceCompleteEndTime'],
@@ -47,26 +173,26 @@ export default (proxy) => {
             {
                 label: '用户名称',
                 prop: 'userNickName',
-                width:'140px',
+                width: '140px',
                 type: 'input',
                 isSearch: true
             },
             {
                 label: '志愿者名称',
                 prop: 'volunteerName',
-                width:'140px',
+                width: '140px',
                 type: 'input',
                 isSearch: true
             },
             {
                 label: '服务项目',
                 prop: 'businessTierName',
-                width:'170px'
+                width: '170px'
             },
             {
                 label: '订单总金额(元)',
                 prop: 'orderTotalPrice',
-                width:'140px'
+                width: '140px'
             },
             {
                 label: '订单状态',
@@ -74,48 +200,74 @@ export default (proxy) => {
                 type: 'dict',
                 dict: lrr_service_status,
                 isSearch: false,
-                width:'100px'
+                width: '100px'
             },
             {
                 label: '服务中心',
                 prop: 'serviceCentreName',
                 type: 'input',
                 isSearch: true,
-                width:'150px'
+                width: '150px'
             },
             {
                 label: '抽成金额',
                 prop: 'areaDistributionAmount',
-                 width:'150px'
+                width: '150px'
             },
             {
                 label: '结算状态',
                 prop: 'areaSettlementStatus',
                 type: 'dict',
                 dict: area_settlement_status,
-                width:'150px',
+                width: '150px',
             },
             {
                 label: '结算时间',
                 prop: 'areaSettlementTime',
-                width:'160px',
+                width: '160px',
             },
             {
                 label: '服务中心抽成金额',
                 prop: 'serviceCentreDistributionAmount',
-                width:'150px',
+                width: '150px',
             },
             {
                 label: '服务中心结算状态',
                 prop: 'serviceCentreSettlementStatus',
-                width:'100px',
+                width: '130px',
                 type: 'dict',
                 dict: service_centre_settlement_stauts,
+                isSearch: true,
             },
         ]),
-       
-        tabList,
-        tabKey:'areaSettlementStatus'
-      
+        scopeBtns: [
+            {
+                label: '结算申请',
+                type: 'primary',
+                key: 'examine',
+                func: (row) => {
+                    console.log(row)
+                    openDialog([row.orderId], 'applyfor')
+                },
+                hasPermi: ["finance:apply"],
+                show: (row) => {
+                    return row.areaSettlementStatus === '10' && jlzj_area_type.value !== PING_TAI
+                }
+            },
+            {
+                label: '费用结算',
+                type: 'primary',
+                key: 'examine',
+                func: (row) => {
+                    console.log(row)
+                    openDialog([row.orderId], 'settlement')
+                },
+                hasPermi: ["finance:settlement"],
+                show: (row) => {
+                    return row.areaSettlementStatus === '40' && jlzj_area_type.value === PING_TAI
+                }
+            },
+
+        ]
     }
 }

+ 174 - 19
src/views/finance/settlement/useService.js

@@ -1,13 +1,25 @@
 // 服务中心
-import { ref,computed } from "vue";
-export default (proxy) => {
+import { ref, computed } from "vue";
+import {
+    applyOrderSettlement,
+    serviceSettlement, regionalsettlement
+} from "@/api/finance/settlement.js";
 
-    const { 
+const PING_TAI = '0'; //平台
+const QU_YU = '3'; //区域
+const FU_WU_ZHONG_XIN = '4'; //服务中心
+
+export default ({ proxy, jlzj_area_type }) => {
+    const dialogFormRef = ref(null);
+    const userTableRef = ref(null);
+    const dialogType = ref('applyfor');
+
+    const {
         lrr_service_status,
         service_centre_settlement_stauts
-     } = proxy.useDict("lrr_service_status","service_centre_settlement_stauts");
+    } = proxy.useDict("lrr_service_status", "service_centre_settlement_stauts");
 
-     const tabList =computed(() => {
+    const tabList = computed(() => {
         let data = []
         data = service_centre_settlement_stauts.value.map(item => {
             return {
@@ -17,20 +29,137 @@ export default (proxy) => {
         })
         return data || [];
     })
+    const openDialog = (data,type) => {
+        try {
+            dialogType.value = type;
+
+
+            let params = { mainOrderIds: data };
+            let disabledData = {};
+
+            dialogFormRef.value.initForm(params, disabledData)
+        } catch (error) {
+            console.log('error', error);
+        } finally {
+            console.log('dialogFormRef.value', dialogFormRef.value);
+            dialogFormRef.value.handleDialog(true);
+        }
+    }
+
+    //结算申请
+    const applyforSubmit = async(data) => {
+
+        const parmas = {
+            secondOrderIds: data.mainOrderIds,
+            payeeMethod: data.payeeMethod,
+            payeeAccount: data.payeeAccount,
+            payeeBankName: data.payeeBankName,
+            payeeName: data.payeeName,
+            payeeRemark: data.payeeRemark,
+
+        }
+        const res = await applyOrderSettlement(parmas);
+        if (res.code === 200) {
+            proxy.$modal.msgSuccess("审核成功");
+            userTableRef.value.resetForm();
+            dialogFormRef.value.handleDialog(false);
+            return
+        }
+        proxy.$modal.msgError(res.msg);
+    }
+    //服务中心费用结算
+    const handleServiceSettlement = async (data) => {
+        try {
+            const parmas = {
+                secondOrderIds: data.mainOrderIds,
+                payerMethod: data.payerMethod,
+                payerAccount: data.payerAccount,
+                payerBankName: data.payerBankName,
+                payerName: data.payerName,
+                payerRemark: data.payerRemark,
+                payerTime: data.payerTime
+            }
+            const res = await serviceSettlement(parmas)
+            if (res.code === 200) {
+                proxy.$modal.msgSuccess("操作成功");
+                userTableRef.value.resetForm();
+                dialogFormRef.value.handleDialog(false);
+                return
+            }
+            proxy.$modal.msgError(res.msg);
+        } catch (error) {
+            console.log("TCL: handleRegionalSettlement -> error", error)
+
+        }
+    }
+    //弹窗申请提交
+    const submitForm = async (data) => {
+        try {
+            console.log('submit', data);
+            //申请
+            if (dialogType.value === 'applyfor') {
+                await applyforSubmit(data);
+            }
+
+            if (dialogType.value === 'settlement') {
+                await handleServiceSettlement(data);
+            }
+        } catch (error) {
+            console.log('error', error);
+        } finally {
+            // userTableRef.value.resetForm();
+            // dialogFormRef.value.handleDialog(false);
+        }
+    }
 
     return {
-        tableColumn:ref([
+        dialogFormRef,
+        userTableRef,
+        tabList,
+        tabKey: 'serviceCentreSettlementStatus',
+        submitForm,
+        searchBtns: [
+            {
+                label: '批量申请',
+                func: () => {
+                    const ids = userTableRef.value.ids;
+                    console.log('批量删除', ids)
+                    ids.length > 0 && openDialog(ids, 'applyfor')
+                },
+                key: 'applicant',
+                type: 'primary',
+                show: (tabsValue) => {
+                    return jlzj_area_type.value === FU_WU_ZHONG_XIN &&  tabsValue === '10'
+                }
+            },
+            {
+                label: '批量费用结算',
+                func: () => {
+                    const ids = userTableRef.value.ids;
+                    console.log('批量删除', ids)
+                    ids.length > 0 && openDialog(ids, 'settlement')
+                },
+                key: 'settlement',
+                type: 'primary',
+                show: (tabsValue) => {
+                    return jlzj_area_type.value !== FU_WU_ZHONG_XIN &&  tabsValue === '40'
+                }
+                // hasPermi:["finance:settlement"] 
+            },
+        ],
+        dialogType,
+        tableColumn: ref([
             {
                 label: '订单号',
                 prop: 'outTradeNo',
                 type: 'input',
                 isSearch: true,
-                width:'180px',
+                width: '180px',
             },
             {
                 label: '订单开始时间',
                 prop: 'orderTime',
-                width:'160px',
+                width: '160px',
                 isSearch: true,
                 type: 'date',
                 keys: ['orderTimeStart', 'orderTimeEnd'],
@@ -38,7 +167,7 @@ export default (proxy) => {
             {
                 label: '订单完成时间',
                 prop: 'serviceEndTime',
-                width:'160px',
+                width: '160px',
                 isSearch: true,
                 type: 'date',
                 keys: ['serviceEndTimeStart', 'serviceEndTimeEnd'],
@@ -46,26 +175,26 @@ export default (proxy) => {
             {
                 label: '用户名称',
                 prop: 'userNickName',
-                width:'140px',
+                width: '140px',
                 type: 'input',
                 isSearch: true
             },
             {
                 label: '志愿者名称',
                 prop: 'volunteerName',
-                width:'140px',
+                width: '140px',
                 type: 'input',
                 isSearch: true
             },
             {
                 label: '服务项目',
                 prop: 'businessTierName',
-                width:'170px'
+                width: '170px'
             },
             {
                 label: '订单总金额(元)',
                 prop: 'orderTotalPrice',
-                width:'140px'
+                width: '140px'
             },
             {
                 label: '订单状态',
@@ -77,23 +206,49 @@ export default (proxy) => {
             {
                 label: '抽成金额',
                 prop: 'serviceCentreDistributionAmount',
-                width:'150px'
+                width: '150px'
             },
             {
                 label: '结算状态',
                 prop: 'serviceCentreSettlementStatus',
                 type: 'dict',
                 dict: service_centre_settlement_stauts,
-                width:'150px',
+                width: '150px',
             },
             {
                 label: '结算时间',
                 prop: 'serviceCentreSettlementTime',
-                 width:'150px'
+                width: '150px'
             },
         ]),
-     
-        tabList,
-        tabKey:''
+        scopeBtns: [
+            {
+                label: '结算申请',
+                type: 'primary',
+                key: 'examine',
+                func: (row) => {
+                    console.log(row)
+                    openDialog([row.orderId], 'applyfor')
+                },
+                // hasPermi: ["finance:apply"],
+                show: (row) => {
+                    return jlzj_area_type.value === FU_WU_ZHONG_XIN && row.serviceCentreSettlementStatus === '10'
+                }
+            },
+            {
+                label: '费用结算',
+                type: 'primary',
+                key: 'examine',
+                func: (row) => {
+                    console.log(row)
+                    openDialog([row.orderId], 'settlement')
+                },
+                // hasPermi: ["finance:settlement"],
+                show: (row) => {
+                    return row.serviceCentreSettlementStatus === '40' && jlzj_area_type.value !== FU_WU_ZHONG_XIN
+                }
+            },
+
+        ]
     }
 }

+ 1 - 1
src/views/monitor/online/index.vue

@@ -36,7 +36,7 @@
          </el-table-column>
          <el-table-column label="会话编号" align="center" prop="tokenId" :show-overflow-tooltip="true" />
          <el-table-column label="登录名称" align="center" prop="userName" :show-overflow-tooltip="true" />
-         <el-table-column label="所属部门" align="center" prop="deptName" :show-overflow-tooltip="true" />
+         <el-table-column label="所属区域" align="center" prop="deptName" :show-overflow-tooltip="true" />
          <el-table-column label="主机" align="center" prop="ipaddr" :show-overflow-tooltip="true" />
          <el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
          <el-table-column label="操作系统" align="center" prop="os" :show-overflow-tooltip="true" />

+ 17 - 17
src/views/system/dept/index.vue

@@ -1,12 +1,12 @@
 <template>
    <div class="app-container">
       <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
-         <el-form-item label="部门名称" prop="deptName">
-            <el-input v-model="queryParams.deptName" placeholder="请输入部门名称" clearable style="width: 200px"
+         <el-form-item label="区域名称" prop="deptName">
+            <el-input v-model="queryParams.deptName" placeholder="请输入区域名称" clearable style="width: 200px"
                @keyup.enter="handleQuery" />
          </el-form-item>
          <el-form-item label="状态" prop="status">
-            <el-select v-model="queryParams.status" placeholder="部门状态" clearable style="width: 200px">
+            <el-select v-model="queryParams.status" placeholder="区域状态" clearable style="width: 200px">
                <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label"
                   :value="dict.value" />
             </el-select>
@@ -30,7 +30,7 @@
 
       <el-table v-if="refreshTable" v-loading="loading" :data="deptList" row-key="deptId"
          :default-expand-all="isExpandAll" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
-         <el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
+         <el-table-column prop="deptName" label="区域名称" width="260"></el-table-column>
          <el-table-column prop="orderNum" label="排序"></el-table-column>
          <el-table-column prop="provinceName" label="省级"></el-table-column>
          <el-table-column prop="cityName" label="市级"></el-table-column>
@@ -66,15 +66,15 @@
          </el-table-column>
       </el-table>
 
-      <!-- 添加或修改部门对话框 -->
+      <!-- 添加或修改区域对话框 -->
       <el-dialog :title="title" v-model="open" width="600px" append-to-body>
          <el-form ref="deptRef" :model="form" :rules="rules" label-width="80px">
             <el-row>
                <el-col :span="24" v-if="form.parentId !== 0">
-                  <el-form-item label="上级部门" prop="parentId">
+                  <el-form-item label="上级区域" prop="parentId">
                      <el-tree-select v-model="form.parentId" :data="deptOptions"
                         :props="{ value: 'deptId', label: 'deptName', children: 'children' }" value-key="deptId"
-                        placeholder="选择上级部门" check-strictly />
+                        placeholder="选择上级区域" check-strictly />
                   </el-form-item>
                </el-col>
                <el-col :span="24">
@@ -102,8 +102,8 @@
                   </el-form-item>
                </el-col>
                <el-col :span="12">
-                  <el-form-item label="部门名称" prop="deptName">
-                     <el-input v-model="form.deptName" placeholder="请输入部门名称" />
+                  <el-form-item label="区域名称" prop="deptName">
+                     <el-input v-model="form.deptName" placeholder="请输入区域名称" />
                   </el-form-item>
                </el-col>
                <el-col :span="12">
@@ -127,7 +127,7 @@
                   </el-form-item>
                </el-col>
                <el-col :span="12">
-                  <el-form-item label="部门状态">
+                  <el-form-item label="区域状态">
                      <el-radio-group v-model="form.status">
                         <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :value="dict.value">{{ dict.label
                         }}</el-radio>
@@ -183,15 +183,15 @@ const refreshTable = ref(true);
 
 const data = reactive({
    form: {
-      distributionRatio: 0.3
+      distributionRatio: 0
    },
    queryParams: {
       deptName: undefined,
       status: undefined
    },
    rules: {
-      parentId: [{ required: true, message: "上级部门不能为空", trigger: "blur" }],
-      deptName: [{ required: true, message: "部门名称不能为空", trigger: "blur" }],
+      parentId: [{ required: true, message: "上级区域不能为空", trigger: "blur" }],
+      deptName: [{ required: true, message: "区域名称不能为空", trigger: "blur" }],
       orderNum: [{ required: true, message: "显示排序不能为空", trigger: "blur" }],
       email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
       phone: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }],
@@ -209,7 +209,7 @@ const areaOption = reactive({
 const { province, city, district } = toRefs(areaOption);
 const { queryParams, form, rules } = toRefs(data);
 
-/** 查询部门列表 */
+/** 查询区域列表 */
 function getList() {
    loading.value = true;
    listDept(queryParams.value).then(response => {
@@ -239,7 +239,7 @@ function reset() {
       phone: undefined,
       email: undefined,
       status: "0",
-      distributionRatio: 0.3
+      distributionRatio: 0
    };
    proxy.resetForm("deptRef");
 }
@@ -265,7 +265,7 @@ function handleAdd(row) {
       form.value.parentId = row.deptId;
    }
    open.value = true;
-   title.value = "添加部门";
+   title.value = "添加区域";
 }
 
 /** 展开/折叠操作 */
@@ -292,7 +292,7 @@ function handleUpdate(row) {
       }
       handleAreaOption();
       open.value = true;
-      title.value = "修改部门";
+      title.value = "修改区域";
    });
 }
 

+ 1 - 1
src/views/system/dept/mapSetting copy.vue

@@ -154,7 +154,7 @@ function onSavePointList() {
     proxy.$modal.msgError('请先绘制或调整图形');
     return;
   }
-  // 合并所有部门字段和 pointList
+  // 合并所有区域字段和 pointList
   const payload = {
     ...deptForm.value,
     pointList: JSON.stringify(latestPointList.value)

+ 6 - 6
src/views/system/role/index.vue

@@ -273,8 +273,8 @@ const deptRef = ref(null);
 const dataScopeOptions = ref([
   { value: "1", label: "全部数据权限" },
   { value: "2", label: "自定数据权限" },
-  { value: "3", label: "本部门数据权限" },
-  { value: "4", label: "本部门及以下数据权限" },
+  { value: "3", label: "本区域数据权限" },
+  { value: "4", label: "本区域及以下数据权限" },
   { value: "5", label: "仅本人数据权限" }
 ]);
 
@@ -382,11 +382,11 @@ function getMenuTreeselect() {
   });
 }
 
-/** 所有部门节点数据 */
+/** 所有区域节点数据 */
 function getDeptAllCheckedKeys() {
-  // 目前被选中的部门节点
+  // 目前被选中的区域节点
   let checkedKeys = deptRef.value.getCheckedKeys();
-  // 半选中的部门节点
+  // 半选中的区域节点
   let halfCheckedKeys = deptRef.value.getHalfCheckedKeys();
   checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
   return checkedKeys;
@@ -455,7 +455,7 @@ function getRoleMenuTreeselect(roleId) {
   });
 }
 
-/** 根据角色ID查询部门树结构 */
+/** 根据角色ID查询区域树结构 */
 function getDeptTree(roleId) {
   return deptTreeSelect(roleId).then(response => {
     deptOptions.value = response.depts;

+ 1 - 1
src/views/system/user/profile/index.vue

@@ -26,7 +26,7 @@
                         <div class="pull-right">{{ state.user.email }}</div>
                      </li>
                      <li class="list-group-item">
-                        <svg-icon icon-class="tree" />所属部门
+                        <svg-icon icon-class="tree" />所属区域
                         <div class="pull-right" v-if="state.user.dept">{{ state.user.dept.deptName }} / {{ state.postGroup }}</div>
                      </li>
                      <li class="list-group-item">

+ 3 - 3
vite.config.js

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