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 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 16
 export interface UserQuery extends PageQuery {
17
-  userName?: string;
17
+  userNumb?: string;
18 18
   realName?: string;
19 19
   phone?: string;
20 20
   status?: string;
@@ -49,6 +49,7 @@ export interface UserVO extends BaseEntity {
49 49
   postIds: any;
50 50
   roleId: any;
51 51
   admin: boolean;
52
+  idNumber: string;
52 53
 }
53 54
 
54 55
 /**
@@ -73,6 +74,7 @@ export interface UserForm {
73 74
   lifespan: string;
74 75
   postIds?: string[];
75 76
   roleIds: string[];
77
+  idNumber?: string;
76 78
 }
77 79
 
78 80
 export interface UserInfoVO {

+ 1 - 1
src/router/index.ts

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

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

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

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

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

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

@@ -25,10 +25,11 @@
25 25
           v-loading="loading"
26 26
           :row-key="getRowKey"
27 27
           :data="roles.slice((pageNum - 1) * pageSize, pageNum * pageSize)"
28
+          highlight-current-row
28 29
           @row-click="clickRow"
29 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 33
             <template #default="scope">
33 34
               <span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span>
34 35
             </template>
@@ -37,7 +38,7 @@
37 38
           <el-table-column label="角色编号" align="center" prop="roleId" />
38 39
           <el-table-column label="角色名称" align="center" prop="roleName" />
39 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 42
             <template #default="scope">
42 43
               <span>{{ parseTime(scope.row.createTime) }}</span>
43 44
             </template>

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

@@ -24,6 +24,9 @@
24 24
           <div v-show="showSearch" class="mb-[5px]">
25 25
             <el-card shadow="hover">
26 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 30
                 <el-form-item label="用户姓名" prop="realName">
28 31
                   <el-input v-model="queryParams.realName" placeholder="请输入用户姓名" clearable @keyup.enter="handleQuery" />
29 32
                 </el-form-item>
@@ -54,23 +57,6 @@
54 57
                   删除
55 58
                 </el-button>
56 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 60
               <right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @query-table="getList"></right-toolbar>
75 61
             </el-row>
76 62
           </template>
@@ -126,7 +112,7 @@
126 112
                 <dict-tag :options="CATEGORY" :value="scope.row.category" />
127 113
               </template>
128 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 116
               <template #default="scope">
131 117
                 <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
132 118
               </template>
@@ -168,42 +154,6 @@
168 154
     </el-row>
169 155
     <!-- 添加或修改用户对话框 -->
170 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 157
   </div>
208 158
 </template>
209 159
 
@@ -214,7 +164,6 @@ import { DeptVO } from '@/api/system/dept/types';
214 164
 import { globalHeaders } from '@/utils/request';
215 165
 import { to } from 'await-to-js';
216 166
 import UserDetailForm from '@/views/system/right/user/UserDetailForm.vue';
217
-import { ArrowDown } from '@element-plus/icons-vue';
218 167
 
219 168
 const router = useRouter();
220 169
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -249,17 +198,18 @@ const upload = reactive<ImportOption>({
249 198
 // 列显隐信息
250 199
 const columns = ref<FieldOption[]>([
251 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 203
   { key: 3, label: `部门`, visible: true, children: [] },
255 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 208
 const queryParams = reactive<UserQuery>({
260 209
   pageNum: 1,
261 210
   pageSize: 10,
262
-  userName: '',
211
+  realName: '',
212
+  userNumb: '',
263 213
   phone: '',
264 214
   status: '',
265 215
   deptId: '',
@@ -426,9 +376,6 @@ const handleOpenDetail = async (cmd: string, row?: UserVO) => {
426 376
 onMounted(() => {
427 377
   getTreeSelect(); // 初始化部门数据
428 378
   getList(); // 初始化列表数据
429
-  proxy?.getConfigKey('sys.user.initPassword').then((response) => {
430
-    initPassword.value = response.data;
431
-  });
432 379
 });
433 380
 </script>
434 381