Browse Source

feature:系统管理->用户管理
1、自动开户前后端交互及界面样式

luoyb 1 month ago
parent
commit
e7ce83a3ff

+ 7 - 0
src/api/basics/basicParameter/ptParameter/index.ts

@@ -60,3 +60,10 @@ export const delPtParameter = (paramId: string | number | Array<string | number>
60
     method: 'delete'
60
     method: 'delete'
61
   });
61
   });
62
 };
62
 };
63
+// 根据参数键名查询参数值
64
+export function getPtParamByCode(paramCode: string): AxiosPromise<string> {
65
+  return request({
66
+    url: '/backstage/basicParameter/ptParameter/paramCode/' + paramCode,
67
+    method: 'get'
68
+  });
69
+}

+ 3 - 1
src/api/system/right/user/types.ts

@@ -14,7 +14,7 @@ export interface UserInfo {
14
  * 用户查询对象类型
14
  * 用户查询对象类型
15
  */
15
  */
16
 export interface UserQuery extends PageQuery {
16
 export interface UserQuery extends PageQuery {
17
-  userName?: string;
17
+  userNumb?: string;
18
   realName?: string;
18
   realName?: string;
19
   phone?: string;
19
   phone?: string;
20
   status?: string;
20
   status?: string;
@@ -49,6 +49,7 @@ export interface UserVO extends BaseEntity {
49
   postIds: any;
49
   postIds: any;
50
   roleId: any;
50
   roleId: any;
51
   admin: boolean;
51
   admin: boolean;
52
+  idNumber: string;
52
 }
53
 }
53
 
54
 
54
 /**
55
 /**
@@ -73,6 +74,7 @@ export interface UserForm {
73
   lifespan: string;
74
   lifespan: string;
74
   postIds?: string[];
75
   postIds?: string[];
75
   roleIds: string[];
76
   roleIds: string[];
77
+  idNumber?: string;
76
 }
78
 }
77
 
79
 
78
 export interface UserInfoVO {
80
 export interface UserInfoVO {

+ 1 - 1
src/router/index.ts

@@ -101,7 +101,7 @@ export const dynamicRoutes: RouteRecordRaw[] = [
101
     children: [
101
     children: [
102
       {
102
       {
103
         path: 'role/:userId(\\d+)',
103
         path: 'role/:userId(\\d+)',
104
-        component: () => import('@/views/system/user/authRole.vue'),
104
+        component: () => import('@/views/system/right/user/authRole.vue'),
105
         name: 'AuthRole',
105
         name: 'AuthRole',
106
         meta: { title: '分配角色', activeMenu: '/system/user', icon: '' }
106
         meta: { title: '分配角色', activeMenu: '/system/user', icon: '' }
107
       }
107
       }

+ 3 - 2
src/views/payment/account/index.vue

@@ -77,14 +77,15 @@
77
                 </el-button>
77
                 </el-button>
78
               </el-col>
78
               </el-col>
79
               <el-col :span="1.5">
79
               <el-col :span="1.5">
80
-                <el-dropdown class="mt-[1px]">
80
+                <el-dropdown v-hasPermi="['payment:ptUserAccount:edit']" class="mt-[1px]">
81
                   <el-button plain type="info">
81
                   <el-button plain type="info">
82
                     更多
82
                     更多
83
                     <el-icon class="el-icon--right"><arrow-down /></el-icon
83
                     <el-icon class="el-icon--right"><arrow-down /></el-icon
84
                   ></el-button>
84
                   ></el-button>
85
                   <template #dropdown>
85
                   <template #dropdown>
86
                     <el-dropdown-menu>
86
                     <el-dropdown-menu>
87
-                      <el-dropdown-item icon="Refresh" @click="handleResetLifespan">重置有效期</el-dropdown-item>
87
+                      <el-dropdown-item  icon="Refresh" @click="handleResetLifespan"
88
+                        >重置有效期</el-dropdown-item>
88
                       <el-dropdown-item icon="RefreshLeft" @click="handleResetCardType"> 重置卡片类别</el-dropdown-item>
89
                       <el-dropdown-item icon="RefreshLeft" @click="handleResetCardType"> 重置卡片类别</el-dropdown-item>
89
                       <el-dropdown-item icon="RefreshRight" @click="handleResetConsumePwd"> 重置消费密码</el-dropdown-item>
90
                       <el-dropdown-item icon="RefreshRight" @click="handleResetConsumePwd"> 重置消费密码</el-dropdown-item>
90
                     </el-dropdown-menu>
91
                     </el-dropdown-menu>

+ 13 - 0
src/views/system/right/user/UserDetailForm.vue

@@ -69,6 +69,13 @@
69
             </el-form-item>
69
             </el-form-item>
70
           </el-col>
70
           </el-col>
71
         </el-row>
71
         </el-row>
72
+        <el-row>
73
+          <el-col :span="24">
74
+            <el-form-item label="身份证号" prop="idNumber">
75
+              <el-input v-model="formData.idNumber" placeholder="请输入身份证号"></el-input>
76
+            </el-form-item>
77
+          </el-col>
78
+        </el-row>
72
         <el-row>
79
         <el-row>
73
           <el-col :span="12">
80
           <el-col :span="12">
74
             <el-form-item label="用户性别" prop="sex">
81
             <el-form-item label="用户性别" prop="sex">
@@ -139,6 +146,7 @@ import { RoleVO } from '@/api/system/role/types';
139
 import { treeselect } from '@/api/system/dept';
146
 import { treeselect } from '@/api/system/dept';
140
 import { listUsePtCardType } from '@/api/basics/basicParameter/ptCardtype';
147
 import { listUsePtCardType } from '@/api/basics/basicParameter/ptCardtype';
141
 import { PtCardTypeVO } from '@/api/basics/basicParameter/ptCardtype/types';
148
 import { PtCardTypeVO } from '@/api/basics/basicParameter/ptCardtype/types';
149
+import { getPtParamByCode } from '@/api/basics/basicParameter/ptParameter';
142
 
150
 
143
 /** 当前组件属性 */
151
 /** 当前组件属性 */
144
 defineOptions({ name: 'RecompenseForm' });
152
 defineOptions({ name: 'RecompenseForm' });
@@ -184,6 +192,7 @@ const formData = ref<UserForm>({
184
   userName: '',
192
   userName: '',
185
   nickName: undefined,
193
   nickName: undefined,
186
   realName: undefined,
194
   realName: undefined,
195
+  idNumber: '',
187
   userNumb: '',
196
   userNumb: '',
188
   loginPwd: '',
197
   loginPwd: '',
189
   category: undefined,
198
   category: undefined,
@@ -269,6 +278,7 @@ const resetForm = () => {
269
     realName: undefined,
278
     realName: undefined,
270
     userNumb: '',
279
     userNumb: '',
271
     loginPwd: '',
280
     loginPwd: '',
281
+    idNumber: '',
272
     category: undefined,
282
     category: undefined,
273
     phone: undefined,
283
     phone: undefined,
274
     email: undefined,
284
     email: undefined,
@@ -314,6 +324,9 @@ onMounted(() => {
314
   proxy?.getConfigKey('sys.user.initPassword').then((response) => {
324
   proxy?.getConfigKey('sys.user.initPassword').then((response) => {
315
     initPassword.value = response.data;
325
     initPassword.value = response.data;
316
   });
326
   });
327
+  getPtParamByCode('AUTO_CREATE_BAG').then((response) => {
328
+    createAccount.value = response.data;
329
+  });
317
   // 初始化卡类数据
330
   // 初始化卡类数据
318
   getCardTypeOption();
331
   getCardTypeOption();
319
 });
332
 });

+ 3 - 2
src/views/system/right/user/authRole.vue

@@ -25,10 +25,11 @@
25
           v-loading="loading"
25
           v-loading="loading"
26
           :row-key="getRowKey"
26
           :row-key="getRowKey"
27
           :data="roles.slice((pageNum - 1) * pageSize, pageNum * pageSize)"
27
           :data="roles.slice((pageNum - 1) * pageSize, pageNum * pageSize)"
28
+          highlight-current-row
28
           @row-click="clickRow"
29
           @row-click="clickRow"
29
           @selection-change="handleSelectionChange"
30
           @selection-change="handleSelectionChange"
30
         >
31
         >
31
-          <el-table-column label="序号" width="55" type="index" align="center">
32
+          <el-table-column label="序号" width="100" type="index" align="center">
32
             <template #default="scope">
33
             <template #default="scope">
33
               <span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span>
34
               <span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span>
34
             </template>
35
             </template>
@@ -37,7 +38,7 @@
37
           <el-table-column label="角色编号" align="center" prop="roleId" />
38
           <el-table-column label="角色编号" align="center" prop="roleId" />
38
           <el-table-column label="角色名称" align="center" prop="roleName" />
39
           <el-table-column label="角色名称" align="center" prop="roleName" />
39
           <el-table-column label="权限字符" align="center" prop="roleKey" />
40
           <el-table-column label="权限字符" align="center" prop="roleKey" />
40
-          <el-table-column label="创建时间" align="center" prop="createTime" width="180">
41
+          <el-table-column label="创建时间" align="center" prop="createTime" width="300">
41
             <template #default="scope">
42
             <template #default="scope">
42
               <span>{{ parseTime(scope.row.createTime) }}</span>
43
               <span>{{ parseTime(scope.row.createTime) }}</span>
43
             </template>
44
             </template>

+ 10 - 63
src/views/system/right/user/index.vue

@@ -24,6 +24,9 @@
24
           <div v-show="showSearch" class="mb-[5px]">
24
           <div v-show="showSearch" class="mb-[5px]">
25
             <el-card shadow="hover">
25
             <el-card shadow="hover">
26
               <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="auto" class="-mb-25px -mt-5px">
26
               <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="auto" class="-mb-25px -mt-5px">
27
+                <el-form-item label="学/工号" prop="userNumb">
28
+                  <el-input v-model="queryParams.userNumb" placeholder="请输入学/工号" clearable @keyup.enter="handleQuery" />
29
+                </el-form-item>
27
                 <el-form-item label="用户姓名" prop="realName">
30
                 <el-form-item label="用户姓名" prop="realName">
28
                   <el-input v-model="queryParams.realName" placeholder="请输入用户姓名" clearable @keyup.enter="handleQuery" />
31
                   <el-input v-model="queryParams.realName" placeholder="请输入用户姓名" clearable @keyup.enter="handleQuery" />
29
                 </el-form-item>
32
                 </el-form-item>
@@ -54,23 +57,6 @@
54
                   删除
57
                   删除
55
                 </el-button>
58
                 </el-button>
56
               </el-col>
59
               </el-col>
57
-<!--              <el-col :span="1.5">-->
58
-<!--                <el-dropdown class="mt-[1px]">-->
59
-<!--                  <el-button plain type="info">-->
60
-<!--                    更多-->
61
-<!--                    <el-icon class="el-icon&#45;&#45;right">-->
62
-<!--                      <arrow-down />-->
63
-<!--                    </el-icon>-->
64
-<!--                  </el-button>-->
65
-<!--                  <template #dropdown>-->
66
-<!--                    <el-dropdown-menu>-->
67
-<!--                      <el-dropdown-item icon="Download" @click="importTemplate">下载模板</el-dropdown-item>-->
68
-<!--                      <el-dropdown-item icon="Top" @click="handleImport"> 导入数据</el-dropdown-item>-->
69
-<!--                      <el-dropdown-item icon="Download" @click="handleExport"> 导出数据</el-dropdown-item>-->
70
-<!--                    </el-dropdown-menu>-->
71
-<!--                  </template>-->
72
-<!--                </el-dropdown>-->
73
-<!--              </el-col>-->
74
               <right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @query-table="getList"></right-toolbar>
60
               <right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @query-table="getList"></right-toolbar>
75
             </el-row>
61
             </el-row>
76
           </template>
62
           </template>
@@ -126,7 +112,7 @@
126
                 <dict-tag :options="CATEGORY" :value="scope.row.category" />
112
                 <dict-tag :options="CATEGORY" :value="scope.row.category" />
127
               </template>
113
               </template>
128
             </el-table-column>
114
             </el-table-column>
129
-            <el-table-column v-if="columns[5].visible" key="status" label="状态" align="center" width="100">
115
+            <el-table-column v-if="columns[6].visible" key="status" label="状态" align="center" width="100">
130
               <template #default="scope">
116
               <template #default="scope">
131
                 <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
117
                 <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
132
               </template>
118
               </template>
@@ -168,42 +154,6 @@
168
     </el-row>
154
     </el-row>
169
     <!-- 添加或修改用户对话框 -->
155
     <!-- 添加或修改用户对话框 -->
170
     <user-detail-form ref="userDetailFormRef" apped-to-body @success="getList" />
156
     <user-detail-form ref="userDetailFormRef" apped-to-body @success="getList" />
171
-    <!-- 用户导入对话框 -->
172
-    <el-dialog v-model="upload.open" :title="upload.title" width="400px" append-to-body>
173
-      <el-upload
174
-        ref="uploadRef"
175
-        :limit="1"
176
-        accept=".xlsx, .xls"
177
-        :headers="upload.headers"
178
-        :action="upload.url + '?updateSupport=' + upload.updateSupport"
179
-        :disabled="upload.isUploading"
180
-        :on-progress="handleFileUploadProgress"
181
-        :on-success="handleFileSuccess"
182
-        :auto-upload="false"
183
-        drag
184
-      >
185
-        <el-icon class="el-icon--upload">
186
-          <i-ep-upload-filled />
187
-        </el-icon>
188
-        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
189
-        <template #tip>
190
-          <div class="text-center el-upload__tip">
191
-            <div class="el-upload__tip">
192
-              <el-checkbox v-model="upload.updateSupport" />
193
-              是否更新已经存在的用户数据
194
-            </div>
195
-            <span>仅允许导入xls、xlsx格式文件。</span>
196
-            <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板 </el-link>
197
-          </div>
198
-        </template>
199
-      </el-upload>
200
-      <template #footer>
201
-        <div class="dialog-footer">
202
-          <el-button type="primary" @click="submitFileForm">确 定</el-button>
203
-          <el-button @click="upload.open = false">取 消</el-button>
204
-        </div>
205
-      </template>
206
-    </el-dialog>
207
   </div>
157
   </div>
208
 </template>
158
 </template>
209
 
159
 
@@ -214,7 +164,6 @@ import { DeptVO } from '@/api/system/dept/types';
214
 import { globalHeaders } from '@/utils/request';
164
 import { globalHeaders } from '@/utils/request';
215
 import { to } from 'await-to-js';
165
 import { to } from 'await-to-js';
216
 import UserDetailForm from '@/views/system/right/user/UserDetailForm.vue';
166
 import UserDetailForm from '@/views/system/right/user/UserDetailForm.vue';
217
-import { ArrowDown } from '@element-plus/icons-vue';
218
 
167
 
219
 const router = useRouter();
168
 const router = useRouter();
220
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
169
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -249,17 +198,18 @@ const upload = reactive<ImportOption>({
249
 // 列显隐信息
198
 // 列显隐信息
250
 const columns = ref<FieldOption[]>([
199
 const columns = ref<FieldOption[]>([
251
   { key: 0, label: `学/工号`, visible: true, children: [] },
200
   { key: 0, label: `学/工号`, visible: true, children: [] },
252
-  { key: 1, label: `用户名`, visible: true, children: [] },
253
-  { key: 2, label: `用户昵称`, visible: true, children: [] },
201
+  { key: 1, label: `用户名`, visible: true, children: [] },
202
+  { key: 2, label: `用户姓名`, visible: true, children: [] },
254
   { key: 3, label: `部门`, visible: true, children: [] },
203
   { key: 3, label: `部门`, visible: true, children: [] },
255
   { key: 4, label: `手机号码`, visible: true, children: [] },
204
   { key: 4, label: `手机号码`, visible: true, children: [] },
256
-  { key: 5, label: `状态`, visible: true, children: [] },
257
-  { key: 6, label: `创建时间`, visible: true, children: [] }
205
+  { key: 5, label: `用户类型`, visible: true, children: [] },
206
+  { key: 6, label: `状态`, visible: true, children: [] }
258
 ]);
207
 ]);
259
 const queryParams = reactive<UserQuery>({
208
 const queryParams = reactive<UserQuery>({
260
   pageNum: 1,
209
   pageNum: 1,
261
   pageSize: 10,
210
   pageSize: 10,
262
-  userName: '',
211
+  realName: '',
212
+  userNumb: '',
263
   phone: '',
213
   phone: '',
264
   status: '',
214
   status: '',
265
   deptId: '',
215
   deptId: '',
@@ -426,9 +376,6 @@ const handleOpenDetail = async (cmd: string, row?: UserVO) => {
426
 onMounted(() => {
376
 onMounted(() => {
427
   getTreeSelect(); // 初始化部门数据
377
   getTreeSelect(); // 初始化部门数据
428
   getList(); // 初始化列表数据
378
   getList(); // 初始化列表数据
429
-  proxy?.getConfigKey('sys.user.initPassword').then((response) => {
430
-    initPassword.value = response.data;
431
-  });
432
 });
379
 });
433
 </script>
380
 </script>
434
 
381