瀏覽代碼

新增个人信息页面

余思翰 1 年之前
父節點
當前提交
adc08fa0d1
共有 4 個檔案被更改,包括 871 行新增2 行删除
  1. 20
    0
      oa-ui/src/router/index.js
  2. 2
    2
      oa-ui/src/views/oa/car/index.vue
  3. 661
    0
      oa-ui/src/views/oa/staff/index.vue
  4. 188
    0
      oa-ui/src/views/oa/staff/info.vue

+ 20
- 0
oa-ui/src/router/index.js 查看文件

@@ -1,3 +1,9 @@
1
+/*
2
+ * @Author: ysh
3
+ * @Date: 2024-01-03 09:23:11
4
+ * @LastEditors: 
5
+ * @LastEditTime: 2024-03-22 14:50:52
6
+ */
1 7
 /*
2 8
  * @Author: ysh
3 9
  * @Date: 2024-01-03 09:23:11
@@ -197,6 +203,20 @@ export const constantRoutes = [
197 203
         name: 'deviceExpense',
198 204
         meta: { title: '设备明细', icon: '' }
199 205
 
206
+      }
207
+    ]
208
+  },
209
+  {
210
+    path: '/staff/info',
211
+    component: Layout,
212
+    hidden: true,
213
+    children: [
214
+      {
215
+        path: '',
216
+        component: () => import('@/views/oa/staff/info'),
217
+        name: 'staffInfo',
218
+        meta: { title: '员工详情', icon: '' }
219
+
200 220
       }
201 221
     ]
202 222
   }

+ 2
- 2
oa-ui/src/views/oa/car/index.vue 查看文件

@@ -46,7 +46,7 @@
46 46
           {{ scope.row.isRent == "0" ? "否" : "是" }}
47 47
         </template>
48 48
       </el-table-column>
49
-      <el-table-column label="总价" align="center" prop="cost">
49
+      <el-table-column label="购买价格" align="center" prop="cost">
50 50
         <template slot-scope="scope">
51 51
           {{ scope.row.cost + '元' }}
52 52
         </template>
@@ -96,7 +96,7 @@
96 96
             value-format="yyyy-MM-dd">
97 97
           </el-date-picker>
98 98
         </el-form-item>
99
-        <el-form-item label="总价" prop="cost">
99
+        <el-form-item label="购买价格" prop="cost">
100 100
           <el-input style="width:130px;margin-right:10px;" v-model="form.cost" placeholder="请输入金额" />
101 101
           <span>元</span>
102 102
         </el-form-item>

+ 661
- 0
oa-ui/src/views/oa/staff/index.vue 查看文件

@@ -0,0 +1,661 @@
1
+<template>
2
+  <div class="app-container">
3
+    <el-row :gutter="20">
4
+      <!--用户数据-->
5
+      <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
6
+        <el-form-item label="姓名" prop="nickName">
7
+          <el-input v-model="queryParams.nickName" placeholder="请输入姓名" clearable style="width: 240px"
8
+            @keyup.enter.native="handleQuery" />
9
+        </el-form-item>
10
+        <el-form-item label="手机号码" prop="phonenumber">
11
+          <el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable style="width: 240px"
12
+            @keyup.enter.native="handleQuery" />
13
+        </el-form-item>
14
+        <el-form-item label="部门">
15
+          <el-select v-model="queryParams.deptId" clearable>
16
+            <el-option v-for="item in deptList" :key="item.id" :label="item.label" :value="item.id">
17
+            </el-option>
18
+          </el-select>
19
+        </el-form-item>
20
+        <el-form-item>
21
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
22
+          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
23
+        </el-form-item>
24
+      </el-form>
25
+
26
+      <el-row :gutter="10" class="mb8">
27
+        <el-col :span="1.5">
28
+          <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
29
+            v-hasPermi="['system:user:add']">新增</el-button>
30
+        </el-col>
31
+        <el-col :span="1.5">
32
+          <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
33
+            v-hasPermi="['system:user:edit']">修改</el-button>
34
+        </el-col>
35
+        <el-col :span="1.5">
36
+          <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
37
+            v-hasPermi="['system:user:remove']">删除</el-button>
38
+        </el-col>
39
+        <el-col :span="1.5">
40
+          <el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport"
41
+            v-hasPermi="['system:user:import']">导入</el-button>
42
+        </el-col>
43
+        <el-col :span="1.5">
44
+          <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
45
+            v-hasPermi="['system:user:export']">导出</el-button>
46
+        </el-col>
47
+        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
48
+      </el-row>
49
+
50
+      <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
51
+        <el-table-column type="selection" width="50" align="center" />
52
+        <!-- <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" /> -->
53
+        <el-table-column label="姓名" align="center" key="nickName" prop="nickName" v-if="columns[2].visible"
54
+          :show-overflow-tooltip="true" />
55
+        <el-table-column label="年龄" align="center" key="age" prop="age" v-if="columns[2].visible"
56
+          :show-overflow-tooltip="true" />
57
+        <el-table-column label="性别" align="center" key="sex" prop="sex" v-if="columns[2].visible"
58
+          :show-overflow-tooltip="true">
59
+          <template slot-scope="scope">
60
+            {{ scope.row.sex == 0 ? '男' : '女' }}
61
+          </template>
62
+        </el-table-column>
63
+        <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible"
64
+          width="120" />
65
+        <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible"
66
+          :show-overflow-tooltip="true" />
67
+        <el-table-column label="岗级" align="center" key="postLevel" v-if="columns[3].visible"
68
+          :show-overflow-tooltip="true">
69
+          <template slot-scope="scope">
70
+            {{ formatLevel(scope.row.postLevel, scope.row.salaryLevel,
71
+      dict.type.sys_user_postlevel, dict.type.sys_user_salarylevel) }}
72
+          </template>
73
+        </el-table-column>
74
+        <el-table-column label="职称" align="center" key="titles" prop="titles" v-if="columns[2].visible"
75
+          :show-overflow-tooltip="true">
76
+          <template slot-scope="scope">
77
+            {{ (dict.type.sys_user_titles[scope.row.titles]) ? (dict.type.sys_user_titles[scope.row.titles]).label : ""
78
+            }}
79
+          </template>
80
+        </el-table-column>
81
+        <el-table-column label="执业证书" align="center" key="certificates" prop="certificates" v-if="columns[2].visible"
82
+          :show-overflow-tooltip="true">
83
+          <template slot-scope="scope">
84
+            {{ formatCrtificates(dict.type.sys_user_certificates, scope.row.certificates) }}
85
+          </template>
86
+        </el-table-column>
87
+        <el-table-column label="入职年月" align="center" key="entryDate" prop="entryDate" v-if="columns[2].visible"
88
+          :show-overflow-tooltip="true">
89
+          <template slot-scope="scope">
90
+            <span>{{ parseTime(scope.row.entryDate, '{y}-{m}') }}</span>
91
+          </template>
92
+        </el-table-column>
93
+        <el-table-column label="固定成本(天)" align="center" key="costDay" prop="costDay" v-if="columns[2].visible"
94
+          :show-overflow-tooltip="true">
95
+          <template slot-scope="scope">
96
+
97
+          </template>
98
+        </el-table-column>
99
+        <el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
100
+          <template slot-scope="scope">
101
+            <el-tag type="success" v-if="scope.row.status == 0">在职</el-tag>
102
+            <el-tag type="danger" v-if="scope.row.status == 1">离职</el-tag>
103
+            <el-tag type="warning" v-if="scope.row.status == 2">退休</el-tag>
104
+            <!-- <el-switch v-model="scope.row.status" active-value="0" inactive-value="1"
105
+              @change="handleStatusChange(scope.row)"></el-switch> -->
106
+          </template>
107
+        </el-table-column>
108
+
109
+        <el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
110
+          <template slot-scope="scope" v-if="scope.row.userId !== 1">
111
+            <el-button size="mini" type="text" icon="el-icon-view" v-hasPermi="['system:user:edit']"
112
+              @click="handleView(scope.row)">详情</el-button>
113
+            <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
114
+              v-hasPermi="['system:user:edit']">修改</el-button>
115
+            <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
116
+              v-hasPermi="['system:user:remove']">删除</el-button>
117
+          </template>
118
+        </el-table-column>
119
+      </el-table>
120
+
121
+      <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
122
+        @pagination="getList" />
123
+    </el-row>
124
+
125
+    <!-- 添加或修改用户配置对话框 -->
126
+    <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
127
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
128
+        <el-row>
129
+          <el-col :span="12">
130
+            <el-form-item label="姓名" prop="nickName">
131
+              <el-input v-model="form.nickName" placeholder="请输入姓名" maxlength="30" />
132
+            </el-form-item>
133
+          </el-col>
134
+          <el-col :span="12">
135
+            <el-form-item label="归属部门" prop="deptId">
136
+              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
137
+            </el-form-item>
138
+          </el-col>
139
+        </el-row>
140
+        <el-row>
141
+          <el-col :span="12">
142
+            <el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
143
+              <el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
144
+            </el-form-item>
145
+          </el-col>
146
+          <el-col :span="12">
147
+            <el-form-item label="入职年月" prop="entryDate">
148
+              <el-date-picker v-model="form.entryDate" type="month" placeholder="请输入入职年月" />
149
+            </el-form-item>
150
+          </el-col>
151
+        </el-row>
152
+        <el-row>
153
+          <el-col :span="12">
154
+            <el-form-item label="手机号码" prop="phonenumber">
155
+              <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
156
+            </el-form-item>
157
+          </el-col>
158
+          <el-col :span="12">
159
+            <el-form-item label="出生年月" prop="birthday">
160
+              <el-date-picker v-model="form.birthday" type="month" placeholder="请输入出生年月" />
161
+            </el-form-item>
162
+          </el-col>
163
+        </el-row>
164
+        <el-row>
165
+          <el-col :span="12">
166
+            <el-form-item label="用户性别">
167
+              <!-- <el-select v-model="form.sex" placeholder="请选择性别">
168
+                <el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label"
169
+                  :value="dict.value"></el-option>
170
+              </el-select> -->
171
+              <el-radio-group v-model="form.sex">
172
+                <el-radio v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.value">{{ dict.label
173
+                  }}</el-radio>
174
+              </el-radio-group>
175
+            </el-form-item>
176
+          </el-col>
177
+          <el-col :span="12">
178
+            <el-form-item label="状态">
179
+              <el-radio-group v-model="form.status">
180
+                <el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">
181
+                  {{ dict.label }}
182
+                </el-radio>
183
+              </el-radio-group>
184
+            </el-form-item>
185
+          </el-col>
186
+        </el-row>
187
+        <el-row>
188
+          <el-col :span="12">
189
+            <el-form-item label="技术职称">
190
+              <el-select v-model="form.titles" clearable placeholder="请输入技术职称">
191
+                <el-option v-for="dict in dict.type.sys_user_titles" :key="dict.value" :label="dict.label"
192
+                  :value="dict.value" />
193
+              </el-select>
194
+            </el-form-item>
195
+          </el-col>
196
+          <el-col :span="12">
197
+            <el-form-item label="执业证书">
198
+              <el-select v-model="form.certificates" multiple placeholder="请输入执业证书">
199
+                <el-option v-for="dict in dict.type.sys_user_certificates" :key="dict.value" :label="dict.label"
200
+                  :value="dict.value" />
201
+              </el-select>
202
+            </el-form-item>
203
+          </el-col>
204
+        </el-row>
205
+        <el-row>
206
+          <el-col :span="12">
207
+            <el-form-item label="岗位">
208
+              <el-select v-model="form.postIds" multiple placeholder="请选择岗位">
209
+                <el-option v-for="item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId"
210
+                  :disabled="item.status == 1"></el-option>
211
+              </el-select>
212
+            </el-form-item>
213
+          </el-col>
214
+          <el-col :span="12">
215
+            <el-form-item label="岗级" prop="postlevel">
216
+              <el-col :span="12">
217
+                <el-select v-model="form.postLevel" placeholder="请选择">
218
+                  <el-option v-for="dict in dict.type.sys_user_postlevel" :key="dict.value" :label="dict.label"
219
+                    :value="dict.value" />
220
+                </el-select>
221
+              </el-col>
222
+              <el-col :span="12">
223
+                <el-select v-model="form.salaryLevel" placeholder="请选择">
224
+                  <el-option v-for="dict in dict.type.sys_user_salarylevel" :key="dict.value" :label="dict.label"
225
+                    :value="dict.value" />
226
+                </el-select>
227
+              </el-col>
228
+            </el-form-item>
229
+          </el-col>
230
+        </el-row>
231
+        <el-row>
232
+          <el-col :span="12">
233
+            <el-form-item label="项目经理">
234
+              <el-select v-model="form.pmLevel" placeholder="请输入项目经理等级">
235
+                <el-option v-for="dict in dict.type.sys_user_pmlevel" :key="dict.value" :label="dict.label"
236
+                  :value="dict.value" />
237
+              </el-select>
238
+            </el-form-item>
239
+            </el-form-item>
240
+          </el-col>
241
+        </el-row>
242
+        <el-row>
243
+          <el-col :span="24">
244
+            <el-form-item label="备注">
245
+              <el-input v-model="form.remark" type="textarea" placeholder="若员工属生产部门,请输入(检查员、内业、外业)"></el-input>
246
+            </el-form-item>
247
+          </el-col>
248
+        </el-row>
249
+      </el-form>
250
+      <div slot="footer" class="dialog-footer">
251
+        <el-button type="primary" @click="submitForm">确 定</el-button>
252
+        <el-button @click="cancel">取 消</el-button>
253
+      </div>
254
+    </el-dialog>
255
+
256
+    <!-- 用户导入对话框 -->
257
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
258
+      <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
259
+        :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
260
+        :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
261
+        <i class="el-icon-upload"></i>
262
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
263
+        <div class="el-upload__tip text-center" slot="tip">
264
+          <div class="el-upload__tip" slot="tip">
265
+            <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
266
+          </div>
267
+          <span>仅允许导入xls、xlsx格式文件。</span>
268
+          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
269
+            @click="importTemplate">下载模板</el-link>
270
+        </div>
271
+      </el-upload>
272
+      <div slot="footer" class="dialog-footer">
273
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
274
+        <el-button @click="upload.open = false">取 消</el-button>
275
+      </div>
276
+    </el-dialog>
277
+  </div>
278
+</template>
279
+
280
+<script>
281
+import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
282
+import { getToken } from "@/utils/auth";
283
+import Treeselect from "@riophae/vue-treeselect";
284
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
285
+
286
+export default {
287
+  name: "User",
288
+  dicts: ['sys_normal_disable', 'sys_user_sex', 'sys_user_titles', 'sys_user_certificates', 'sys_user_pmlevel', 'sys_user_postlevel', 'sys_user_salarylevel'],
289
+  components: { Treeselect },
290
+  data() {
291
+    return {
292
+      // 遮罩层
293
+      loading: true,
294
+      // 选中数组
295
+      ids: [],
296
+      // 非单个禁用
297
+      single: true,
298
+      // 非多个禁用
299
+      multiple: true,
300
+      // 显示搜索条件
301
+      showSearch: true,
302
+      // 总条数
303
+      total: 0,
304
+      // 用户表格数据
305
+      userList: null,
306
+      // 弹出层标题
307
+      title: "",
308
+      // 部门树选项
309
+      deptOptions: undefined,
310
+      deptList: [],
311
+      // 是否显示弹出层
312
+      open: false,
313
+      // 部门名称
314
+      deptName: undefined,
315
+      // 默认密码
316
+      initPassword: undefined,
317
+      // 日期范围
318
+      dateRange: [],
319
+      // 岗位选项
320
+      postOptions: [],
321
+      // 角色选项
322
+      roleOptions: [],
323
+      // 更新原因选项
324
+      updateReasonOptions: [
325
+        { value: '0', label: '误录修改' },
326
+        { value: '1', label: '正常调整' }
327
+      ],
328
+      certificates: [],
329
+      // 表单参数
330
+      form: {},
331
+      pm: false,
332
+      defaultProps: {
333
+        children: "children",
334
+        label: "label"
335
+      },
336
+      // 用户导入参数
337
+      upload: {
338
+        // 是否显示弹出层(用户导入)
339
+        open: false,
340
+        // 弹出层标题(用户导入)
341
+        title: "",
342
+        // 是否禁用上传
343
+        isUploading: false,
344
+        // 是否更新已经存在的用户数据
345
+        updateSupport: 0,
346
+        // 设置上传的请求头部
347
+        headers: { Authorization: "Bearer " + getToken() },
348
+        // 上传的地址
349
+        url: process.env.VUE_APP_BASE_API + "/system/user/importData"
350
+      },
351
+      // 查询参数
352
+      queryParams: {
353
+        pageNum: 1,
354
+        pageSize: 10,
355
+        userName: undefined,
356
+        phonenumber: undefined,
357
+        status: undefined,
358
+        deptId: undefined
359
+      },
360
+      // 列信息
361
+      columns: [
362
+        { key: 0, label: `用户编号`, visible: true },
363
+        { key: 1, label: `用户名称`, visible: true },
364
+        { key: 2, label: `用户昵称`, visible: true },
365
+        { key: 3, label: `部门`, visible: true },
366
+        { key: 4, label: `手机号码`, visible: true },
367
+        { key: 5, label: `状态`, visible: true },
368
+        { key: 6, label: `创建时间`, visible: true }
369
+      ],
370
+      // 表单校验
371
+      rules: {
372
+        userName: [
373
+          { required: true, message: "用户名称不能为空", trigger: "blur" },
374
+          { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
375
+        ],
376
+        nickName: [
377
+          { required: true, message: "用户昵称不能为空", trigger: "blur" }
378
+        ],
379
+        password: [
380
+          { required: true, message: "用户密码不能为空", trigger: "blur" },
381
+          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
382
+        ],
383
+        email: [
384
+          {
385
+            type: "email",
386
+            message: "请输入正确的邮箱地址",
387
+            trigger: ["blur", "change"]
388
+          }
389
+        ],
390
+        phonenumber: [
391
+          {
392
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
393
+            message: "请输入正确的手机号码",
394
+            trigger: "blur"
395
+          }
396
+        ]
397
+      },
398
+      outCrtificates: []
399
+    };
400
+  },
401
+  watch: {
402
+    // 根据名称筛选部门树
403
+    deptName(val) {
404
+      this.$refs.tree.filter(val);
405
+    }
406
+  },
407
+  created() {
408
+    this.getList();
409
+    this.getDeptTree();
410
+    this.getConfigKey("sys.user.initPassword").then(response => {
411
+      this.initPassword = response.msg;
412
+    });
413
+  },
414
+  methods: {
415
+    /** 查询用户列表 */
416
+    getList() {
417
+      this.loading = true;
418
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
419
+        this.userList = response.rows;
420
+        this.userList = this.userList.slice(1)
421
+        this.total = response.total;
422
+        this.loading = false;
423
+      }
424
+      );
425
+    },
426
+    /** 查询部门下拉树结构 */
427
+    getDeptTree() {
428
+      deptTreeSelect().then(response => {
429
+        this.deptOptions = response.data;
430
+        this.deptList = response.data[0].children
431
+      });
432
+    },
433
+    // 筛选节点
434
+    filterNode(value, data) {
435
+      if (!value) return true;
436
+      return data.label.indexOf(value) !== -1;
437
+    },
438
+    // 节点单击事件
439
+    handleNodeClick(data) {
440
+      this.queryParams.deptId = data.id;
441
+      this.handleQuery();
442
+    },
443
+    // 用户状态修改
444
+    handleStatusChange(row) {
445
+      let text = row.status === "0" ? "启用" : "停用";
446
+      this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function () {
447
+        return changeUserStatus(row.userId, row.status);
448
+      }).then(() => {
449
+        this.$modal.msgSuccess(text + "成功");
450
+      }).catch(function () {
451
+        row.status = row.status === "0" ? "1" : "0";
452
+      });
453
+    },
454
+    // 取消按钮
455
+    cancel() {
456
+      this.open = false;
457
+      this.reset();
458
+    },
459
+    // 表单重置
460
+    reset() {
461
+      this.form = {
462
+        userId: undefined,
463
+        deptId: undefined,
464
+        userName: undefined,
465
+        nickName: undefined,
466
+        password: undefined,
467
+        phonenumber: undefined,
468
+        email: undefined,
469
+        sex: undefined,
470
+        titles: undefined,
471
+        status: "0",
472
+        remark: undefined,
473
+        postIds: [],
474
+        roleIds: []
475
+      };
476
+      this.resetForm("form");
477
+    },
478
+    /** 搜索按钮操作 */
479
+    handleQuery() {
480
+      this.queryParams.pageNum = 1;
481
+      this.getList();
482
+    },
483
+    /** 重置按钮操作 */
484
+    resetQuery() {
485
+      this.dateRange = [];
486
+      this.resetForm("queryForm");
487
+      this.queryParams.deptId = undefined;
488
+      this.$refs.tree.setCurrentKey(null);
489
+      this.handleQuery();
490
+    },
491
+    // 多选框选中数据
492
+    handleSelectionChange(selection) {
493
+      this.ids = selection.map(item => item.userId);
494
+      this.single = selection.length != 1;
495
+      this.multiple = !selection.length;
496
+    },
497
+    // 更多操作触发
498
+    handleCommand(command, row) {
499
+      switch (command) {
500
+        case "handleResetPwd":
501
+          this.handleResetPwd(row);
502
+          break;
503
+        case "handleAuthRole":
504
+          this.handleAuthRole(row);
505
+          break;
506
+        default:
507
+          break;
508
+      }
509
+    },
510
+    /** 新增按钮操作 */
511
+    handleAdd() {
512
+      this.reset();
513
+      getUser().then(response => {
514
+        this.postOptions = response.posts;
515
+        this.roleOptions = response.roles;
516
+        this.open = true;
517
+        this.title = "添加用户";
518
+        this.form.password = this.initPassword;
519
+      });
520
+    },
521
+    // 查看人员详情按钮
522
+    handleView(row) {
523
+      this.$router.push({
524
+        path: '/staff/info',
525
+        query: {
526
+          userId: row.userId,
527
+          nickName: row.nickName,
528
+          postIds: this.form.postIds,
529
+          crtificates: this.crtificates
530
+        }
531
+      })
532
+    },
533
+    /** 修改按钮操作 */
534
+    handleUpdate(row) {
535
+      this.reset();
536
+      const userId = row.userId || this.ids;
537
+      getUser(userId).then(response => {
538
+        this.form = response.data;
539
+        this.postOptions = response.posts;
540
+        this.roleOptions = response.roles;
541
+        this.$set(this.form, "postIds", response.postIds);
542
+        this.$set(this.form, "roleIds", response.roleIds);
543
+        if (response.data.certificates != "" && response.data.certificates != undefined && response.data.certificates != null) {
544
+          for (let i = 0; i < response.data.certificates.split(",").length; i++)
545
+            this.certificates[i] = response.data.certificates.split(",")[i]
546
+          this.$set(this.form, "certificates", this.certificates);
547
+        }
548
+        this.open = true;
549
+        this.title = "修改用户";
550
+        this.form.password = "";
551
+      });
552
+    },
553
+    /** 重置密码按钮操作 */
554
+    handleResetPwd(row) {
555
+      this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
556
+        confirmButtonText: "确定",
557
+        cancelButtonText: "取消",
558
+        closeOnClickModal: false,
559
+        inputPattern: /^.{5,20}$/,
560
+        inputErrorMessage: "用户密码长度必须介于 5 和 20 之间"
561
+      }).then(({ value }) => {
562
+        resetUserPwd(row.userId, value).then(response => {
563
+          this.$modal.msgSuccess("修改成功,新密码是:" + value);
564
+        });
565
+      }).catch(() => { });
566
+    },
567
+    /** 分配角色操作 */
568
+    handleAuthRole: function (row) {
569
+      const userId = row.userId;
570
+      this.$router.push("/system/user-auth/role/" + userId);
571
+    },
572
+    /** 提交按钮 */
573
+    submitForm: function () {
574
+      this.$refs["form"].validate(valid => {
575
+        if (valid) {
576
+          if (this.form.userId != undefined) {
577
+            if (this.form.certificates != "" && this.form.certificates != undefined && this.form.certificates != null)
578
+              this.form.certificates = this.form.certificates.join(',')
579
+            else
580
+              this.form.certificates = '';
581
+            updateUser(this.form).then(response => {
582
+              this.$modal.msgSuccess("修改成功");
583
+              this.open = false;
584
+              this.getList();
585
+            });
586
+          } else {
587
+            addUser(this.form).then(response => {
588
+              this.$modal.msgSuccess("新增成功");
589
+              this.open = false;
590
+              this.getList();
591
+            });
592
+          }
593
+        }
594
+      });
595
+    },
596
+    /** 删除按钮操作 */
597
+    handleDelete(row) {
598
+      const userIds = row.userId || this.ids;
599
+      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function () {
600
+        return delUser(userIds);
601
+      }).then(() => {
602
+        this.getList();
603
+        this.$modal.msgSuccess("删除成功");
604
+      }).catch(() => { });
605
+    },
606
+    /** 导出按钮操作 */
607
+    handleExport() {
608
+      this.download('system/user/export', {
609
+        ...this.queryParams
610
+      }, `user_${new Date().getTime()}.xlsx`)
611
+    },
612
+    /** 导入按钮操作 */
613
+    handleImport() {
614
+      this.upload.title = "用户导入";
615
+      this.upload.open = true;
616
+    },
617
+    /** 下载模板操作 */
618
+    importTemplate() {
619
+      this.download('system/user/importTemplate', {
620
+      }, `user_template_${new Date().getTime()}.xlsx`)
621
+    },
622
+    // 文件上传中处理
623
+    handleFileUploadProgress(event, file, fileList) {
624
+      this.upload.isUploading = true;
625
+    },
626
+    // 文件上传成功处理
627
+    handleFileSuccess(response, file, fileList) {
628
+      this.upload.open = false;
629
+      this.upload.isUploading = false;
630
+      this.$refs.upload.clearFiles();
631
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
632
+      this.getList();
633
+    },
634
+    // 提交上传文件
635
+    submitFileForm() {
636
+      this.$refs.upload.submit();
637
+    },
638
+    // 格式化表格里的薪资岗级
639
+    formatLevel(postLevel, salaryLevel, postLevelList, salaryLevelList) {
640
+      if (postLevel && salaryLevel) {
641
+        let post = postLevelList[postLevel].label
642
+        let salary = salaryLevelList[salaryLevel].label
643
+        return post + salary
644
+      } else {
645
+        return ''
646
+      }
647
+    },
648
+    formatCrtificates(arr, val) {
649
+      if (val != null && val != undefined && val != "") {
650
+        let valArr = val.split(',');
651
+        let outCrtificates = []
652
+        console.log(valArr);
653
+        for (let i of valArr) {
654
+          outCrtificates.push(arr[i].label)
655
+        }
656
+        return outCrtificates.join(' / ')
657
+      }
658
+    }
659
+  }
660
+};
661
+</script>

