Browse Source

投资者维护

zuy 2 năm trước cách đây
mục cha
commit
8c0039977c

+ 23 - 1
admin-web/src/components/form/ExtSelect.vue

@@ -73,6 +73,10 @@ const props = defineProps({
   valueKey: {
     type: String,
     default: 'id'
+  },
+  dataKey:{
+    type:String,
+    default:'list'
   }
 })
 
@@ -124,7 +128,13 @@ const loadData = () => {
     if (props.urlMethod?.toLowerCase() === 'post') {
       $body(`${props.url}`, query).then((list: any) => {
         // let {list,count}  = res;
-        state.list = list.map((k: any) => {
+        let dataList = [];
+        if(props.dataKey){
+          dataList = list[props.dataKey]
+        }else{
+          dataList = list
+        }
+        state.list = dataList.map((k: any) => {
           return {value: k[props.valueKey], label: k[props.labelKey]}
         })
         console.log(state.list)
@@ -133,6 +143,17 @@ const loadData = () => {
     } else {
       $get(`${props.url}`, query).then((list: any) => {
         // let {list,count}  = res;
+        let dataList = [];
+        if(props.dataKey){
+          dataList = list[props.dataKey]
+        }else{
+          dataList = list
+        }
+        state.list = dataList.map((k: any) => {
+          return {value: k[props.valueKey], label: k[props.labelKey]}
+        })
+
+/*
         if (list.list) {
           state.list = list.list.map((k: any) => {
             return {value: k[props.valueKey], label: k[props.labelKey]}
@@ -142,6 +163,7 @@ const loadData = () => {
             return {value: k[props.valueKey], label: k[props.labelKey]}
           })
         }
+*/
 
         console.log(state.list)
         // state.value.list = res?.list

+ 1 - 0
admin-web/src/views/admin/activity/dialog.vue

@@ -136,6 +136,7 @@
               url-method="get"
               label-key="stationName"
               value-key="stationId"
+              data-key=""
               clearable
               class="w100 mt5">
           </ext-select>

+ 8 - 3
admin-web/src/views/admin/dict/index.vue

@@ -112,7 +112,7 @@
           </div>
 
           <el-button  v-auth="'dict.add'" size="small" class="mt10 mr5" type="primary" @click="handleAddDictItem">新增</el-button>
-          <el-button v-auth="'dict.modify'" size="small" class="mt10" type="success" @click="handleSaveDict">保存</el-button>
+          <el-button v-auth="'dict.modify'" size="small" class="mt10" type="success" v-if="state.saveVisible" @click="handleSaveDict">保存</el-button>
 
         </div>
       </div>
@@ -169,7 +169,8 @@ const state = reactive({
     list: [] as Array<any>
   },
   dictLoading: false,
-  visible:false
+  visible:false,
+  saveVisible:false
 });
 
 
@@ -179,7 +180,7 @@ const loadData = (refresh: boolean = false) => {
     state.pageQuery.pageNum = 1;
   }
   state.tableData.loading = true;
-  $body('dataDict/listV2', {...state.formQuery, ...state.pageQuery}).then((res: any) => {
+  $body('dataDict/listV2', {query:state.formQuery, ...state.pageQuery}).then((res: any) => {
     let {list, total} = res;
     state.tableData.data = list;
     state.pageQuery.total = total;
@@ -245,10 +246,12 @@ const handleDictRowClick = (row: any) => {
 }
 
 const handleDeleteDictItem = (idx) => {
+  state.saveVisible = true;
   state.dictForm.list.splice(idx,1)
 }
 
 const handleAddDict = () => {
+  state.saveVisible = true;
   state.visible = true;
   state.dictForm = {
     code: '字典码值',
@@ -260,6 +263,7 @@ const handleAddDict = () => {
 }
 
 const handleAddDictItem = () => {
+  state.saveVisible = true;
   state.dictForm.list.push({
     code: '',
     name: '',
@@ -280,6 +284,7 @@ const handleSaveDict = () => {
   })
   $body(`dataDict/saveOrUpdate`, params).then(() => {
     Msg.message("保存成功")
+    state.saveVisible = false;
   })
 }
 </script>

+ 151 - 79
admin-web/src/views/admin/investor/dialog.vue

@@ -6,85 +6,153 @@
     <el-drawer
         :title="state.dialog.title"
         v-model="state.dialog.isShowDialog"
-        width="820px"
+        size="620"
+        class="pd10"
         append-to-body
         destroy-on-close
         :close-on-click-modal="false"
     >
       <el-form
-          :model="state.form"
-          :rules="rules"
-          label-position="left"
+          inline
+          :model="state.ruleForm"
+          :rules="state.rules"
+          label-position="top"
           ref="formRef"
           size="default"
           label-width="100px"
           class="mt5">
-        <el-input
-            v-model="state.formQuery.adminUserId"
-            placeholder="客户用户id"
-            clearable
-            class="wd150">
-        </el-input>
-        <el-input
-            v-model="state.formQuery.adminUserName"
-            placeholder="客户姓名"
-            clearable
-            class="wd150">
-        </el-input>
-        <el-input
-            v-model="state.formQuery.stationId"
-            placeholder="站点id"
-            clearable
-            class="wd150">
-        </el-input>
-        <el-input
-            v-model="state.formQuery.vatRate"
-            placeholder="增值税率 0.06表示6%"
-            clearable
-            class="wd150">
-        </el-input>
-        <el-input
-            v-model="state.formQuery.splittingProportion"
-            placeholder="分成比例 0.45表示45%"
-            clearable
-            class="wd150">
-        </el-input>
-        <el-input
-            v-model="state.formQuery.accountName"
-            placeholder="账户名"
-            clearable
-            class="wd150">
-        </el-input>
-        <el-input
-            v-model="state.formQuery.telephone"
-            placeholder="电话号码"
-            clearable
-            class="wd150">
-        </el-input>
-        <el-input
-            v-model="state.formQuery.bankName"
-            placeholder="开户行名称"
-            clearable
-            class="wd150">
-        </el-input>
-        <el-input
-            v-model="state.formQuery.bankCardNo"
-            placeholder="银行卡号"
-            clearable
-            class="wd150">
-        </el-input>
-        <el-input
-            v-model="state.formQuery.status"
-            placeholder="状态:0-无效,1-有效"
-            clearable
-            class="wd150">
-        </el-input>
-        <el-input
-            v-model="state.formQuery.remark"
-            placeholder="备注"
-            clearable
-            class="wd150">
-        </el-input>
+        <el-form-item label="账户名" prop="accountName">
+          <el-input
+              v-model="state.ruleForm.accountName"
+              placeholder="账户名"
+              clearable
+              class="wd200">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="客户名称" prop="adminUserName">
+          <el-input
+              v-model="state.ruleForm.adminUserName"
+              placeholder="客户名称"
+              clearable
+              class="wd200">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="关联客户" prop="adminUserId">
+          <ext-select
+              v-model="state.ruleForm.adminUserId"
+              placeholder="关联用户"
+              url="admin-user/list"
+              url-method="get"
+              label-key="nickname"
+              clearable
+              class="wd200 ">
+          </ext-select>
+
+<!--          <el-input
+              v-model="state.ruleForm.adminUserId"
+              placeholder="客户用户id"
+              clearable
+              class="wd200">
+          </el-input>-->
+        </el-form-item>
+
+        <el-form-item label="管理站点" prop="stationId">
+          <ext-select
+              v-model="state.ruleForm.stationId"
+              placeholder="关联站点"
+              url="station/listStation"
+              url-method="get"
+              label-key="stationName"
+              value-key="stationId"
+              data-key=""
+              clearable
+              class="wd200 ">
+          </ext-select>
+          <!--          <el-input
+                        v-model="state.ruleForm.stationId"
+                        placeholder="站点id"
+                        clearable
+                        class="wd200">
+                    </el-input>-->
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <ext-d-select
+              v-model="state.ruleForm.status"
+              placeholder="状态"
+              type="Investor.status"
+              clearable
+              class="wd200 "/>
+        </el-form-item>
+        <el-form-item label="电话号码" prop="telephone">
+          <el-input
+              v-model="state.ruleForm.telephone"
+              placeholder="电话号码"
+              clearable
+              class="wd200">
+          </el-input>
+        </el-form-item>
+
+        <el-form-item label="银行卡号" prop="bankCardNo">
+          <el-input
+              v-model="state.ruleForm.bankCardNo"
+              placeholder="银行卡号"
+              clearable
+              class="wd200">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="开户行名称" prop="bankName" >
+          <el-input
+              v-model="state.ruleForm.bankName"
+              placeholder="开户行名称"
+              clearable
+              class="w100">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="电损承担比例 (0.30表示30%)" prop="elecLossProportion">
+          <el-input
+              v-model="state.ruleForm.elecLossProportion"
+              placeholder="电损承担比例 0.30表示30%"
+              clearable
+              class="wd200">
+          </el-input>
+        </el-form-item>
+
+        <el-form-item label="分成比例 (0.45表示45%)" prop="splittingProportion">
+          <el-input
+              v-model="state.ruleForm.splittingProportion"
+              placeholder="分成比例 0.45表示45%"
+              clearable
+              class="wd200">
+          </el-input>
+        </el-form-item>
+
+<!--        <el-form-item label="站点名称" prop="stationName">
+          <el-input
+              v-model="state.ruleForm.stationName"
+              placeholder="站点名称"
+              clearable
+              class="wd200">
+          </el-input>
+        </el-form-item>-->
+
+        <el-form-item label="增值税率" prop="vatRate">
+          <el-input
+              v-model="state.ruleForm.vatRate"
+              placeholder="增值税率 0.06表示6%"
+              clearable
+              class="wd200">
+          </el-input>
+        </el-form-item>
+
+        <el-form-item label="备注" prop="remark" class="w100">
+          <el-input
+              v-model="state.ruleForm.remark"
+              placeholder="备注"
+              clearable
+              type="textarea"
+              class="w100">
+          </el-input>
+        </el-form-item>
       </el-form>
 
       <template #footer>
@@ -102,14 +170,16 @@ import {defineAsyncComponent, reactive, onMounted, ref} from 'vue';
 import {Msg} from "/@/utils/message";
 import {$body, $get} from "/@/utils/request";
 import u from '/@/utils/u'
+import ExtSelect from "/@/components/form/ExtSelect.vue";
+import ExtDSelect from "/@/components/form/ExtDSelect.vue";
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['refresh']);
 const formRef = ref();
 //定义初始变量,重置使用
-const initState = ()=>({
+const initState = () => ({
   ruleForm: {
-    id:0
+    id: 0
   },
   btnLoading: false,
   dialog: {
@@ -118,7 +188,9 @@ const initState = ()=>({
     title: '',
     submitTxt: '',
   },
-  rules: {},
+  rules: {
+    telephone:[u.validator.mobile]
+  },
 })
 
 // 定义变量内容
@@ -126,18 +198,18 @@ const state = reactive(initState());
 
 
 // 打开弹窗
-const open = (action: string='add', row: any) => {
-  state.dialog.title = u.dialog.actions[action].title +"『投资者-物业信息表』"
-  state.dialog.submitTxt = u.dialog.actions[action].btn +"『投资者-物业信息表』"
+const open = (action: string = 'add', row: any) => {
+  state.dialog.title = u.dialog.actions[action].title + "『投资者』"
+  state.dialog.submitTxt = u.dialog.actions[action].btn + "『投资者』"
   state.dialog.isShowDialog = true;
-  if (action !=='add') {
+  if (action !== 'add') {
     loadData(row.id);
   }
 };
 // 关闭弹窗
 const onClose = () => {
   state.dialog.isShowDialog = false;
-  Object.assign(state,initState())
+  Object.assign(state, initState())
 };
 // 取消
 const onCancel = () => {
@@ -149,7 +221,7 @@ const onSubmit = () => {
     // console.log('basic checkForm!', valid,fields)
     if (valid) {
       state.btnLoading = true;
-      const url = state.ruleForm.id > 0 ? "investorInfo/modify" : "investorInfo/add"
+      const url = state.ruleForm.id > 0 ? "investorInfo/update" : "investorInfo/create"
       $body(url, state.ruleForm).then(() => {
         state.btnLoading = false;
         Msg.message('操作成功');

+ 43 - 18
admin-web/src/views/admin/investor/index.vue

@@ -47,13 +47,21 @@
             @blur="loadData(true)"
             class="wd150 mr10">
         </el-input>
-        <el-input
+        <ext-d-select
             v-model="state.formQuery.status"
-            placeholder="状态:0-无效,1-有效"
+            placeholder="状态"
+            type="Investor.status"
             clearable
-            @blur="loadData(true)"
-            class="wd150 mr10">
-        </el-input>
+            @on-change="loadData(true)"
+            class="wd150 mr10"/>
+
+        <!--        <el-input
+                    v-model="state.formQuery.status"
+                    placeholder="状态:0-无效,1-有效"
+                    clearable
+                    @blur="loadData(true)"
+                    class="wd150 mr10">
+                </el-input>-->
         <el-input
             v-model="state.formQuery.mobilePhone"
             placeholder="电话号码"
@@ -67,6 +75,11 @@
           <SvgIcon name="ele-Search"/>
           查询
         </el-button>
+
+        <el-button  v-auth="'investor.add'"   size="default" plain  type="success" class="ml10" @click="onRowClick('add',null)">
+          <SvgIcon name="ele-FolderAdd"/>
+          新增
+        </el-button>
       </el-form>
 
       <el-table
@@ -83,7 +96,6 @@
         <template #empty>
           <el-empty></el-empty>
         </template>
-        <el-table-column type="selection" align="center" width="55" fixed="left"/>
         <el-table-column
             v-for="field in state.tableData.columns"
             :key="field.prop"
@@ -96,8 +108,20 @@
             :show-overflow-tooltip="!field.fixed&&field.width>150"
         >
           <template #default="{row}">
-            <template v-if="field.prop==='expand'">
-              <p style="padding-left: 2em;" v-html="row[field.prop]"></p>
+            <template v-if="field.prop==='stationId'">
+              <div class="text-align-center">
+                {{ row.stationId }}
+                <hr>
+                {{ row.stationName }}
+              </div>
+
+            </template>
+            <template v-else-if="field.prop==='status'">
+              <ext-d-label type="Investor.status" v-model="row.status"></ext-d-label>
+            </template>
+            <template v-else-if="field.prop==='action'">
+              <el-button  v-auth="'investor.modify'"  size="small" plain  type="warning" @click="onRowClick('edit',row)">编辑</el-button>
+              <el-button  v-auth="'investor.list'"  size="small" plain  type="primary" @click="onRowClick('view',row)">查看</el-button>
             </template>
             <template v-else>
               <div>{{ row[field.prop] }}</div>
@@ -122,6 +146,8 @@ import {Msg} from "/@/utils/message";
 import ExtPage from '/@/components/form/ExtPage.vue'
 
 import mittBus from '/@/utils/mitt';
+import ExtDSelect from "/@/components/form/ExtDSelect.vue";
+import ExtDLabel from "/@/components/form/ExtDLabel.vue";
 
 const InvestorInfoDialog = defineAsyncComponent(() => import("/@/views/admin/investor/dialog.vue"));
 
@@ -142,17 +168,16 @@ const state = reactive({
     data: [] as Array<any>,
     loading: false,
     columns: [
-      {type: 'selection', width: 60, align: 'center', fixed: 'left'},
-      {label: '账户名', prop: 'accountName', resizable: true},
-      {label: '客户姓名', prop: 'adminUserName', resizable: true},
-      {label: '银行卡号', prop: 'bankCardNo', resizable: true},
-      {label: '开户行名称', prop: 'bankName', resizable: true},
-      {label: '创建时间', prop: 'createTime', sortable: 'custom', resizable: true, width: 150},
-      {label: '备注', prop: 'remark', resizable: true},
-      {label: '站点id', prop: 'stationId', resizable: true},
-      {label: '状态:0-无效,1-有效', prop: 'status', sortable: 'custom', align: 'center'},
       {label: '电话号码', prop: 'telephone', resizable: true},
-      {label: '更新时间', prop: 'updateTime', sortable: 'custom', resizable: true, width: 150},
+      {label: '客户姓名', prop: 'adminUserName', resizable: true},
+      {label: '站点', prop: 'stationId', resizable: true},
+      {label: '账户名', prop: 'accountName', resizable: true},
+      {label: '银行卡号', prop: 'bankCardNo', resizable: true, width: 180},
+      {label: '开户行名称', prop: 'bankName', resizable: true, width: 180},
+      // {label: '备注', prop: 'remark', resizable: true},
+      {label: '状态', prop: 'status', sortable: 'custom', align: 'center'},
+      {label: '创建时间', prop: 'createTime', sortable: 'custom', resizable: true, width: 180},
+      {label: '更新时间', prop: 'updateTime', sortable: 'custom', resizable: true, width: 180},
       {
         label: '操作', prop: 'action', width: 180, align: 'center', fixed: 'right',
       }

+ 1 - 0
admin-web/src/views/admin/ordering/index.vue

@@ -46,6 +46,7 @@
             clearable
             url="station/listStation"
             urlMethod="get"
+            data-key=""
             label-key="stationName"
             value-key="stationId"
             @on-change="loadData(true)"

+ 1 - 0
admin-web/src/views/admin/station/endpoint/index.vue

@@ -48,6 +48,7 @@
             clearable
             url="station/listStation"
             urlMethod="get"
+            data-key=""
             label-key="stationName"
             value-key="stationId"
             @on-change="loadData(true)"

+ 5 - 0
entity/src/main/java/com/kym/entity/admin/InvestorInfo.java

@@ -36,6 +36,11 @@ public class InvestorInfo extends BaseEntity {
      */
     private String stationId;
 
+    /**
+     * 站点
+     */
+    private String stationName;
+
     /**
      * 增值税率 0.06表示6%
      */

+ 2 - 1
mapper/src/main/resources/mappers/admin/InvestorInfoMapper.xml

@@ -8,6 +8,7 @@
         <result column="admin_user_id" property="adminUserId" />
         <result column="admin_user_name" property="adminUserName" />
         <result column="station_id" property="stationId" />
+        <result column="station_name" property="stationName" />
         <result column="vat_rate" property="vatRate" />
         <result column="splitting_proportion" property="splittingProportion" />
         <result column="elec_loss_proportion" property="elecLossProportion" />
@@ -23,7 +24,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id,admin_user_id, admin_user_name, station_id, vat_rate, splitting_proportion, elec_loss_proportion,account_name, telephone, bank_name, bank_card_no, status, remark,create_time,update_time
+        id,admin_user_id, admin_user_name, station_id,station_name, vat_rate, splitting_proportion, elec_loss_proportion,account_name, telephone, bank_name, bank_card_no, status, remark,create_time,update_time
     </sql>
 
 </mapper>

+ 2 - 2
service/src/main/java/com/kym/service/admin/InvestorInfoService.java

@@ -3,8 +3,8 @@ package com.kym.service.admin;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.kym.entity.admin.InvestorInfo;
 import com.kym.entity.admin.queryParams.CommonQueryParam;
+import com.kym.entity.common.PageBean;
 
-import java.util.List;
 
 /**
  * <p>
@@ -16,5 +16,5 @@ import java.util.List;
  */
 public interface InvestorInfoService extends IService<InvestorInfo> {
 
-    List<InvestorInfo> list(CommonQueryParam params);
+    PageBean<InvestorInfo> list(CommonQueryParam params);
 }

+ 8 - 5
service/src/main/java/com/kym/service/admin/impl/InvestorInfoServiceImpl.java

@@ -1,15 +1,16 @@
 package com.kym.service.admin.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.github.pagehelper.PageHelper;
 import com.kym.common.utils.CommUtil;
 import com.kym.entity.admin.InvestorInfo;
 import com.kym.entity.admin.queryParams.CommonQueryParam;
+import com.kym.entity.common.PageBean;
 import com.kym.mapper.admin.InvestorInfoMapper;
 import com.kym.service.admin.InvestorInfoService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
 
 /**
  * <p>
@@ -24,10 +25,12 @@ import java.util.List;
 public class InvestorInfoServiceImpl extends ServiceImpl<InvestorInfoMapper, InvestorInfo> implements InvestorInfoService {
 
     @Override
-    public List<InvestorInfo> list(CommonQueryParam params) {
-        return lambdaQuery()
-                .like(CommUtil.isEmptyOrNull(params.getMobilePhone()),InvestorInfo::getTelephone, params.getMobilePhone())
-                .like(CommUtil.isEmptyOrNull(params.getUsername()),InvestorInfo::getAdminUserName, params.getUsername())
+    public PageBean<InvestorInfo> list(CommonQueryParam params) {
+        PageHelper.startPage(params.getPageNum(), params.getPageSize());
+        var list = lambdaQuery()
+                .like(CommUtil.isNotEmptyAndNull(params.getMobilePhone()), InvestorInfo::getTelephone, params.getMobilePhone())
+                .like(CommUtil.isNotEmptyAndNull(params.getUsername()), InvestorInfo::getAdminUserName, params.getUsername())
                 .list();
+        return new PageBean<>(list);
     }
 }

+ 16 - 3
service/src/main/java/com/kym/service/miniapp/impl/DataDictServiceImpl.java

@@ -17,6 +17,8 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -50,8 +52,13 @@ public class DataDictServiceImpl extends MPJBaseServiceImpl<DataDictMapper, Data
         Long count = wrapper.count();
         PageHelper.startPage(query.pageNum, query.pageSize);
         List<DataDict> list = wrapper.list();
-        List<DataDict> list1 = lambdaQuery().in(DataDict::getCode, list.stream().map(DataDict::getCode).collect(Collectors.toList())).list();
-        return IQuery.newPageBean(count, list1.stream().filter(CommUtil.distinctByKey(DataDict::getCode)).toList());
+        if (CommUtil.isNotEmptyAndNull(list)) {
+
+            List<DataDict> list1 = lambdaQuery().in(CommUtil.isNotEmptyAndNull(list), DataDict::getCode, list.stream().map(DataDict::getCode).collect(Collectors.toList())).list();
+            return IQuery.newPageBean(count, list1.stream().filter(CommUtil.distinctByKey(DataDict::getCode)).toList());
+        } else {
+            return IQuery.newPageBean(0, Collections.emptyList());
+        }
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -77,7 +84,13 @@ public class DataDictServiceImpl extends MPJBaseServiceImpl<DataDictMapper, Data
                 }
                 Object fieldValue = ReflectUtil.getFieldValue(query, field);
                 if (!CommUtil.isEmptyOrNull(fieldValue)) {
-                    wrapper.eq(CommUtil.toDbColumn(field.getName()), fieldValue);
+                    Class<?> aClass = field.getType();
+
+                    if (ClassUtil.isBasicType(aClass)) {
+                        wrapper.eq(CommUtil.toDbColumn(field.getName()), fieldValue);
+                    } else if (String.class.isAssignableFrom(aClass)) {
+                        wrapper.like(CommUtil.toDbColumn(field.getName()), fieldValue);
+                    }
                 }
             }
         }