ソースを参照

新增用车申请

余思翰 1年前
コミット
fbb2a6a7e2

+ 7
- 0
oa-ui/src/store/getters.js ファイルの表示

@@ -1,3 +1,9 @@
1
+/*
2
+ * @Author: ysh
3
+ * @Date: 2024-01-03 09:23:11
4
+ * @LastEditors: 
5
+ * @LastEditTime: 2024-02-29 14:57:41
6
+ */
1 7
 const getters = {
2 8
   sidebar: state => state.app.sidebar,
3 9
   size: state => state.app.size,
@@ -8,6 +14,7 @@ const getters = {
8 14
   token: state => state.user.token,
9 15
   avatar: state => state.user.avatar,
10 16
   name: state => state.user.name,
17
+  deptName: state => state.user.deptName,
11 18
   introduction: state => state.user.introduction,
12 19
   roles: state => state.user.roles,
13 20
   permissions: state => state.user.permissions,

+ 7
- 1
oa-ui/src/store/modules/user.js ファイルの表示

@@ -7,6 +7,7 @@ const user = {
7 7
     id: '',
8 8
     name: '',
9 9
     avatar: '',
10
+    deptName:'',
10 11
     roles: [],
11 12
     permissions: []
12 13
   },
@@ -21,6 +22,9 @@ const user = {
21 22
     SET_NAME: (state, name) => {
22 23
       state.name = name
23 24
     },
25
+    SET_DEPTNAME:(state, deptName) => {
26
+      state.deptName = deptName
27
+    },
24 28
     SET_AVATAR: (state, avatar) => {
25 29
       state.avatar = avatar
26 30
     },
@@ -55,6 +59,7 @@ const user = {
55 59
       return new Promise((resolve, reject) => {
56 60
         getInfo().then(res => {
57 61
           const user = res.user
62
+          console.log(user);
58 63
           const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/user.png") : process.env.VUE_APP_BASE_API + user.avatar;
59 64
           if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
60 65
             commit('SET_ROLES', res.roles)
@@ -63,7 +68,8 @@ const user = {
63 68
             commit('SET_ROLES', ['ROLE_DEFAULT'])
64 69
           }
65 70
           commit('SET_ID', user.userId)
66
-          commit('SET_NAME', user.userName)
71
+          commit('SET_NAME', user.nickName)
72
+          commit('SET_DEPTNAME',user.dept.deptName)
67 73
           commit('SET_AVATAR', avatar)
68 74
           resolve(res)
69 75
         }).catch(error => {

+ 167
- 0
oa-ui/src/views/flowable/form/carForm.vue ファイルの表示

@@ -0,0 +1,167 @@
1
+<template>
2
+  <div>
3
+    <h2 style="text-align: center;">用车申请表</h2>
4
+    <div>
5
+      <el-form :model="form" label-width="100px">
6
+        <el-row :gutter="20">
7
+          <el-col :span="6" :xs="24">
8
+            <el-form-item label="申请人:" prop="user">
9
+              <el-input v-model="form.user"></el-input>
10
+            </el-form-item>
11
+          </el-col>
12
+          <el-col :span="6" :xs="24">
13
+            <el-form-item label="所在部门:" prop="deptName">
14
+              <el-input v-model="form.deptName"></el-input>
15
+            </el-form-item>
16
+          </el-col>
17
+          <el-col :span="6" :xs="24">
18
+            <el-form-item label="申请时间:" prop="date">
19
+              <el-date-picker style="width:140px;" v-model="form.date" value-format="yyyy-MM-dd" type="date"
20
+                placeholder="选择日期">
21
+              </el-date-picker>
22
+            </el-form-item>
23
+          </el-col>
24
+        </el-row>
25
+
26
+        <el-form-item label="项目编号:" prop="projectNumber">
27
+          <el-select v-model="form.projectNumber" filterable placeholder="请选择" @change="handleSelectProject" clearable>
28
+            <el-option v-for="item in projectList" :key="item.value" :label="item.projectNumber" :value="item.projectId">
29
+            </el-option>
30
+          </el-select>
31
+          <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
32
+            <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
33
+            }}</el-descriptions-item>
34
+            <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
35
+            }}</el-descriptions-item>
36
+            <el-descriptions-item label="项目负责人" label-class-name="my-label">{{ chooseProject.projectLeader
37
+            }}</el-descriptions-item>
38
+            <el-descriptions-item label="承担部门" label-class-name="my-label">
39
+              <el-tag size="small">{{ chooseProject.underDept }}</el-tag>
40
+            </el-descriptions-item>
41
+            <el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
42
+            }}</el-descriptions-item>
43
+          </el-descriptions>
44
+        </el-form-item>
45
+        <el-form-item label="车牌号:">
46
+          <el-select v-model="form.projectNumber" filterable placeholder="请选择" @change="handleSelectProject" clearable>
47
+            <el-option v-for="item in projectList" :key="item.value" :label="item.projectNumber" :value="item.projectId">
48
+            </el-option>
49
+          </el-select>
50
+          <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
51
+            <el-descriptions-item label="车牌号" label-class-name="my-label">{{ chooseProject.projectNumber
52
+            }}</el-descriptions-item>
53
+            <el-descriptions-item label="车辆型号" label-class-name="my-label">{{ chooseProject.projectName
54
+            }}</el-descriptions-item>
55
+            <el-descriptions-item label="项目负责人" label-class-name="my-label">{{ chooseProject.projectLeader
56
+            }}</el-descriptions-item>
57
+            <el-descriptions-item label="承担部门" label-class-name="my-label">
58
+              <el-tag size="small">{{ chooseProject.underDept }}</el-tag>
59
+            </el-descriptions-item>
60
+            <el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
61
+            }}</el-descriptions-item>
62
+          </el-descriptions>
63
+        </el-form-item>
64
+        <el-row>
65
+          <el-col :span="6" :xs="24">
66
+            <el-form-item label="开始日期:">
67
+              <el-date-picker style="width:140px;" v-model="form.startTime" value-format="yyyy-MM-dd" type="date"
68
+                placeholder="选择日期" @change="calculateDay">
69
+              </el-date-picker>
70
+            </el-form-item>
71
+          </el-col>
72
+          <el-col :span="6" :xs="24">
73
+            <el-form-item label="结束日期:">
74
+              <el-date-picker style="width:140px;" v-model="form.endTime" value-format="yyyy-MM-dd" type="date"
75
+                placeholder="选择日期" @change="calculateDay">
76
+              </el-date-picker>
77
+            </el-form-item>
78
+          </el-col>
79
+          <el-col :span="8" :xs="24">
80
+            <el-form-item label="共计:">
81
+              {{ form.day + '天' }}
82
+            </el-form-item>
83
+          </el-col>
84
+        </el-row>
85
+
86
+        <el-form-item label="驾驶员:">
87
+          <el-radio-group v-model="form.driver">
88
+            <el-radio :label="3">备选项</el-radio>
89
+            <el-radio :label="6">备选项</el-radio>
90
+            <el-radio :label="9">备选项</el-radio>
91
+          </el-radio-group>
92
+        </el-form-item>
93
+      </el-form>
94
+    </div>
95
+  </div>
96
+</template>
97
+
98
+<script>
99
+import { listProject, getProject } from "@/api/oa/project/project";
100
+export default {
101
+  created() {
102
+    this.form.user = this.$store.getters.name;
103
+    this.form.deptName = this.$store.getters.deptName;
104
+    this.getProjectList();
105
+  },
106
+  data() {
107
+    return {
108
+      form: {
109
+        date: new Date(),
110
+        day: ''
111
+      },
112
+      projectList: [],
113
+      driverList: [],
114
+      chooseProject: {},
115
+      isSelect: false
116
+    }
117
+  },
118
+  methods: {
119
+    // 查询项目列表
120
+    getProjectList() {
121
+      this.loading = true
122
+      listProject({
123
+        pageNum: 1,
124
+        pageSize: 9999999999
125
+      }).then(response => {
126
+        this.projectList = response.rows;
127
+      })
128
+    },
129
+    // 选择项目
130
+    handleSelectProject(val) {
131
+      if (val != "" && val != undefined && val != null) {
132
+        getProject(val).then(res => {
133
+          this.chooseProject = res.data;
134
+          this.isSelect = true
135
+        })
136
+      } else {
137
+        this.isSelect = false
138
+      }
139
+
140
+    },
141
+    calculateDay() {
142
+      if (this.form.startTime && this.form.endTime) {
143
+        let y1 = new Date(this.form.startTime);
144
+        let y2 = new Date(this.form.endTime);
145
+        if (y2 < y1) {
146
+          this.form.day = '';
147
+          return
148
+        }
149
+        let sub = Math.abs(y2 - y1);
150
+        let day = Math.floor(sub / (1000 * 60 * 60 * 24)) + 1;
151
+        this.form.day = day;
152
+      } else {
153
+        this.form.day = '';
154
+      }
155
+
156
+    }
157
+  },
158
+}
159
+</script>
160
+
161
+<style lang="scss" scoped></style>
162
+<style>
163
+.my-label {
164
+  width: 100px;
165
+  background: #E1F3D8;
166
+}
167
+</style>