+ 188
- 0
oa-ui/src/views/oa/staff/info.vue 查看文件

@@ -0,0 +1,188 @@
1
+<template>
2
+  <div class="bg">
3
+    <div class="header">
4
+      <div class="back">
5
+        <el-button type="primary" plain>返回</el-button>
6
+      </div>
7
+      <div class="title">
8
+        {{ '【' + this.form.nickName + '】' }}详细信息
9
+      </div>
10
+    </div>
11
+    <el-row class="app-container" :gutter="20">
12
+      <el-col :span="6" class="userInfo">
13
+        <div class="text-center">
14
+          <div class="avatar">
15
+            <img :src="avatar" class="user-avatar" />
16
+          </div>
17
+          <div class="user-name">{{ this.form.nickName }}</div>
18
+          <div class="user-sex">{{ this.form.age + '岁 ' }} {{ this.form.sex == '0' ? ' 男' : ' 女' }}</div>
19
+        </div>
20
+        <div class="info-item">
21
+          <svg-icon icon-class="car" class="info-icon"></svg-icon>
22
+          <span class="item-label">职称:</span>
23
+          <span>{{ (dict.type.sys_user_titles[this.form.titles]) ?
24
+          (dict.type.sys_user_titles[this.form.titles]).label
25
+          : "" }}</span>
26
+        </div>
27
+        <div class="info-item">
28
+          <svg-icon icon-class="dept" class="info-icon"></svg-icon>
29
+          <span class="item-label">部门:</span>
30
+          <span>{{ postData }}</span>
31
+        </div>
32
+        <div class="info-item">
33
+          <svg-icon icon-class="telephone" class="info-icon"></svg-icon>
34
+          <span class="item-label">联系电话:</span>
35
+          <span>{{ form.phonenumber }}</span>
36
+        </div>
37
+        <div class="info-item">
38
+          <svg-icon icon-class="telephone" class="info-icon"></svg-icon>
39
+          <span class="item-label">执业证书:</span>
40
+          <span>{{ }}</span>
41
+        </div>
42
+      </el-col>
43
+      <el-col :span="18"></el-col>
44
+    </el-row>
45
+  </div>
46
+</template>
47
+
48
+<script>
49
+import userAvatar from "@/views/system/user/profile/userAvatar.vue";
50
+import { getUser } from "@/api/system/user"
51
+import { mapGetters } from "vuex";
52
+export default {
53
+  components: { userAvatar },
54
+  dicts: ['sys_normal_disable', 'sys_user_sex', 'sys_user_titles', 'sys_user_certificates', 'sys_user_pmlevel', 'sys_user_postlevel', 'sys_user_salarylevel'],
55
+  computed: {
56
+    ...mapGetters(["avatar"]),
57
+  },
58
+  created() {
59
+    if (this.$route.query) {
60
+      this.form.userId = this.$route.query.userId
61
+      this.form.nickName = this.$route.query.nickName
62
+    }
63
+    this.getUserInfo(this.$route.query.userId);
64
+  },
65
+  data() {
66
+    return {
67
+      form: {
68
+        userId: undefined,
69
+        nickName: '',
70
+        dept: {
71
+          deptName: ''
72
+        }
73
+      },
74
+      postOptions: [],
75
+      postData: ''
76
+    }
77
+  },
78
+  methods: {
79
+    getUserInfo(id) {
80
+      getUser(id).then(res => {
81
+        console.log(res);
82
+        this.postOptions = res.posts;
83
+        if (res.data) {
84
+          this.formartForm(res.data);
85
+          this.form = res.data;
86
+          let postArr = [];
87
+          for (let post of res.posts) {
88
+            for (let postid of res.postIds) {
89
+              if (postid == post.postId) {
90
+                postArr.push(post.postName)
91
+              }
92
+            }
93
+          }
94
+          this.postData = '中水成勘测绘公司-' + postArr.join('-')
95
+        }
96
+      })
97
+    },
98
+    formartForm(user) {
99
+      // if (user.certificates != null && user.certificates != undefined && user.certificates != "") {
100
+      //   let arr = user.certificates.split(',');
101
+      //   let cerArr = this.dict.type.sys_user_certificates
102
+      //   cerArr.map(item =>{
103
+      //     for(let a of arr){
104
+      //       if(a == item.value){
105
+
106
+      //       }
107
+      //     }
108
+      //   })
109
+      // }
110
+      // console.log();
111
+
112
+    }
113
+  },
114
+}
115
+</script>
116
+
117
+<style lang="scss" scoped>
118
+.bg {
119
+  background-color: #F0F2F5;
120
+  height: 100vh;
121
+}
122
+
123
+.header {
124
+  background-color: #fff;
125
+  height: 110px;
126
+  display: flex;
127
+  align-items: center;
128
+
129
+
130
+  .back {
131
+    margin-left: 30px;
132
+    flex: 1;
133
+  }
134
+
135
+  .title {
136
+    text-align: center;
137
+    flex: 24;
138
+    font-size: 25px;
139
+    padding-right: 100px;
140
+  }
141
+}
142
+
143
+.userInfo {
144
+  background-color: #fff;
145
+
146
+  .avatar {
147
+    text-align: center;
148
+
149
+    // padding: 10px 0;
150
+    .user-avatar {
151
+      width: 150px;
152
+      height: 150px;
153
+      border-radius: 50%;
154
+    }
155
+
156
+  }
157
+
158
+  .user-name {
159
+    font-size: 18px;
160
+    font-weight: bold;
161
+  }
162
+
163
+  .user-sex {
164
+    line-height: 30px;
165
+    font-size: 14px;
166
+    color: #797979;
167
+  }
168
+
169
+  .info-item {
170
+    line-height: 30px;
171
+    color: #5A5A5A;
172
+    font-size: 16px;
173
+    padding-left: 30px;
174
+
175
+    .info-icon {
176
+      font-size: 20px;
177
+      margin-right: 10px;
178
+      vertical-align: middle;
179
+    }
180
+
181
+    .item-label {
182
+      // width: 110px;
183
+      // text-align: right;
184
+      display: inline-block;
185
+    }
186
+  }
187
+}
188
+</style>

Loading…
取消
儲存