+ 6
- 6
oa-ui/src/views/flowable/task/myProcess/index.vue ファイルの表示

@@ -264,7 +264,7 @@ export default {
264 264
     },
265 265
     /**  发起流程申请 */
266 266
     handleStartProcess(row) {
267
-      if (row.category == "assess") {
267
+      if (row.category == "assess" || row.category == "car") {
268 268
         getNextFlowNodeByStart({ deploymentId: row.deploymentId, variables: {} }).then(res => {
269 269
           let data = res.data;
270 270
           if (data.dataType === 'dynamic') {
@@ -289,13 +289,13 @@ export default {
289 289
             const formData = {};
290 290
             formData.disabled = true;
291 291
             formData.formBtns = false;
292
-            
292
+
293 293
             formData.formId = new Snowflake(1n, 1n, 0n).nextId().toString();
294 294
             if (row.id) {
295 295
               variables.variables = formData;
296 296
               // 启动流程并将表单数据加入流程变量
297 297
               definitionStart(row.id, JSON.stringify(variables)).then(res => {
298
-                
298
+
299 299
                 this.$modal.msgSuccess(res.msg);
300 300
                 let procInstanceId = res.data;
301 301
                 todoList({
@@ -303,7 +303,7 @@ export default {
303 303
                   pageSize: 99999999, processInsId: procInstanceId
304 304
                 }).then(toDoRes => {
305 305
                   let records = toDoRes.data.records;
306
-                  if(records.length == 1){
306
+                  if (records.length == 1) {
307 307
                     records = records[0]
308 308
                   }
309 309
                   this.$router.push({
@@ -333,8 +333,8 @@ export default {
333 333
             }
334 334
           }
335 335
         })
336
-      }else{
337
-        
336
+      } else {
337
+
338 338
       }
339 339
 
340 340
     },

+ 14
- 2
oa-ui/src/views/flowable/task/todo/detail/index.vue ファイルの表示

@@ -22,7 +22,8 @@
22 22
             v-else-if="taskForm.procDefName == '财务部考核'"></cw-table>
23 23
           <zh-table :tableForm="tableForm" :taskName="taskName" @submit="handleComplete"
24 24
             v-else-if="taskForm.procDefName == '综合事务部考核'"></zh-table>
25
-          <el-row type="flex" justify="center" v-if="taskName != '员工填报'">
25
+          <car-form v-else-if="taskForm.procDefName == '用车审批'"></car-form>
26
+          <el-row type="flex" justify="center" v-show="isShowApprove">
26 27
             <el-button v-if="!formKeyExist" icon="el-icon-edit-outline" type="success" size="mini"
27 28
               @click="handleComplete">审核通过
28 29
             </el-button>
@@ -161,6 +162,7 @@ import ZhTable from "../../../form/zhTable.vue";
161 162
 import JsTable from "../../../form/jsTable.vue";
162 163
 import XmTable from "../../../form/xmTable.vue";
163 164
 import CwTable from "../../../form/cwTable.vue";
165
+import carForm from "../../../form/carForm.vue";
164 166
 
165 167
 export default {
166 168
   name: "Record",
@@ -174,7 +176,8 @@ export default {
174 176
     JsTable,
175 177
     XmTable,
176 178
     CwTable,
177
-    JyTable
179
+    JyTable,
180
+    carForm
178 181
   },
179 182
   props: {},
180 183
   data() {
@@ -529,6 +532,15 @@ export default {
529 532
         this.completeTitle = "选择下一节点审核人";
530 533
       })
531 534
     },
535
+    // 是否显示审批通过
536
+    isShowApprove(){
537
+      debugger
538
+      if(this.taskName == '员工填报' || this.taskName == '用车申请'){
539
+        return false
540
+      }else{
541
+        return true
542
+      }
543
+    }
532 544
   },
533 545
 };
534 546
 </script>

読み込み中…
キャンセル
保存