Просмотр исходного кода

网页端:修改用车审批、设备审批、借款审批和职称记录的样式

余思翰 2 недель назад
Родитель
Сommit
962d5b9112

+ 571
- 287
oa-ui/src/views/flowable/form/finance/borrowForm.vue Просмотреть файл

@@ -10,296 +10,352 @@
10 10
             <return-comment :taskForm="taskForm" @isReturn="isReturn"></return-comment>
11 11
           </el-alert>
12 12
         </div>
13
-        <el-form ref="form" :model="form" :rules="rules" label-width="100px">
14
-          <el-row :gutter="20">
15
-            <el-col :md="6" :span="24">
16
-              <el-form-item label="申请人" prop="user.nickName">
17
-                {{ form.applierUser ? form.applierUser.nickName : form.user.nickName }}
18
-              </el-form-item>
19
-            </el-col>
20
-            <el-col :md="6" :span="24">
21
-              <el-form-item label="申请部门" prop="dept.deptName">
22
-                {{ form.dept.deptName }}
23
-              </el-form-item>
24
-            </el-col>
25
-            <el-col :md="6" :span="24">
26
-              <el-form-item label="申请时间" prop="date">
27
-                <el-date-picker style="width:140px;" v-model="form.applyDate" value-format="yyyy-MM-dd" type="date"
28
-                  placeholder="选择日期" disabled>
29
-                </el-date-picker>
30
-              </el-form-item>
31
-            </el-col>
32
-          </el-row>
33
-          <el-form-item label="借款类型" prop="borrowUsage" v-if="taskForm.procDefName == '借款审批'">
34
-            <el-radio-group v-model="form.borrowUsage" @change="hanldeChangeType" :disabled="taskName != '借款申请'">
35
-              <el-radio label="0">项目借款</el-radio>
36
-              <el-radio label="1">非项目借款</el-radio>
37
-              <el-radio label="2">工会借款</el-radio>
38
-              <el-radio label="3">党委借款</el-radio>
39
-              <el-radio label="4">团委借款</el-radio>
40
-            </el-radio-group>
41
-          </el-form-item>
42
-          <el-form-item label="借款事由" prop="applyReason" v-if="taskForm.procDefName == '借款审批' && !isProject">
43
-            <el-input v-model="form.applyReason" :disabled="taskName != '借款申请'"></el-input>
44
-          </el-form-item>
45
-          <el-form-item label="项目编号" prop="projectId" v-if="taskForm.procDefName == '借款审批' && isProject">
46
-            <el-button type="primary" size="mini" @click="openProject = true" v-if="taskName == '借款申请'">选择项目</el-button>
47
-            <el-descriptions border v-if="isSelect" style="margin-top: .125rem;" :column="1">
48
-              <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
49
-              }}</el-descriptions-item>
50
-              <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
51
-              }}</el-descriptions-item>
52
-              <el-descriptions-item label="项目负责人" label-class-name="my-label">{{ chooseProject.projectLeaderUser ?
53
-                chooseProject.projectLeaderUser.nickName : ''
54
-              }}</el-descriptions-item>
55
-              <el-descriptions-item label="承担部门" label-class-name="my-label">
56
-                <el-tag size="small">{{ chooseProject.undertakingDeptName }}</el-tag>
57
-              </el-descriptions-item>
58
-              <el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
59
-              }}</el-descriptions-item>
60
-            </el-descriptions>
61
-          </el-form-item>
62
-          <!-- <el-form-item label="借款明细"> -->
63
-          <table border="1" class="table">
64
-            <tr style="height:30px;font-weight:bold;font-family:'puhuiti'">
65
-              <td :colspan="8">借款明细</td>
66
-            </tr>
13
+        <el-form ref="form" :model="form" :rules="rules" class="borrow-table-form">
14
+          <div class="form-table-wrap">
15
+          <table class="form-table">
67 16
             <tr>
68
-              <td style="width:50px;">序号</td>
69
-              <td style="min-width:150px">开支项目</td>
70
-              <td>单位</td>
71
-              <td>单价</td>
72
-              <td>数量</td>
73
-              <td>申请金额</td>
74
-              <!-- <td v-if="form.borrowUsage == 0 || form.borrowUsage == 1">项目管理部校核金额</td> -->
75
-              <td v-if="form.borrowUsage == 0 || form.borrowUsage == 1">分管领导审核金额</td>
76
-              <td>操作</td>
77
-            </tr>
78
-            <tr v-for="(detail, index) in detailList" :key="index">
79
-              <td>
80
-                {{ index + 1 }}
81
-              </td>
82
-              <td>
83
-                <el-select v-model="detail.borrowItem" placeholder="请选择开支项" clearable @change="handleExpenseChange"
84
-                  style="width: 100%;" :disabled="taskName != '借款申请'" v-if="form.borrowUsage == 0">
85
-                  <el-option v-for="dict in dict.type.cmc_borrow_expense" clearable :key="dict.value" :label="dict.label"
86
-                    :value="dict.value" />
87
-                  <!-- <el-option label="+新增更多开支项..." value="new_expense" /> -->
88
-                </el-select>
89
-                <el-autocomplete v-model="detail.borrowItem" :fetch-suggestions="querySearchAsync" placeholder="请输入内容"
90
-                  :disabled="taskName != '借款申请'" v-else></el-autocomplete>
91
-
17
+              <td colspan="2" class="label-cell">申请人</td>
18
+              <td colspan="2">
19
+                <el-form-item prop="user.nickName" class="table-form-item">
20
+                  {{ form.applierUser ? form.applierUser.nickName : form.user.nickName }}
21
+                </el-form-item>
92 22
               </td>
93
-              <td>
94
-                <el-input v-model="detail.unit" :disabled="taskName != '借款申请'"></el-input>
23
+              <td colspan="2" class="label-cell">申请部门</td>
24
+              <td colspan="2">
25
+                <el-form-item prop="dept.deptName" class="table-form-item">
26
+                  {{ form.dept.deptName }}
27
+                </el-form-item>
95 28
               </td>
96
-              <td>
97
-                <el-input-number :controls="false" style="width:100%" v-model="detail.price"
98
-                  @change="calculateAmount(detail)" :disabled="taskName != '借款申请'"></el-input-number>
29
+              <td colspan="2" class="label-cell">申请日期</td>
30
+              <td colspan="2">
31
+                <el-form-item prop="date" class="table-form-item">
32
+                  <el-date-picker style="width: 100%;" v-model="form.applyDate" value-format="yyyy-MM-dd" type="date"
33
+                    placeholder="选择日期" disabled>
34
+                  </el-date-picker>
35
+                </el-form-item>
99 36
               </td>
100
-              <td>
101
-                <el-input-number :controls="false" style="width:100%" v-model="detail.quantity"
102
-                  @change="calculateAmount(detail)" :disabled="taskName != '借款申请'"></el-input-number>
37
+            </tr>
38
+
39
+            <template v-if="taskForm.procDefName == '借款审批'">
40
+              <tr>
41
+                <td colspan="2" class="label-cell">借款类型</td>
42
+                <td colspan="10">
43
+                  <el-form-item prop="borrowUsage" class="table-form-item">
44
+                    <el-radio-group v-model="form.borrowUsage" @change="hanldeChangeType" :disabled="taskName != '借款申请'">
45
+                      <el-radio label="0">项目借款</el-radio>
46
+                      <el-radio label="1">非项目借款</el-radio>
47
+                      <el-radio label="2">工会借款</el-radio>
48
+                      <el-radio label="3">党委借款</el-radio>
49
+                      <el-radio label="4">团委借款</el-radio>
50
+                    </el-radio-group>
51
+                  </el-form-item>
52
+                </td>
53
+              </tr>
54
+              <tr v-if="!isProject">
55
+                <td colspan="2" class="label-cell">借款事由</td>
56
+                <td colspan="10">
57
+                  <el-form-item prop="applyReason" class="table-form-item">
58
+                    <el-input v-model="form.applyReason" :disabled="taskName != '借款申请'"></el-input>
59
+                  </el-form-item>
60
+                </td>
61
+              </tr>
62
+              <template v-if="isProject">
63
+                <tr>
64
+                  <td colspan="2" class="label-cell">项目信息</td>
65
+                  <td colspan="10">
66
+                    <el-button type="primary" size="mini" @click="openProject = true" v-if="taskName == '借款申请'">选择项目</el-button>
67
+                    <template v-if="isSelect">
68
+                      <table class="inner-table">
69
+                        <tr>
70
+                          <td class="label-cell">项目编号</td>
71
+                          <td>{{ chooseProject.projectNumber }}</td>
72
+                          <td class="label-cell">项目名称</td>
73
+                          <td>{{ chooseProject.projectName }}</td>
74
+                        </tr>
75
+                        <tr>
76
+                          <td class="label-cell">项目负责人</td>
77
+                          <td>{{ chooseProject.projectLeaderUser ? chooseProject.projectLeaderUser.nickName : '' }}</td>
78
+                          <td class="label-cell">承担部门</td>
79
+                          <td>{{ chooseProject.undertakingDeptName }}</td>
80
+                        </tr>
81
+                        <tr>
82
+                          <td class="label-cell">项目类型</td>
83
+                          <td colspan="3">{{ chooseProject.projectType }}</td>
84
+                        </tr>
85
+                      </table>
86
+                    </template>
87
+                    <el-form-item prop="projectId" class="table-form-item" style="display: none;"></el-form-item>
88
+                  </td>
89
+                </tr>
90
+              </template>
91
+            </template>
92
+
93
+            <tr>
94
+              <td colspan="2" class="label-cell">借款明细</td>
95
+              <td colspan="10">
96
+                <table class="inner-table detail-inner-table">
97
+                  <tr>
98
+                    <td class="label-cell" style="width: 50px;">序号</td>
99
+                    <td class="label-cell" style="min-width: 150px;">开支项目</td>
100
+                    <td class="label-cell">单位</td>
101
+                    <td class="label-cell">单价</td>
102
+                    <td class="label-cell">数量</td>
103
+                    <td class="label-cell">申请金额</td>
104
+                    <td class="label-cell" v-if="form.borrowUsage == 0 || form.borrowUsage == 1">分管领导审核金额</td>
105
+                    <td class="label-cell">操作</td>
106
+                  </tr>
107
+                  <tr v-for="(detail, index) in detailList" :key="index">
108
+                    <td>{{ index + 1 }}</td>
109
+                    <td>
110
+                      <el-select v-model="detail.borrowItem" placeholder="请选择开支项" clearable @change="handleExpenseChange"
111
+                        style="width: 100%;" :disabled="taskName != '借款申请'" v-if="form.borrowUsage == 0">
112
+                        <el-option v-for="dict in dict.type.cmc_borrow_expense" clearable :key="dict.value" :label="dict.label"
113
+                          :value="dict.value" />
114
+                      </el-select>
115
+                      <el-autocomplete v-model="detail.borrowItem" :fetch-suggestions="querySearchAsync" placeholder="请输入内容"
116
+                        style="width: 100%;" :disabled="taskName != '借款申请'" v-else></el-autocomplete>
117
+                    </td>
118
+                    <td>
119
+                      <el-input v-model="detail.unit" :disabled="taskName != '借款申请'"></el-input>
120
+                    </td>
121
+                    <td>
122
+                      <el-input-number :controls="false" style="width: 100%;" v-model="detail.price"
123
+                        @change="calculateAmount(detail)" :disabled="taskName != '借款申请'"></el-input-number>
124
+                    </td>
125
+                    <td>
126
+                      <el-input-number :controls="false" style="width: 100%;" v-model="detail.quantity"
127
+                        @change="calculateAmount(detail)" :disabled="taskName != '借款申请'"></el-input-number>
128
+                    </td>
129
+                    <td>
130
+                      <el-input v-model="detail.applyAmount" :disabled="taskName != '借款申请'"></el-input>
131
+                    </td>
132
+                    <td v-if="form.borrowUsage == 0 || form.borrowUsage == 1">
133
+                      <el-input v-model="detail.managerAmount" :disabled="taskName != '分管审核' && taskName != '总经理审核'"
134
+                        @blur="calculateManagerAmount(detail)"></el-input>
135
+                    </td>
136
+                    <td>
137
+                      <el-button type="text" style="color: #F56C6C;" icon="el-icon-delete" size="mini"
138
+                        :disabled="taskName != '借款申请'" @click="deleDetailItem(index)">删除</el-button>
139
+                    </td>
140
+                  </tr>
141
+                </table>
142
+                <el-button class="mt10" icon="el-icon-plus" size="mini" @click="addDetailList()" type="primary" plain
143
+                  :disabled="taskName != '借款申请'">添加明细行</el-button>
103 144
               </td>
104
-              <td>
105
-                <el-input v-model="detail.applyAmount" :disabled="taskName != '借款申请'"></el-input>
145
+            </tr>
146
+
147
+            <tr v-if="isSelect" class="budget-row">
148
+              <td colspan="2" class="label-cell">最大借款金额</td>
149
+              <td colspan="2" class="budget-value-cell">
150
+                <div class="budget-amount">
151
+                  <span class="amount-num">{{ siteExpenses.toFixed(2) }}</span>
152
+                  <span class="amount-cn">大写:{{ formatNumberWithWan(siteExpenses) }}</span>
153
+                </div>
154
+                <el-button type="text" size="mini" class="budget-link-btn" @click="openBudget = true"
155
+                  v-hasPermi="['oa:budget:list']">查看预算</el-button>
106 156
               </td>
107
-              <td v-if="form.borrowUsage == 0 || form.borrowUsage == 1">
108
-                <el-input v-model="detail.managerAmount" :disabled="taskName != '分管审核' && taskName != '总经理审核'"
109
-                  @blur="calculateManagerAmount(detail)"></el-input>
157
+              <td colspan="2" class="label-cell">已申请借款</td>
158
+              <td colspan="2" class="budget-value-cell">
159
+                <div class="budget-amount is-danger">
160
+                  <span class="amount-num">{{ hasBorrow.toFixed(2) }}</span>
161
+                  <span class="amount-cn">大写:{{ formatNumberWithWan(hasBorrow) }}</span>
162
+                </div>
163
+                <el-button type="text" size="mini" class="budget-link-btn" @click="openBorrow = true">查看历史借款</el-button>
110 164
               </td>
111
-              <td>
112
-                <el-button type="text" style="color:#F56C6C" icon="el-icon-delete" size="mini" circle
113
-                  :disabled="taskName != '借款申请'" @click="deleDetailItem(index)">删除行</el-button>
165
+              <td colspan="2" class="label-cell">可用借款</td>
166
+              <td colspan="2" class="budget-value-cell">
167
+                <div class="budget-amount is-success">
168
+                  <span class="amount-num">{{ (siteExpenses - hasBorrow).toFixed(2) }}</span>
169
+                  <span class="amount-cn">大写:{{ formatNumberWithWan((siteExpenses - hasBorrow)) }}</span>
170
+                </div>
114 171
               </td>
115 172
             </tr>
116
-          </table>
117
-          <el-button icon="el-icon-plus" size="mini" @click="addDetailList()" type="primary" plain
118
-            :disabled="taskName != '借款申请'"></el-button>
119
-
120
-          <el-form-item label="最大借款金额" v-if="isSelect">
121
-            <el-tag>
122
-              <span class="low-money">{{ siteExpenses.toFixed(2) }}</span>
123
-              <span class="up-money">(大写:{{ formatNumberWithWan(siteExpenses) }})</span>
124
-            </el-tag>
125
-            <el-button type="primary" size="mini" @click="openBudget = true"
126
-              v-hasPermi="['oa:budget:list']">查看预算</el-button>
127
-          </el-form-item>
128
-          <el-form-item label="已申请借款" v-if="isSelect">
129
-            <el-tag type="danger">
130
-              <span class="low-money">{{ hasBorrow.toFixed(2) }}</span>
131
-              <span class="up-money">(大写:{{ formatNumberWithWan(hasBorrow) }})</span>
132
-            </el-tag>
133
-            <el-button type="primary" size="mini" @click="openBorrow = true">查看历史借款</el-button>
134
-          </el-form-item>
135
-          <el-form-item label="可用借款" v-if="isSelect">
136
-            <el-tag type="success">
137
-              <span class="low-money">{{ (siteExpenses - hasBorrow).toFixed(2) }}</span>
138
-              <span class="up-money">(大写:{{ formatNumberWithWan((siteExpenses - hasBorrow)) }})</span>
139
-            </el-tag>
140
-          </el-form-item>
141 173
 
142
-          <el-row :gutter="20">
143
-            <el-col :span="12" :xs="24">
144
-              <el-form-item label="申请金额" prop="applyAmount">
145
-                <el-input v-model="form.applyAmount" placeholder="请输入申请金额" :disabled="taskName != '借款申请'" />
146
-                <span style="color:#E74C3C" v-if="exceed && form.borrowUsage == 0">超过预算金额:{{ getMoreAmount('0')
147
-                }}</span>
148
-              </el-form-item>
149
-            </el-col>
150
-            <el-col :span="12" :xs="24">
151
-              <el-form-item label="核准金额" prop="managerAmount">
152
-                <el-input v-model="form.managerAmount" placeholder="请输入核准金额"
153
-                  :disabled="taskName != '分管审核' && taskName != '总经理审核' && taskName != '党工团审核'" />
154
-                <span style="color:#E74C3C" v-if="exceed && form.managerAmount && form.borrowUsage == 0">超过预算金额:{{
155
-                  getMoreAmount('1') }}</span>
156
-              </el-form-item>
157
-            </el-col>
158
-          </el-row>
159
-          <el-form-item label="申请人说明" prop="remark">
160
-            <el-input type="textarea" :rows="4" v-model="form.remark" placeholder="请输入申请人说明"
161
-              :disabled="taskName != '借款申请'" />
162
-          </el-form-item>
163
-          <el-form-item label="附件上传" prop="borrowDocument">
164
-            <FileUpload v-if="form.borrowDocument == null || form.borrowDocument == ''" :disabled="taskName != '借款申请'"
165
-              :limit="1" :filePathName="'借款/申请附件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']"
166
-              @input="getBorrowPath"></FileUpload>
167
-            <div v-if="form.borrowDocument">
168
-              <!-- <file-item :document="form.borrowDocument"></file-item> -->
169
-              <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.borrowDocument}`)">
170
-                {{ getFileName(form.borrowDocument) }}
171
-              </el-link>
172
-              <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.borrowDocument}`"
173
-                :underline="false" target="_blank">
174
-                <span class="el-icon-download">下载文件</span>
175
-              </el-link>
176
-              <FileUpload v-if="taskName == '借款申请'" :limit="1" :filePathName="'借款/申请附件'"
177
-                :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="getBorrowPath"></FileUpload>
178
-            </div>
179
-          </el-form-item>
180
-          <el-divider></el-divider>
181
-          <!-- 非党工团审核 -->
182
-          <div v-if="form.borrowUsage == 0 || form.borrowUsage == 1">
183
-            <el-form-item label="部门负责人意见" prop="deptComment" label-width="150px">
184
-              <el-input type="textarea" v-model="form.deptComment" placeholder="请输入部门负责人意见" :disabled="taskName != '部门审核'"
185
-                :autosize="{ minRows: 4 }" />
186
-            </el-form-item>
187
-            <el-row>
188
-              <el-col :span="6" :xs="24" :offset="12">
189
-                <el-form-item label="签名:" label-width="120px" v-if="showFormItem('部门审核')">
190
-                  <span class="auditor"> {{ form.deptUser ? form.deptUser.nickName : deptUser }} </span>
191
-                </el-form-item>
192
-              </el-col>
193
-              <el-col :span="6">
194
-                <el-form-item label="日期:" label-width="120px" v-if="showFormItem('部门审核')">
195
-                  <span> {{ form.deptTime ? form.deptTime : deptTime }} </span>
196
-                </el-form-item>
197
-              </el-col>
198
-            </el-row>
199
-            <el-form-item label="分管领导审核意见" prop="managerComment" label-width="150px">
200
-              <el-input type="textarea" v-model="form.managerComment" placeholder="请输入分管领导审核意见"
201
-                :disabled="taskName != '分管审核'" :autosize="{ minRows: 4 }" />
202
-            </el-form-item>
203
-            <el-row>
204
-              <el-col :span="6" :xs="24" :offset="12">
205
-                <el-form-item label="签名:" label-width="120px" v-if="showFormItem('分管审核')">
206
-                  <span class="auditor"> {{ form.managerUser ? form.managerUser.nickName : managerUser }} </span>
207
-                </el-form-item>
208
-              </el-col>
209
-              <el-col :span="6">
210
-                <el-form-item label="日期:" label-width="120px" v-if="showFormItem('分管审核')">
211
-                  <span> {{ form.managerTime ? form.managerTime : managerTime }} </span>
212
-                </el-form-item>
213
-              </el-col>
214
-            </el-row>
215
-            <el-form-item label="总经理审批意见" prop="zjlComment" label-width="150px">
216
-              <el-input type="textarea" v-model="form.zjlComment" placeholder="请输入总经理审批意见" :disabled="taskName != '总经理审核'"
217
-                :autosize="{ minRows: 4 }" />
218
-            </el-form-item>
219
-            <el-row>
220
-              <el-col :span="6" :xs="24" :offset="12">
221
-                <el-form-item label="签名:" label-width="120px" v-if="showFormItem('总经理审核')">
222
-                  <span class="auditor"> {{ form.zjlUser ? form.zjlUser.nickName : zjlUser }} </span>
223
-                </el-form-item>
224
-              </el-col>
225
-              <el-col :span="6">
226
-                <el-form-item label="日期:" label-width="120px" v-if="showFormItem('总经理审核')">
227
-                  <span> {{ form.zjlTime ? form.zjlTime : zjlTime }} </span>
174
+            <tr>
175
+              <td colspan="2" class="label-cell">申请金额</td>
176
+              <td colspan="4">
177
+                <el-form-item prop="applyAmount" class="table-form-item">
178
+                  <el-input v-model="form.applyAmount" placeholder="请输入申请金额" :disabled="taskName != '借款申请'" />
179
+                  <span class="exceed-tip" v-if="exceed && form.borrowUsage == 0">超过预算金额:{{ getMoreAmount('0') }}</span>
228 180
                 </el-form-item>
229
-              </el-col>
230
-            </el-row>
231
-            <el-form-item label="董事长批准意见" prop="dszComment" label-width="150px" v-if="exceed && !form.cwUser">
232
-              <el-input type="textarea" v-model="form.dszComment" placeholder="请输入董事长批准意见" :disabled="taskName != '董事长批准'"
233
-                :autosize="{ minRows: 4 }" />
234
-            </el-form-item>
235
-            <el-row v-if="exceed && !form.cwUser">
236
-              <el-col :span="6" :xs="24" :offset="12">
237
-                <el-form-item label="签名:" label-width="120px" v-if="showFormItem('董事长批准')">
238
-                  <span class="auditor"> {{ form.dszUser ? form.dszUser.nickName : dszUser }} </span>
181
+              </td>
182
+              <td colspan="2" class="label-cell">核准金额</td>
183
+              <td colspan="4">
184
+                <el-form-item prop="managerAmount" class="table-form-item">
185
+                  <el-input v-model="form.managerAmount" placeholder="请输入核准金额"
186
+                    :disabled="taskName != '分管审核' && taskName != '总经理审核' && taskName != '党工团审核'" />
187
+                  <span class="exceed-tip" v-if="exceed && form.managerAmount && form.borrowUsage == 0">超过预算金额:{{
188
+                    getMoreAmount('1') }}</span>
239 189
                 </el-form-item>
240
-              </el-col>
241
-              <el-col :span="6">
242
-                <el-form-item label="日期:" label-width="120px" v-if="showFormItem('董事长批准')">
243
-                  <span> {{ form.dszTime ? form.dszTime : dszTime }} </span>
190
+              </td>
191
+            </tr>
192
+
193
+            <tr>
194
+              <td colspan="2" class="label-cell">申请人说明</td>
195
+              <td colspan="10">
196
+                <el-form-item prop="remark" class="table-form-item">
197
+                  <el-input type="textarea" :rows="4" v-model="form.remark" placeholder="请输入申请人说明"
198
+                    :disabled="taskName != '借款申请'" />
244 199
                 </el-form-item>
245
-              </el-col>
246
-            </el-row>
247
-          </div>
248
-          <!-- 党工团审核 -->
249
-          <div v-if="form.borrowUsage != 0 && form.borrowUsage != 1">
250
-            <el-form-item :label="dgtLabel" prop="unionComment">
251
-              <el-input type="textarea" v-model="form.unionComment" placeholder="请输入审核意见"
252
-                :disabled="taskName != '党工团审核'" />
253
-            </el-form-item>
254
-            <el-row>
255
-              <el-col :span="6" :xs="24" :offset="12">
256
-                <el-form-item label="签名:" label-width="120px" v-if="showFormItem('党工团审核')">
257
-                  <span class="auditor"> {{ form.unionUser ? form.unionUser.nickName : unionUser }} </span>
200
+              </td>
201
+            </tr>
202
+
203
+            <tr>
204
+              <td colspan="2" class="label-cell">附件上传</td>
205
+              <td colspan="10">
206
+                <el-form-item prop="borrowDocument" class="table-form-item">
207
+                  <FileUpload v-if="form.borrowDocument == null || form.borrowDocument == ''" :disabled="taskName != '借款申请'"
208
+                    :limit="1" :filePathName="'借款/申请附件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']"
209
+                    @input="getBorrowPath"></FileUpload>
210
+                  <div v-if="form.borrowDocument">
211
+                    <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.borrowDocument}`)">
212
+                      {{ getFileName(form.borrowDocument) }}
213
+                    </el-link>
214
+                    <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.borrowDocument}`"
215
+                      :underline="false" target="_blank">
216
+                      <span class="el-icon-download">下载文件</span>
217
+                    </el-link>
218
+                    <FileUpload v-if="taskName == '借款申请'" :limit="1" :filePathName="'借款/申请附件'"
219
+                      :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="getBorrowPath"></FileUpload>
220
+                  </div>
258 221
                 </el-form-item>
259
-              </el-col>
260
-              <el-col :span="6">
261
-                <el-form-item label="日期:" label-width="120px" v-if="showFormItem('党工团审核')">
262
-                  <span> {{ form.unionTime ? form.unionTime : unionTime }} </span>
222
+              </td>
223
+            </tr>
224
+
225
+            <template v-if="form.borrowUsage == 0 || form.borrowUsage == 1">
226
+              <tr>
227
+                <td colspan="2" class="label-cell">部门负责人意见</td>
228
+                <td colspan="10">
229
+                  <el-form-item prop="deptComment" class="table-form-item">
230
+                    <el-input type="textarea" v-model="form.deptComment" placeholder="请输入部门负责人意见"
231
+                      :disabled="taskName != '部门审核'" :autosize="{ minRows: 4 }" />
232
+                  </el-form-item>
233
+                  <el-row class="sign-line" v-if="showFormItem('部门审核')">
234
+                    <el-col :span="6" :offset="11">
235
+                      签名:<span class="auditor">{{ form.deptUser ? form.deptUser.nickName : deptUser }}</span>
236
+                    </el-col>
237
+                    <el-col :span="6">
238
+                      日期:<span>{{ form.deptTime ? form.deptTime : deptTime }}</span>
239
+                    </el-col>
240
+                  </el-row>
241
+                </td>
242
+              </tr>
243
+              <tr>
244
+                <td colspan="2" class="label-cell">分管领导审核</td>
245
+                <td colspan="10">
246
+                  <el-form-item prop="managerComment" class="table-form-item">
247
+                    <el-input type="textarea" v-model="form.managerComment" placeholder="请输入分管领导审核意见"
248
+                      :disabled="taskName != '分管审核'" :autosize="{ minRows: 4 }" />
249
+                  </el-form-item>
250
+                  <el-row class="sign-line" v-if="showFormItem('分管审核')">
251
+                    <el-col :span="6" :offset="11">
252
+                      签名:<span class="auditor">{{ form.managerUser ? form.managerUser.nickName : managerUser }}</span>
253
+                    </el-col>
254
+                    <el-col :span="6">
255
+                      日期:<span>{{ form.managerTime ? form.managerTime : managerTime }}</span>
256
+                    </el-col>
257
+                  </el-row>
258
+                </td>
259
+              </tr>
260
+              <tr>
261
+                <td colspan="2" class="label-cell">总经理审批</td>
262
+                <td colspan="10">
263
+                  <el-form-item prop="zjlComment" class="table-form-item">
264
+                    <el-input type="textarea" v-model="form.zjlComment" placeholder="请输入总经理审批意见"
265
+                      :disabled="taskName != '总经理审核'" :autosize="{ minRows: 4 }" />
266
+                  </el-form-item>
267
+                  <el-row class="sign-line" v-if="showFormItem('总经理审核')">
268
+                    <el-col :span="6" :offset="11">
269
+                      签名:<span class="auditor">{{ form.zjlUser ? form.zjlUser.nickName : zjlUser }}</span>
270
+                    </el-col>
271
+                    <el-col :span="6">
272
+                      日期:<span>{{ form.zjlTime ? form.zjlTime : zjlTime }}</span>
273
+                    </el-col>
274
+                  </el-row>
275
+                </td>
276
+              </tr>
277
+              <tr v-if="exceed && !form.cwUser">
278
+                <td colspan="2" class="label-cell">董事长批准</td>
279
+                <td colspan="10">
280
+                  <el-form-item prop="dszComment" class="table-form-item">
281
+                    <el-input type="textarea" v-model="form.dszComment" placeholder="请输入董事长批准意见"
282
+                      :disabled="taskName != '董事长批准'" :autosize="{ minRows: 4 }" />
283
+                  </el-form-item>
284
+                  <el-row class="sign-line" v-if="showFormItem('董事长批准')">
285
+                    <el-col :span="6" :offset="11">
286
+                      签名:<span class="auditor">{{ form.dszUser ? form.dszUser.nickName : dszUser }}</span>
287
+                    </el-col>
288
+                    <el-col :span="6">
289
+                      日期:<span>{{ form.dszTime ? form.dszTime : dszTime }}</span>
290
+                    </el-col>
291
+                  </el-row>
292
+                </td>
293
+              </tr>
294
+            </template>
295
+
296
+            <tr v-if="form.borrowUsage != 0 && form.borrowUsage != 1">
297
+              <td colspan="2" class="label-cell">{{ dgtLabel }}</td>
298
+              <td colspan="10">
299
+                <el-form-item prop="unionComment" class="table-form-item">
300
+                  <el-input type="textarea" v-model="form.unionComment" placeholder="请输入审核意见"
301
+                    :disabled="taskName != '党工团审核'" />
263 302
                 </el-form-item>
264
-              </el-col>
265
-            </el-row>
303
+                <el-row class="sign-line" v-if="showFormItem('党工团审核')">
304
+                  <el-col :span="6" :offset="11">
305
+                    签名:<span class="auditor">{{ form.unionUser ? form.unionUser.nickName : unionUser }}</span>
306
+                  </el-col>
307
+                  <el-col :span="6">
308
+                    日期:<span>{{ form.unionTime ? form.unionTime : unionTime }}</span>
309
+                  </el-col>
310
+                </el-row>
311
+              </td>
312
+            </tr>
313
+
314
+            <tr>
315
+              <td colspan="2" class="label-cell">财务部处理</td>
316
+              <td colspan="10">
317
+                <div class="table-form-item">
318
+                  <div class="sub-label">支付凭证</div>
319
+                  <el-form-item prop="lendDocument" class="table-form-item">
320
+                    <FileUpload v-if="taskName == '财务处理'" :disabled="taskName != '财务处理'" :limit="1"
321
+                      :filePathName="'借款/支付凭证'" :isShowTip="false"
322
+                      :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="getLendPath">
323
+                    </FileUpload>
324
+                    <div v-if="form.lendDocument && taskName != '财务处理'">
325
+                      <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.lendDocument}`)">
326
+                        {{ getFileName(form.lendDocument) }}
327
+                      </el-link>
328
+                      <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.lendDocument}`"
329
+                        :underline="false" target="_blank">
330
+                        <span class="el-icon-download">下载文件</span>
331
+                      </el-link>
332
+                    </div>
333
+                  </el-form-item>
334
+                  <div class="sub-label">支付备注</div>
335
+                  <el-form-item prop="cwComment" class="table-form-item">
336
+                    <el-input type="textarea" v-model="form.cwComment" placeholder="请输入财务部支付备注"
337
+                      :disabled="taskName != '财务处理'" :autosize="{ minRows: 2 }" />
338
+                  </el-form-item>
339
+                </div>
340
+                <el-row class="sign-line" v-if="showFormItem('财务处理')">
341
+                  <el-col :span="6" :offset="11">
342
+                    经办人:<span class="auditor">{{ form.cwUser ? form.cwUser.nickName : cwUser }}</span>
343
+                  </el-col>
344
+                  <el-col :span="6">
345
+                    支付日期:
346
+                    <el-form-item prop="lendTime" class="table-form-item inline-item">
347
+                      <el-date-picker style="width: 160px;" v-model="form.lendTime" value-format="yyyy-MM-dd" type="date"
348
+                        placeholder="选择日期" :disabled="taskName != '财务处理'">
349
+                      </el-date-picker>
350
+                    </el-form-item>
351
+                  </el-col>
352
+                </el-row>
353
+              </td>
354
+            </tr>
355
+          </table>
266 356
           </div>
267
-          <el-divider></el-divider>
268
-          <el-form-item label="支付凭证" prop="lendDocument">
269
-            <FileUpload v-if="taskName == '财务处理'" :disabled="taskName != '财务处理'" :limit="1" :filePathName="'借款/支付凭证'"
270
-              :isShowTip="false" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="getLendPath">
271
-            </FileUpload>
272
-            <div v-if="form.lendDocument && taskName != '财务处理'">
273
-              <!-- <file-item :document="form.lendDocument"></file-item> -->
274
-              <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.lendDocument}`)">
275
-                {{ getFileName(form.lendDocument) }}
276
-              </el-link>
277
-              <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.lendDocument}`"
278
-                :underline="false" target="_blank">
279
-                <span class="el-icon-download">下载文件</span>
280
-              </el-link>
281
-            </div>
282
-          </el-form-item>
283
-          <el-form-item label="财务部支付备注" prop="cwComment" label-width="120px">
284
-            <el-input type="textarea" v-model="form.cwComment" placeholder="请输入财务部支付备注" :disabled="taskName != '财务处理'"
285
-              :autosize="{ minRows: 2 }" />
286
-          </el-form-item>
287
-          <el-row>
288
-            <el-col :span="6" :xs="24" :offset="12">
289
-              <el-form-item label="经办人:" label-width="120px" v-if="showFormItem('财务处理')">
290
-                <span class="auditor"> {{ form.cwUser ? form.cwUser.nickName : cwUser }} </span>
291
-              </el-form-item>
292
-            </el-col>
293
-            <el-col :span="6">
294
-              <el-form-item label="支付日期:" prop="lendTime" v-if="showFormItem('财务处理')">
295
-                <el-date-picker style="width:140px;" v-model="form.lendTime" value-format="yyyy-MM-dd" type="date"
296
-                  placeholder="选择日期" :disabled="taskName != '财务处理'">
297
-                </el-date-picker>
298
-              </el-form-item>
299
-            </el-col>
300
-          </el-row>
301 357
         </el-form>
302
-        <div style="text-align: center;" v-if="taskName != ''">
358
+        <div class="form-footer" v-if="taskName != ''">
303 359
           <el-button type="warning" @click="saves()">保 存</el-button>
304 360
           <el-button type="danger" v-if="taskName != '借款申请'" @click="returnOpen = true">退 回</el-button>
305 361
           <el-button type="primary" @click="submitForm">提 交</el-button>
@@ -312,7 +368,7 @@
312 368
             <flow :flowData="flowData" />
313 369
           </div>
314 370
         </el-card>
315
-      </el-col>
371
+      </el-col> 
316 372
     </el-row>
317 373
     <el-dialog title="选择项目" :visible.sync="openProject" width="70%" append-to-body>
318 374
       <project-choose @chooseProject="confirmProject"></project-choose>
@@ -1146,28 +1202,256 @@ export default {
1146 1202
 <style lang="scss" scoped>
1147 1203
 @import "@/assets/styles/element-reset.scss";
1148 1204
 
1149
-table {
1150
-  text-align: center;
1205
+$border-light: #dcdfe6;
1206
+$border-soft: #e4e7ed;
1207
+$label-bg: #f0f2f5;
1208
+$label-color: #606266;
1209
+$text-primary: #303133;
1210
+$text-secondary: #909399;
1211
+$accent: #409eff;
1212
+
1213
+.borrow-table-form {
1214
+  margin-top: 16px;
1215
+
1216
+  .table-form-item {
1217
+    margin-bottom: 0;
1218
+
1219
+    ::v-deep .el-form-item__content {
1220
+      margin-left: 0 !important;
1221
+      line-height: normal;
1222
+    }
1223
+
1224
+    ::v-deep .el-form-item__error {
1225
+      position: relative;
1226
+      padding-top: 2px;
1227
+    }
1228
+  }
1229
+
1230
+  ::v-deep .el-input__inner,
1231
+  ::v-deep .el-textarea__inner {
1232
+    border-color: $border-light;
1233
+    border-radius: 6px;
1234
+    transition: border-color 0.2s, box-shadow 0.2s;
1235
+
1236
+    &:hover {
1237
+      border-color: #c0c4cc;
1238
+    }
1239
+
1240
+    &:focus {
1241
+      border-color: $accent;
1242
+      box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.12);
1243
+    }
1244
+  }
1245
+
1246
+  ::v-deep .el-input.is-disabled .el-input__inner,
1247
+  ::v-deep .el-textarea.is-disabled .el-textarea__inner {
1248
+    background-color: #f5f7fa;
1249
+    color: #606266;
1250
+  }
1251
+
1252
+  .inline-item {
1253
+    display: inline-block;
1254
+    vertical-align: middle;
1255
+  }
1256
+
1257
+  .exceed-tip {
1258
+    display: block;
1259
+    margin-top: 4px;
1260
+    color: #f56c6c;
1261
+    font-size: 12px;
1262
+  }
1263
+
1264
+  .sub-label {
1265
+    margin: 8px 0 4px;
1266
+    font-size: 13px;
1267
+    color: $label-color;
1268
+    font-weight: 500;
1269
+
1270
+    &:first-child {
1271
+      margin-top: 0;
1272
+    }
1273
+  }
1274
+}
1275
+
1276
+.form-table-wrap {
1277
+  border: 1px solid $border-soft;
1278
+  border-radius: 10px;
1279
+  overflow: hidden;
1280
+  background: #fff;
1281
+  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
1282
+}
1283
+
1284
+.form-table {
1285
+  width: 100%;
1151 1286
   border-collapse: collapse;
1152
-  border: 1px solid #ccc;
1287
+  table-layout: fixed;
1288
+  font-size: 14px;
1289
+  color: $text-primary;
1290
+
1291
+  tr {
1292
+    transition: background-color 0.15s;
1293
+  }
1294
+
1295
+  tr:hover td:not(.label-cell) {
1296
+    background-color: #fafcff;
1297
+  }
1298
+
1299
+  td {
1300
+    padding: 12px 14px;
1301
+    border-bottom: 1px solid $border-light;
1302
+    vertical-align: middle;
1303
+    word-break: break-word;
1304
+    background: #fff;
1305
+  }
1306
+
1307
+  tr:last-child td {
1308
+    border-bottom: none;
1309
+  }
1310
+
1311
+  .label-cell {
1312
+    width: 110px;
1313
+    text-align: right;
1314
+    font-size: 13px;
1315
+    font-weight: 600;
1316
+    color: $label-color;
1317
+    background-color: $label-bg;
1318
+    border-right: 1px solid $border-light;
1319
+    white-space: nowrap;
1320
+  }
1321
+}
1322
+
1323
+.inner-table {
1324
+  width: 100%;
1325
+  border-collapse: separate;
1326
+  border-spacing: 0;
1327
+  margin-top: 8px;
1328
+  font-size: 13px;
1329
+  border: 1px solid $border-light;
1330
+  border-radius: 8px;
1331
+  overflow: hidden;
1332
+
1333
+  td {
1334
+    padding: 8px 12px;
1335
+    border-bottom: 1px solid $border-light;
1336
+    border-right: 1px solid $border-light;
1337
+    vertical-align: middle;
1338
+    background: #fff;
1339
+  }
1340
+
1341
+  tr:last-child td {
1342
+    border-bottom: none;
1343
+  }
1344
+
1345
+  td:last-child {
1346
+    border-right: none;
1347
+  }
1348
+
1349
+  .label-cell {
1350
+    text-align: center;
1351
+    font-weight: 600;
1352
+    font-size: 12px;
1353
+    color: $label-color;
1354
+    background-color: $label-bg;
1355
+    white-space: nowrap;
1356
+  }
1357
+}
1358
+
1359
+.detail-inner-table {
1360
+  text-align: center;
1361
+
1362
+  tr:first-child td {
1363
+    background: $label-bg;
1364
+    color: $label-color;
1365
+    font-size: 12px;
1366
+    font-weight: 600;
1367
+    padding: 9px 8px;
1368
+  }
1369
+
1370
+  tbody tr:hover td {
1371
+    background-color: #f5f9ff;
1372
+  }
1153 1373
 
1154 1374
   td {
1155
-    padding: .0625rem;
1375
+    padding: 8px 10px;
1156 1376
   }
1157 1377
 }
1158 1378
 
1159
-.low-money {
1160
-  display: inline-block;
1161
-  width: 75px;
1162
-  text-align: right;
1379
+.budget-row {
1380
+  td.budget-value-cell,
1381
+  td:not(.label-cell) {
1382
+    // background-color: #f5f7fa;
1383
+  }
1384
+
1385
+  .budget-value-cell {
1386
+    padding: 10px 12px;
1387
+    overflow: hidden;
1388
+    vertical-align: top;
1389
+  }
1390
+
1391
+  .budget-amount {
1392
+    display: flex;
1393
+    flex-direction: column;
1394
+    gap: 4px;
1395
+    line-height: 1.45;
1396
+    word-break: break-all;
1397
+    overflow-wrap: anywhere;
1398
+  }
1399
+
1400
+  .amount-num {
1401
+    display: block;
1402
+    font-size: 15px;
1403
+    font-weight: 600;
1404
+    color: $text-primary;
1405
+    letter-spacing: 0.02em;
1406
+  }
1407
+
1408
+  .amount-cn {
1409
+    display: block;
1410
+    font-size: 12px;
1411
+    color: $text-secondary;
1412
+    white-space: normal;
1413
+  }
1414
+
1415
+  .budget-amount.is-danger .amount-num {
1416
+    color: #f56c6c;
1417
+  }
1418
+
1419
+  .budget-amount.is-success .amount-num {
1420
+    color: #67c23a;
1421
+  }
1422
+
1423
+  .budget-link-btn {
1424
+    margin-top: 6px;
1425
+    padding: 0;
1426
+    font-size: 12px;
1427
+    color: $accent;
1428
+    white-space: normal;
1429
+    line-height: 1.3;
1430
+    text-align: left;
1431
+
1432
+    &:hover {
1433
+      color: #66b1ff;
1434
+    }
1435
+  }
1163 1436
 }
1164 1437
 
1165
-.up-money {
1166
-  display: inline-block;
1167
-  text-align: right;
1438
+.sign-line {
1439
+  margin-top: 12px;
1440
+  padding-top: 10px;
1441
+  border-top: 1px solid $border-light;
1442
+  font-size: 13px;
1443
+  color: $label-color;
1444
+  line-height: 26px;
1445
+
1446
+  .auditor {
1447
+    color: $text-primary;
1448
+    font-weight: 500;
1449
+  }
1168 1450
 }
1169 1451
 
1170
-::v-deep .el-descriptions-item__label.is-bordered-label {
1171
-  width: 110px;
1452
+.form-footer {
1453
+  margin-top: 24px;
1454
+  padding-bottom: 20px;
1455
+  text-align: center;
1172 1456
 }
1173 1457
 </style>

+ 435
- 226
oa-ui/src/views/flowable/form/oa/carForm.vue Просмотреть файл

@@ -1,263 +1,285 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-02-29 11:44:28
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2026-03-13 16:09:18
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2026-05-21 11:17:02
6 6
 -->
7 7
 
8 8
 <template>
9 9
   <div v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading">
10 10
     <el-row :gutter="20">
11 11
       <el-col :span="flowDisabled ? 18 : 24" :xs="24">
12
-        <el-card>
13
-          <h2 style="text-align: center;">用车申请表</h2>
14
-          <div>
15
-            <el-form ref="carForm" :model="form" label-width="120px" :rules="rules">
16
-              <!-- 申请人填写 -->
17
-              <el-divider></el-divider>
18
-              <el-row :gutter="20">
19
-                <el-col :span="7" :xs="24">
20
-                  <el-form-item label="申请人:" prop="user.nickName">
21
-                    <!-- <el-input v-model="form.user"></el-input> -->
12
+        <h2 class="text-center">用车申请表</h2>
13
+        <el-divider></el-divider>
14
+        <el-form ref="carForm" :model="form" :rules="rules" class="borrow-table-form">
15
+          <div class="form-table-wrap">
16
+            <table class="form-table">
17
+              <tr>
18
+                <td colspan="2" class="label-cell">申请人</td>
19
+                <td colspan="2">
20
+                  <el-form-item prop="user.nickName" class="table-form-item">
22 21
                     {{ form.applierUser ? form.applierUser.nickName : (form.user ? form.user.nickName : '') }}
23 22
                   </el-form-item>
24
-                </el-col>
25
-                <el-col :span="7" :xs="24">
26
-                  <el-form-item label="所在部门:" prop="dept.deptName">
27
-                    <!-- <el-input v-model="form.deptName"></el-input> -->
23
+                </td>
24
+                <td colspan="2" class="label-cell">所在部门</td>
25
+                <td colspan="2">
26
+                  <el-form-item prop="dept.deptName" class="table-form-item">
28 27
                     {{ form.dept ? form.dept.deptName : '' }}
29 28
                   </el-form-item>
30
-                </el-col>
31
-                <el-col :span="7" :xs="24">
32
-                  <el-form-item label="申请时间:" prop="date">
33
-                    <el-date-picker style="width:170px;" v-model="form.applyDate" value-format="yyyy-MM-dd" type="date"
29
+                </td>
30
+                <td colspan="2" class="label-cell">申请时间</td>
31
+                <td colspan="2">
32
+                  <el-form-item prop="date" class="table-form-item">
33
+                    <el-date-picker style="width: 100%;" v-model="form.applyDate" value-format="yyyy-MM-dd" type="date"
34 34
                       placeholder="选择日期" :disabled="taskName != '用车申请'">
35 35
                     </el-date-picker>
36 36
                   </el-form-item>
37
-                </el-col>
38
-              </el-row>
39
-              <el-form-item label="申请用途:" prop="carUsage">
40
-                <el-radio-group v-model="form.carUsage" @change="useChange" size="small" :disabled="taskName != '用车申请'">
41
-                  <el-radio label="0">项目用车</el-radio>
42
-                  <el-radio label="1">非项目用车</el-radio>
43
-                  <el-radio label="2">工会用车</el-radio>
44
-                  <el-radio label="3">党委用车</el-radio>
45
-                  <el-radio label="4">团委用车</el-radio>
46
-                </el-radio-group>
47
-              </el-form-item>
48
-              <el-form-item label="项目编号:" prop="projectId" v-if="form.carUsage == '0'">
49
-                <el-button type="primary" size="mini" @click="openProject = true"
50
-                  v-if="taskName == '用车申请'">选择项目</el-button>
51
-                <!-- <el-select v-model="form.projectId" filterable placeholder="请选择" @change="handleSelectProject"
52
-                  :disabled="taskName != '用车申请'" clearable>
53
-                  <el-option v-for="item in projectList" :key="item.value" :label="item.projectNumber"
54
-                    :value="item.projectId">
55
-                  </el-option>
56
-                </el-select> -->
57
-                <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
58
-                  <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
59
-                  }}</el-descriptions-item>
60
-                  <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
61
-                  }}</el-descriptions-item>
62
-                  <el-descriptions-item label="项目负责人" label-class-name="my-label">{{ chooseProject.projectLeaderUser ?
63
-                    chooseProject.projectLeaderUser.nickName : ''
64
-                  }}</el-descriptions-item>
65
-                  <el-descriptions-item label="承担部门" label-class-name="my-label">
66
-                    <el-tag size="small">{{ chooseProject.undertakingDeptName }}</el-tag>
67
-                  </el-descriptions-item>
68
-                  <el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
69
-                  }}</el-descriptions-item>
70
-                </el-descriptions>
71
-              </el-form-item>
72
-              <el-form-item label="用车事由:" prop="applyReason">
73
-                <el-input type="textarea" :rows="2" placeholder="请输入用车事由" v-model="form.applyReason"
74
-                  :disabled="taskName != '用车申请'">
75
-                </el-input>
76
-              </el-form-item>
77
-              <el-row>
78
-                <el-col :span="7" :xs="24">
79
-                  <el-form-item label="开始日期:" prop="beginDate">
80
-                    <el-date-picker style="width:170px;" v-model="form.beginDate" value-format="yyyy-MM-dd" type="date"
37
+                </td>
38
+              </tr>
39
+              <tr>
40
+                <td colspan="2" class="label-cell">申请用途</td>
41
+                <td colspan="10">
42
+                  <el-form-item prop="carUsage" class="table-form-item">
43
+                    <el-radio-group v-model="form.carUsage" @change="useChange" size="small" :disabled="taskName != '用车申请'">
44
+                      <el-radio label="0">项目用车</el-radio>
45
+                      <el-radio label="1">非项目用车</el-radio>
46
+                      <el-radio label="2">工会用车</el-radio>
47
+                      <el-radio label="3">党委用车</el-radio>
48
+                      <el-radio label="4">团委用车</el-radio>
49
+                    </el-radio-group>
50
+                  </el-form-item>
51
+                </td>
52
+              </tr>
53
+              <tr v-if="form.carUsage == '0'">
54
+                <td colspan="2" class="label-cell">项目信息</td>
55
+                <td colspan="10">
56
+                  <el-button type="primary" size="mini" @click="openProject = true"
57
+                    v-if="taskName == '用车申请'">选择项目</el-button>
58
+                  <table class="inner-table" v-if="isSelect">
59
+                    <tr>
60
+                      <td class="label-cell">项目编号</td>
61
+                      <td>{{ chooseProject.projectNumber }}</td>
62
+                      <td class="label-cell">项目名称</td>
63
+                      <td>{{ chooseProject.projectName }}</td>
64
+                    </tr>
65
+                    <tr>
66
+                      <td class="label-cell">项目负责人</td>
67
+                      <td>{{ chooseProject.projectLeaderUser ? chooseProject.projectLeaderUser.nickName : '' }}</td>
68
+                      <td class="label-cell">承担部门</td>
69
+                      <td>{{ chooseProject.undertakingDeptName }}</td>
70
+                    </tr>
71
+                    <tr>
72
+                      <td class="label-cell">项目类型</td>
73
+                      <td colspan="3">{{ chooseProject.projectType }}</td>
74
+                    </tr>
75
+                  </table>
76
+                  <el-form-item prop="projectId" class="table-form-item" style="display: none;"></el-form-item>
77
+                </td>
78
+              </tr>
79
+              <tr>
80
+                <td colspan="2" class="label-cell">用车事由</td>
81
+                <td colspan="10">
82
+                  <el-form-item prop="applyReason" class="table-form-item">
83
+                    <el-input type="textarea" :rows="2" placeholder="请输入用车事由" v-model="form.applyReason"
84
+                      :disabled="taskName != '用车申请'">
85
+                    </el-input>
86
+                  </el-form-item>
87
+                </td>
88
+              </tr>
89
+              <tr>
90
+                <td colspan="2" class="label-cell">开始日期</td>
91
+                <td colspan="2">
92
+                  <el-form-item prop="beginDate" class="table-form-item">
93
+                    <el-date-picker style="width: 100%;" v-model="form.beginDate" value-format="yyyy-MM-dd" type="date"
81 94
                       placeholder="选择日期" @change="calculateDay" :disabled="taskName != '用车申请'">
82 95
                     </el-date-picker>
83 96
                   </el-form-item>
84
-                </el-col>
85
-                <el-col :span="7" :xs="24">
86
-                  <el-form-item label="结束日期:" prop="endDate">
87
-                    <el-date-picker style="width:170px;" v-model="form.endDate" value-format="yyyy-MM-dd" type="date"
97
+                </td>
98
+                <td colspan="2" class="label-cell">结束日期</td>
99
+                <td colspan="2">
100
+                  <el-form-item prop="endDate" class="table-form-item">
101
+                    <el-date-picker style="width: 100%;" v-model="form.endDate" value-format="yyyy-MM-dd" type="date"
88 102
                       placeholder="选择日期" @change="calculateDay" :disabled="taskName != '用车申请'">
89 103
                     </el-date-picker>
90 104
                   </el-form-item>
91
-                </el-col>
92
-                <el-col :span="5" :xs="24">
93
-                  <el-form-item label="共计:">
94
-                    {{ form.days + '天' }}
95
-                  </el-form-item>
96
-                </el-col>
97
-              </el-row>
98
-              <el-form-item label="乘车人数:" prop="passengers">
99
-                <el-input-number v-model="form.passengers" :min="1" :disabled="taskName != '用车申请'"></el-input-number>
100
-              </el-form-item>
101
-              <el-divider></el-divider>
102
-              <!-- 部门审核意见 -->
103
-              <el-form-item label="部门审核意见:" prop="deptComment" label-width="125px" v-if="showFormItem('部门审核')">
104
-                <el-input type="textarea" :rows="2" placeholder="请输入部门审核意见" v-model="form.deptComment"
105
-                  :disabled="taskName != '部门审核'">
106
-                </el-input>
107
-              </el-form-item>
108
-              <el-row>
109
-                <el-col :span="6" :xs="24" :offset="12">
110
-                  <el-form-item label="签名:" label-width="120px" v-if="showFormItem('部门审核签名')">
111
-                    <span class="auditor"> {{ form.deptUser ? form.deptUser.nickName : deptUser }} </span>
112
-                  </el-form-item>
113
-                </el-col>
114
-                <el-col :span="6">
115
-                  <el-form-item label="日期:" label-width="120px" v-if="showFormItem('部门审核签名')">
116
-                    <span> {{ form.deptTime ? form.deptTime : deptTime }} </span>
117
-                  </el-form-item>
118
-                </el-col>
119
-              </el-row>
120
-              <!-- 分管审核意见 -->
121
-              <el-form-item label="分管审核意见:" prop="managerComment" label-width="125px" v-if="showFormItem('分管审核')">
122
-                <el-input type="textarea" :rows="2" placeholder="请输入分管审核意见" v-model="form.managerComment"
123
-                  :disabled="taskName != '分管审核'">
124
-                </el-input>
125
-              </el-form-item>
126
-              <el-row>
127
-                <el-col :span="6" :xs="24" :offset="12">
128
-                  <el-form-item label="签名:" label-width="120px" v-if="showFormItem('分管审核签名')">
129
-                    <span class="auditor"> {{ form.managerUser ? form.managerUser.nickName : managerUser }} </span>
130
-                  </el-form-item>
131
-                </el-col>
132
-                <el-col :span="6">
133
-                  <el-form-item label="日期:" label-width="120px" v-if="showFormItem('分管审核签名')">
134
-                    <span> {{ form.managerTime ? form.managerTime : managerTime }} </span>
105
+                </td>
106
+                <td colspan="2" class="label-cell">共计</td>
107
+                <td colspan="2">{{ form.days }} 天</td>
108
+              </tr>
109
+              <tr>
110
+                <td colspan="2" class="label-cell">乘车人数</td>
111
+                <td colspan="10">
112
+                  <el-form-item prop="passengers" class="table-form-item">
113
+                    <el-input-number v-model="form.passengers" :min="1" :disabled="taskName != '用车申请'"></el-input-number>
135 114
                   </el-form-item>
136
-                </el-col>
137
-              </el-row>
138
-              <!-- 党工团审核意见 -->
139
-              <el-form-item :label="dgtAdvice" prop="unionComment" label-width="120px" v-if="showFormItem('党工团审核')">
140
-                <el-input type="textarea" :rows="2" placeholder="请输入审核意见" v-model="form.unionComment"
141
-                  :disabled="taskName != '党工团审核'">
142
-                </el-input>
143
-              </el-form-item>
144
-              <el-row>
145
-                <el-col :span="6" :xs="24" :offset="12">
146
-                  <el-form-item label="签名:" label-width="120px" v-if="showFormItem('党工团审核签名')">
147
-                    <span class="auditor"> {{ form.unionUser ? form.unionUser.nickName : unionUser }} </span>
115
+                </td>
116
+              </tr>
117
+
118
+              <tr v-if="showFormItem('部门审核')">
119
+                <td colspan="2" class="label-cell">部门审核意见</td>
120
+                <td colspan="10">
121
+                  <el-form-item prop="deptComment" class="table-form-item">
122
+                    <el-input type="textarea" :rows="2" placeholder="请输入部门审核意见" v-model="form.deptComment"
123
+                      :disabled="taskName != '部门审核'">
124
+                    </el-input>
148 125
                   </el-form-item>
149
-                </el-col>
150
-                <el-col :span="6">
151
-                  <el-form-item label="日期:" label-width="120px" v-if="showFormItem('党工团审核签名')">
152
-                    <span> {{ form.unionTime ? form.unionTime : unionTime }} </span>
126
+                  <el-row class="sign-line" v-if="showFormItem('部门审核签名')">
127
+                    <el-col :span="6" :offset="11">
128
+                      签名:<span class="auditor">{{ form.deptUser ? form.deptUser.nickName : deptUser }}</span>
129
+                    </el-col>
130
+                    <el-col :span="6">
131
+                      日期:<span>{{ form.deptTime ? form.deptTime : deptTime }}</span>
132
+                    </el-col>
133
+                  </el-row>
134
+                </td>
135
+              </tr>
136
+              <tr v-if="showFormItem('分管审核')">
137
+                <td colspan="2" class="label-cell">分管审核意见</td>
138
+                <td colspan="10">
139
+                  <el-form-item prop="managerComment" class="table-form-item">
140
+                    <el-input type="textarea" :rows="2" placeholder="请输入分管审核意见" v-model="form.managerComment"
141
+                      :disabled="taskName != '分管审核'">
142
+                    </el-input>
153 143
                   </el-form-item>
154
-                </el-col>
155
-              </el-row>
156
-              <!-- 总经理审核意见 -->
157
-              <el-form-item label="总经理审核意见" prop="gmComment" label-width="120px" v-if="showFormItem('总经理审核')">
158
-                <el-input type="textarea" :rows="2" placeholder="请输入总经理审核意见" v-model="form.gmComment"
159
-                  :disabled="taskName != '总经理审核'">
160
-                </el-input>
161
-              </el-form-item>
162
-              <el-row>
163
-                <el-col :span="6" :xs="24" :offset="12">
164
-                  <el-form-item label="签名:" label-width="120px" v-if="showFormItem('总经理审核签名')">
165
-                    <span class="auditor"> {{ form.gmUser ? form.gmUser.nickName : gmUser }} </span>
144
+                  <el-row class="sign-line" v-if="showFormItem('分管审核签名')">
145
+                    <el-col :span="6" :offset="11">
146
+                      签名:<span class="auditor">{{ form.managerUser ? form.managerUser.nickName : managerUser }}</span>
147
+                    </el-col>
148
+                    <el-col :span="6">
149
+                      日期:<span>{{ form.managerTime ? form.managerTime : managerTime }}</span>
150
+                    </el-col>
151
+                  </el-row>
152
+                </td>
153
+              </tr>
154
+              <tr v-if="showFormItem('党工团审核')">
155
+                <td colspan="2" class="label-cell">{{ dgtAdvice }}</td>
156
+                <td colspan="10">
157
+                  <el-form-item prop="unionComment" class="table-form-item">
158
+                    <el-input type="textarea" :rows="2" placeholder="请输入审核意见" v-model="form.unionComment"
159
+                      :disabled="taskName != '党工团审核'">
160
+                    </el-input>
166 161
                   </el-form-item>
167
-                </el-col>
168
-                <el-col :span="6">
169
-                  <el-form-item label="日期:" label-width="120px" v-if="showFormItem('总经理审核签名')">
170
-                    <span> {{ form.gmTime ? form.gmTime : gmTime }} </span>
162
+                  <el-row class="sign-line" v-if="showFormItem('党工团审核签名')">
163
+                    <el-col :span="6" :offset="11">
164
+                      签名:<span class="auditor">{{ form.unionUser ? form.unionUser.nickName : unionUser }}</span>
165
+                    </el-col>
166
+                    <el-col :span="6">
167
+                      日期:<span>{{ form.unionTime ? form.unionTime : unionTime }}</span>
168
+                    </el-col>
169
+                  </el-row>
170
+                </td>
171
+              </tr>
172
+              <tr v-if="showFormItem('总经理审核')">
173
+                <td colspan="2" class="label-cell">总经理审核意见</td>
174
+                <td colspan="10">
175
+                  <el-form-item prop="gmComment" class="table-form-item">
176
+                    <el-input type="textarea" :rows="2" placeholder="请输入总经理审核意见" v-model="form.gmComment"
177
+                      :disabled="taskName != '总经理审核'">
178
+                    </el-input>
171 179
                   </el-form-item>
172
-                </el-col>
173
-              </el-row>
174
-              <!-- 董事长审核意见 -->
175
-              <el-form-item label="董事长审核意见" prop="dszComment" label-width="120px" v-if="showFormItem('董事长审核')">
176
-                <el-input type="textarea" :rows="2" placeholder="请输入董事长审核意见" v-model="form.dszComment"
177
-                  :disabled="taskName != '董事长审核'">
178
-                </el-input>
179
-              </el-form-item>
180
-              <el-row>
181
-                <el-col :span="6" :xs="24" :offset="12">
182
-                  <el-form-item label="签名:" label-width="120px" v-if="showFormItem('董事长审核签名')">
183
-                    <span class="auditor"> {{ form.dszUser ? form.dszUser.nickName : dszUser }} </span>
180
+                  <el-row class="sign-line" v-if="showFormItem('总经理审核签名')">
181
+                    <el-col :span="6" :offset="11">
182
+                      签名:<span class="auditor">{{ form.gmUser ? form.gmUser.nickName : gmUser }}</span>
183
+                    </el-col>
184
+                    <el-col :span="6">
185
+                      日期:<span>{{ form.gmTime ? form.gmTime : gmTime }}</span>
186
+                    </el-col>
187
+                  </el-row>
188
+                </td>
189
+              </tr>
190
+              <tr v-if="showFormItem('董事长审核')">
191
+                <td colspan="2" class="label-cell">董事长审核意见</td>
192
+                <td colspan="10">
193
+                  <el-form-item prop="dszComment" class="table-form-item">
194
+                    <el-input type="textarea" :rows="2" placeholder="请输入董事长审核意见" v-model="form.dszComment"
195
+                      :disabled="taskName != '董事长审核'">
196
+                    </el-input>
184 197
                   </el-form-item>
185
-                </el-col>
186
-                <el-col :span="6">
187
-                  <el-form-item label="日期:" label-width="120px" v-if="showFormItem('董事长审核签名')">
188
-                    <span> {{ form.dszTime ? form.dszTime : dszTime }} </span>
198
+                  <el-row class="sign-line" v-if="showFormItem('董事长审核签名')">
199
+                    <el-col :span="6" :offset="11">
200
+                      签名:<span class="auditor">{{ form.dszUser ? form.dszUser.nickName : dszUser }}</span>
201
+                    </el-col>
202
+                    <el-col :span="6">
203
+                      日期:<span>{{ form.dszTime ? form.dszTime : dszTime }}</span>
204
+                    </el-col>
205
+                  </el-row>
206
+                </td>
207
+              </tr>
208
+
209
+              <tr>
210
+                <td colspan="2" class="label-cell">安排用车意见</td>
211
+                <td colspan="10">
212
+                  <el-form-item prop="dispatchComment" class="table-form-item">
213
+                    <el-input type="textarea" :rows="2" placeholder="请输入安排用车意见" v-model="form.dispatchComment"
214
+                      :disabled="taskName != '安排用车'">
215
+                    </el-input>
189 216
                   </el-form-item>
190
-                </el-col>
191
-              </el-row>
192
-              <el-divider></el-divider>
193
-              <!-- 安排用车意见 -->
194
-              <el-form-item label="安排用车意见:" prop="dispatchComment" label-width="120px">
195
-                <el-input type="textarea" :rows="2" placeholder="请输入安排用车意见" v-model="form.dispatchComment"
196
-                  :disabled="taskName != '安排用车'">
197
-                </el-input>
198
-              </el-form-item>
199
-              <el-row>
200
-                <el-col :span="6" :xs="24" :offset="12">
201
-                  <el-form-item label="签名:" label-width="120px" v-if="taskName == '安排用车'">
202
-                    <span class="auditor"> {{ form.dispatchUser ? form.dispatchUser.nickName : dispatchUser }} </span>
217
+                  <el-row class="sign-line" v-if="taskName == '安排用车' || (taskName == '' && form.dispatchUser)">
218
+                    <el-col :span="6" :offset="11">
219
+                      签名:<span class="auditor">{{ form.dispatchUser ? form.dispatchUser.nickName : dispatchUser }}</span>
220
+                    </el-col>
221
+                    <el-col :span="6">
222
+                      日期:<span>{{ form.dispatchTime ? form.dispatchTime : dispatchTime }}</span>
223
+                    </el-col>
224
+                  </el-row>
225
+                </td>
226
+              </tr>
227
+              <tr>
228
+                <td colspan="2" class="label-cell">车牌号</td>
229
+                <td colspan="10">
230
+                  <el-form-item prop="cars" class="table-form-item">
231
+                    <div class="car-checkbox-list">
232
+                      <el-checkbox-group v-model="form.cars" :disabled="taskName != '安排用车'">
233
+                        <el-checkbox class="car-checkbox-item" :disabled="item.status == 1 ? false : true"
234
+                          :label="item.carId" v-for="item in carList" :key="item.carId" :value="item.carId">
235
+                          <span class="car-plate">{{ item.licensePlate }}</span>
236
+                          <span class="car-desc" v-if="item.brand || item.series">
237
+                            {{ (item.brand || '') + (item.series || '') }}
238
+                          </span>
239
+                        </el-checkbox>
240
+                      </el-checkbox-group>
241
+                    </div>
203 242
                   </el-form-item>
204
-                </el-col>
205
-                <el-col :span="6">
206
-                  <el-form-item label="日期:" label-width="120px" v-if="taskName == '安排用车'">
207
-                    <span> {{ form.dispatchTime ? form.dispatchTime : dispatchTime }} </span>
243
+                </td>
244
+              </tr>
245
+              <tr>
246
+                <td colspan="2" class="label-cell">驾驶员</td>
247
+                <td colspan="10">
248
+                  <el-form-item prop="drivers" class="table-form-item">
249
+                    <el-tag :key="'d' + index" class="mr10" v-for="item, index in chooseDriver">{{ item.nickName }}</el-tag>
250
+                    <el-button v-if="taskName == '安排用车'" icon="el-icon-plus" @click="openCar = true"></el-button>
208 251
                   </el-form-item>
209
-                </el-col>
210
-              </el-row>
211
-              <!-- 综合事务部管理人员填写 -->
212
-              <el-form-item label="车牌号:" prop="cars">
213
-                <el-checkbox-group v-model="form.cars" :disabled="taskName != '安排用车'">
214
-                  <el-checkbox :disabled="item.status == 1 ? false : true" :label="item.carId" v-for="item in carList"
215
-                    :key="item.carId" :value="item.carId">
216
-                    {{ item.licensePlate + (item.brand ? item.brand : '') + (item.series ? item.series : '') }}
217
-                  </el-checkbox>
218
-                </el-checkbox-group>
219
-              </el-form-item>
220
-              <el-form-item label="驾驶员:" prop="drivers">
221
-                <el-tag :key="'d' + index" class="mr10" v-for="item, index in chooseDriver">{{ item.nickName }}</el-tag>
222
-                <el-button v-if="taskName == '安排用车'" icon="el-icon-plus" @click="openCar = true"></el-button>
223
-                <!-- <el-select v-if="taskName != '安排用车'" v-model="form.drivers" filterable multiple clearable
224
-                  style="width:420px" :disabled="taskName != '安排用车'">
225
-                  <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId"
226
-                    v-if="item.nickName != 'admin'">
227
-                  </el-option>
228
-                </el-select> -->
229
-              </el-form-item>
230
-              <el-row>
231
-                <el-col :span="12" :xs="24">
232
-                  <el-form-item label="返回日期" prop="returnDate">
233
-                    <!-- <el-date-picker v-model="form.returnDate" clearable type="datetime" value-format="yyyy-MM-dd-HH-mm"
234
-                      placeholder="选择日期" :disabled="taskName != '安排用车'">
235
-                    </el-date-picker> -->
236
-                    <el-date-picker v-model="form.returnDate" type="datetime" placeholder="选择日期时间"
252
+                </td>
253
+              </tr>
254
+              <tr>
255
+                <td colspan="2" class="label-cell">返回日期</td>
256
+                <td colspan="4">
257
+                  <el-form-item prop="returnDate" class="table-form-item">
258
+                    <el-date-picker v-model="form.returnDate" type="datetime" placeholder="选择日期时间" style="width: 100%;"
237 259
                       format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" :disabled="taskName != '安排用车'">
238 260
                     </el-date-picker>
239 261
                   </el-form-item>
240
-                </el-col>
241
-                <el-col :span="12" :xs="24">
242
-                  <el-form-item label="行驶公里:" prop="kilometers" label-width="120px">
262
+                </td>
263
+                <td colspan="2" class="label-cell">行驶公里</td>
264
+                <td colspan="4">
265
+                  <el-form-item prop="kilometers" class="table-form-item">
243 266
                     <el-input placeholder="请输入行驶公里" v-model="form.kilometers" style="width: 200px;"
244 267
                       :disabled="taskName != '安排用车'" />
245 268
                     <span> 公里</span>
246 269
                   </el-form-item>
247
-                </el-col>
248
-              </el-row>
249
-            </el-form>
250
-            <el-row style="text-align: center;" v-if="taskName == '用车申请'">
251
-              <el-button type="primary" @click="submit">提交申请</el-button>
252
-            </el-row>
253
-            <el-row style="text-align: center;" v-else>
254
-              <el-button type="warning" @click="saves()" v-if="taskName == '安排用车'">保存</el-button>
255
-              <el-button type="primary" v-if="taskName" @click="completeApply"
256
-                :disabled="taskName == '安排用车' && !form.returnDate">完成审批</el-button>
257
-            </el-row>
270
+                </td>
271
+              </tr>
272
+            </table>
258 273
           </div>
259
-        </el-card>
260
-
274
+        </el-form>
275
+        <div class="form-footer" v-if="taskName == '用车申请'">
276
+          <el-button type="primary" @click="submit">提交申请</el-button>
277
+        </div>
278
+        <div class="form-footer" v-else-if="taskName">
279
+          <el-button type="warning" @click="saves()" v-if="taskName == '安排用车'">保存</el-button>
280
+          <el-button type="primary" @click="completeApply"
281
+            :disabled="taskName == '安排用车' && !form.returnDate">完成审批</el-button>
282
+        </div>
261 283
       </el-col>
262 284
       <el-col :span="6" :xs="24" v-if="flowDisabled">
263 285
         <el-card>
@@ -828,14 +850,201 @@ export default {
828 850
 
829 851
 <style lang="scss" scoped>
830 852
 @import "@/assets/styles/element-reset.scss";
831
-</style>
832 853
 
833
-<style>
834
-.my-label {
835
-  width: 100px;
836
-  background: #E1F3D8;
854
+$border-light: #dcdfe6;
855
+$border-soft: #e4e7ed;
856
+$label-bg: #f0f2f5;
857
+$label-color: #606266;
858
+$text-primary: #303133;
859
+$accent: #409eff;
860
+
861
+.borrow-table-form {
862
+  margin-top: 16px;
863
+
864
+  .table-form-item {
865
+    margin-bottom: 0;
866
+
867
+    ::v-deep .el-form-item__content {
868
+      margin-left: 0 !important;
869
+      line-height: normal;
870
+    }
871
+
872
+    ::v-deep .el-form-item__error {
873
+      position: relative;
874
+      padding-top: 2px;
875
+    }
876
+  }
877
+
878
+  ::v-deep .el-input__inner,
879
+  ::v-deep .el-textarea__inner {
880
+    border-color: $border-light;
881
+    border-radius: 6px;
882
+    transition: border-color 0.2s, box-shadow 0.2s;
883
+
884
+    &:hover {
885
+      border-color: #c0c4cc;
886
+    }
887
+
888
+    &:focus {
889
+      border-color: $accent;
890
+      box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.12);
891
+    }
892
+  }
893
+
894
+  ::v-deep .el-input.is-disabled .el-input__inner,
895
+  ::v-deep .el-textarea.is-disabled .el-textarea__inner {
896
+    background-color: #f5f7fa;
897
+    color: #606266;
898
+  }
899
+
900
+  .car-checkbox-list {
901
+    width: 100%;
902
+
903
+    ::v-deep .el-checkbox-group {
904
+      display: grid;
905
+      grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
906
+      gap: 12px 20px;
907
+      width: 100%;
908
+    }
909
+
910
+    ::v-deep .car-checkbox-item {
911
+      margin-right: 0;
912
+      display: inline-flex;
913
+      align-items: flex-start;
914
+      height: auto;
915
+      white-space: normal;
916
+
917
+      .el-checkbox__input {
918
+        margin-top: 3px;
919
+      }
920
+
921
+      .el-checkbox__label {
922
+        display: inline-flex;
923
+        flex-direction: column;
924
+        gap: 2px;
925
+        line-height: 1.4;
926
+        white-space: normal;
927
+        padding-left: 8px;
928
+      }
929
+    }
930
+
931
+    .car-plate {
932
+      font-weight: 600;
933
+      color: $text-primary;
934
+    }
935
+
936
+    .car-desc {
937
+      font-size: 12px;
938
+      color: $label-color;
939
+    }
940
+  }
941
+}
942
+
943
+.form-table-wrap {
944
+  border: 1px solid $border-soft;
945
+  border-radius: 10px;
946
+  overflow: hidden;
947
+  background: #fff;
948
+  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
949
+}
950
+
951
+.form-table {
952
+  width: 100%;
953
+  border-collapse: collapse;
954
+  table-layout: fixed;
955
+  font-size: 14px;
956
+  color: $text-primary;
957
+
958
+  tr {
959
+    transition: background-color 0.15s;
960
+  }
961
+
962
+  tr:hover td:not(.label-cell) {
963
+    background-color: #fafcff;
964
+  }
965
+
966
+  td {
967
+    padding: 12px 14px;
968
+    border-bottom: 1px solid $border-light;
969
+    vertical-align: middle;
970
+    word-break: break-word;
971
+    background: #fff;
972
+  }
973
+
974
+  tr:last-child td {
975
+    border-bottom: none;
976
+  }
977
+
978
+  .label-cell {
979
+    width: 110px;
980
+    text-align: right;
981
+    font-size: 13px;
982
+    font-weight: 600;
983
+    color: $label-color;
984
+    background-color: $label-bg;
985
+    border-right: 1px solid $border-light;
986
+    white-space: nowrap;
987
+  }
988
+}
989
+
990
+.inner-table {
991
+  width: 100%;
992
+  border-collapse: separate;
993
+  border-spacing: 0;
994
+  margin-top: 8px;
995
+  font-size: 13px;
996
+  border: 1px solid $border-light;
997
+  border-radius: 8px;
998
+  overflow: hidden;
999
+
1000
+  td {
1001
+    padding: 8px 12px;
1002
+    border-bottom: 1px solid $border-light;
1003
+    border-right: 1px solid $border-light;
1004
+    vertical-align: middle;
1005
+    background: #fff;
1006
+  }
1007
+
1008
+  tr:last-child td {
1009
+    border-bottom: none;
1010
+  }
1011
+
1012
+  td:last-child {
1013
+    border-right: none;
1014
+  }
1015
+
1016
+  .label-cell {
1017
+    text-align: center;
1018
+    font-weight: 600;
1019
+    font-size: 12px;
1020
+    color: $label-color;
1021
+    background-color: $label-bg;
1022
+    white-space: nowrap;
1023
+  }
837 1024
 }
838 1025
 
1026
+.sign-line {
1027
+  margin-top: 12px;
1028
+  padding-top: 10px;
1029
+  border-top: 1px solid $border-light;
1030
+  font-size: 13px;
1031
+  color: $label-color;
1032
+  line-height: 26px;
1033
+
1034
+  .auditor {
1035
+    color: $text-primary;
1036
+    font-weight: 500;
1037
+  }
1038
+}
1039
+
1040
+.form-footer {
1041
+  margin-top: 24px;
1042
+  padding-bottom: 20px;
1043
+  text-align: center;
1044
+}
1045
+</style>
1046
+
1047
+<style>
839 1048
 ::v-deep .el-textarea.is-disabled .el-textarea__inner {
840 1049
   color: #121212 !important;
841 1050
 }

+ 519
- 236
oa-ui/src/views/flowable/form/oa/deviceForm.vue Просмотреть файл

@@ -1,194 +1,244 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-03-07 13:44:39
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2026-03-10 15:04:05
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2026-05-22 09:55:39
6 6
 -->
7 7
 
8 8
 <template>
9 9
   <div>
10 10
     <el-row :gutter="20">
11 11
       <el-col :span="flowDisabled ? 18 : 24" :xs="24">
12
-        <el-card>
13
-          <h2 style="text-align: center;">设备申请表</h2>
14
-          <div>
15
-            <el-form ref="deviceForm" :model="form" label-width="120px" :rules="rules" :disabled="formDisabled">
16
-              <!-- 申请人填写 -->
17
-              <el-divider></el-divider>
18
-              <el-row :gutter="20">
19
-                <el-col :span="6" :xs="24">
20
-                  <el-form-item label="申请人:" prop="user.nickName">
12
+        <h2 class="text-center">设备申请表</h2>
13
+        <el-divider></el-divider>
14
+        <el-form ref="deviceForm" :model="form" :rules="rules" :disabled="formDisabled" class="borrow-table-form">
15
+          <div class="form-table-wrap">
16
+            <table class="form-table">
17
+              <tr>
18
+                <td colspan="2" class="label-cell">申请人</td>
19
+                <td colspan="2">
20
+                  <el-form-item prop="user.nickName" class="table-form-item">
21 21
                     {{ form.applierUser ? form.applierUser.nickName : form.user.nickName }}
22 22
                   </el-form-item>
23
-                </el-col>
24
-                <el-col :span="6" :xs="24">
25
-                  <el-form-item label="所在部门:" prop="dept.deptName">
23
+                </td>
24
+                <td colspan="2" class="label-cell">所在部门</td>
25
+                <td colspan="2">
26
+                  <el-form-item prop="dept.deptName" class="table-form-item">
26 27
                     {{ form.dept.deptName }}
27 28
                   </el-form-item>
28
-                </el-col>
29
-                <el-col :span="6" :xs="24">
30
-                  <el-form-item label="申请时间:" prop="applyDate">
31
-                    <el-date-picker style="width:170px;" v-model="form.applyDate" value-format="yyyy-MM-dd" type="date"
29
+                </td>
30
+                <td colspan="2" class="label-cell">申请时间</td>
31
+                <td colspan="2">
32
+                  <el-form-item prop="applyDate" class="table-form-item">
33
+                    <el-date-picker style="width: 100%;" v-model="form.applyDate" value-format="yyyy-MM-dd" type="date"
32 34
                       placeholder="选择日期" disabled>
33 35
                     </el-date-picker>
34 36
                   </el-form-item>
35
-                </el-col>
36
-              </el-row>
37
-              <el-form-item label="项目编号:" prop="projectId">
38
-                <el-button type="primary" size="mini" @click="openProject = true"
39
-                  v-if="taskName == '设备申请'">选择项目</el-button>
40
-                <el-descriptions border v-if="isSelect && chooseProject" style="margin-top: 10px;" :column="1">
41
-                  <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
42
-                  }}</el-descriptions-item>
43
-                  <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
44
-                  }}</el-descriptions-item>
45
-                  <el-descriptions-item label="项目负责人" label-class-name="my-label">{{ chooseProject.projectLeaderUser ?
46
-                    chooseProject.projectLeaderUser.nickName : ''
47
-                  }}</el-descriptions-item>
48
-                  <el-descriptions-item label="承担部门" label-class-name="my-label">
49
-                    <el-tag size="small">{{ chooseProject.undertakingDeptName }}</el-tag>
50
-                  </el-descriptions-item>
51
-                  <el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
52
-                  }}</el-descriptions-item>
53
-                </el-descriptions>
54
-              </el-form-item>
55
-              <el-form-item label="设备选择:" prop="devices">
56
-                <el-button type="primary" icon="el-icon-plus" size="mini" @click="openDevice = true"
57
-                  :disabled="taskName != '设备申请'">选择设备</el-button>
58
-                <el-table :data="deviceList">
59
-                  <el-table-column label="序号" type="index" />
60
-                  <el-table-column label="出厂编号" align="center" prop="code" />
61
-                  <el-table-column label="设备品牌" align="center" prop="brand" />
62
-                  <el-table-column label="设备名称" align="center" prop="name" />
63
-                  <el-table-column label="规格型号" align="center" prop="series" />
64
-                  <el-table-column label="存放地址" align="center" prop="place" />
65
-                </el-table>
66
-              </el-form-item>
67
-              <el-form-item label="申领事由:" prop="applyReason">
68
-                <el-input type="textarea" :rows="3" placeholder="请输入申领事由" v-model="form.applyReason"
69
-                  :disabled="taskName != '设备申请'">
70
-                </el-input>
71
-              </el-form-item>
72
-              <el-row>
73
-                <el-col :span="6" :xs="24">
74
-                  <el-form-item label="开始日期:" prop="beginDate">
75
-                    <el-date-picker style="width:170px;" v-model="form.beginDate" value-format="yyyy-MM-dd" type="date"
37
+                </td>
38
+              </tr>
39
+              <tr>
40
+                <td colspan="2" class="label-cell">项目信息</td>
41
+                <td colspan="10">
42
+                  <el-button type="primary" size="mini" @click="openProject = true"
43
+                    v-if="taskName == '设备申请'">选择项目</el-button>
44
+                  <table class="inner-table" v-if="isSelect && chooseProject">
45
+                    <tr>
46
+                      <td class="label-cell">项目编号</td>
47
+                      <td>{{ chooseProject.projectNumber }}</td>
48
+                      <td class="label-cell">项目名称</td>
49
+                      <td>{{ chooseProject.projectName }}</td>
50
+                    </tr>
51
+                    <tr>
52
+                      <td class="label-cell">项目负责人</td>
53
+                      <td>{{ chooseProject.projectLeaderUser ? chooseProject.projectLeaderUser.nickName : '' }}</td>
54
+                      <td class="label-cell">承担部门</td>
55
+                      <td>{{ chooseProject.undertakingDeptName }}</td>
56
+                    </tr>
57
+                    <tr>
58
+                      <td class="label-cell">项目类型</td>
59
+                      <td colspan="3">{{ chooseProject.projectType }}</td>
60
+                    </tr>
61
+                  </table>
62
+                  <el-form-item prop="projectId" class="table-form-item" style="display: none;"></el-form-item>
63
+                </td>
64
+              </tr>
65
+              <tr>
66
+                <td colspan="2" class="label-cell">设备选择</td>
67
+                <td colspan="10">
68
+                  <el-form-item prop="devices" class="table-form-item">
69
+                    <el-button type="primary" icon="el-icon-plus" size="mini" @click="openDevice = true"
70
+                      :disabled="taskName != '设备申请'">选择设备</el-button>
71
+                    <el-table class="embed-table" :data="deviceList" size="small" border>
72
+                      <el-table-column label="序号" type="index" width="55" align="center" />
73
+                      <el-table-column label="出厂编号" align="center" prop="code" min-width="100" />
74
+                      <el-table-column label="设备品牌" align="center" prop="brand" min-width="90" />
75
+                      <el-table-column label="设备名称" align="center" prop="name" min-width="100" />
76
+                      <el-table-column label="规格型号" align="center" prop="series" min-width="90" />
77
+                      <el-table-column label="存放地址" align="center" prop="place" min-width="100" />
78
+                    </el-table>
79
+                  </el-form-item>
80
+                </td>
81
+              </tr>
82
+              <tr>
83
+                <td colspan="2" class="label-cell">申领事由</td>
84
+                <td colspan="10">
85
+                  <el-form-item prop="applyReason" class="table-form-item">
86
+                    <el-input type="textarea" :rows="3" placeholder="请输入申领事由" v-model="form.applyReason"
87
+                      :disabled="taskName != '设备申请'">
88
+                    </el-input>
89
+                  </el-form-item>
90
+                </td>
91
+              </tr>
92
+              <tr>
93
+                <td colspan="2" class="label-cell">开始日期</td>
94
+                <td colspan="2">
95
+                  <el-form-item prop="beginDate" class="table-form-item">
96
+                    <el-date-picker style="width: 100%;" v-model="form.beginDate" value-format="yyyy-MM-dd" type="date"
76 97
                       placeholder="选择日期" @change="calculateDay" :disabled="taskName != '设备申请'">
77 98
                     </el-date-picker>
78 99
                   </el-form-item>
79
-                </el-col>
80
-                <el-col :span="6" :xs="24">
81
-                  <el-form-item label="结束日期:" prop="endDate">
82
-                    <el-date-picker style="width:170px;" v-model="form.endDate" value-format="yyyy-MM-dd" type="date"
100
+                </td>
101
+                <td colspan="2" class="label-cell">结束日期</td>
102
+                <td colspan="2">
103
+                  <el-form-item prop="endDate" class="table-form-item">
104
+                    <el-date-picker style="width: 100%;" v-model="form.endDate" value-format="yyyy-MM-dd" type="date"
83 105
                       placeholder="选择日期" @change="calculateDay" :disabled="taskName != '设备申请'">
84 106
                     </el-date-picker>
85 107
                   </el-form-item>
86
-                </el-col>
87
-                <el-col :span="8" :xs="24">
88
-                  <el-form-item label="共计:">
89
-                    {{ form.days + '天' }}
108
+                </td>
109
+                <td colspan="2" class="label-cell">共计</td>
110
+                <td colspan="2">{{ form.days }} 天</td>
111
+              </tr>
112
+              <tr>
113
+                <td colspan="2" class="label-cell">拟发放设备</td>
114
+                <td colspan="10">
115
+                  <el-form-item prop="modifyDevices" class="table-form-item">
116
+                    <el-table class="embed-table" :data="modifyDeviceList" size="small" border>
117
+                      <el-table-column label="序号" type="index" width="55" align="center" />
118
+                      <el-table-column label="出厂编号" align="center" prop="code" min-width="100" />
119
+                      <el-table-column label="设备品牌" align="center" prop="brand" min-width="90" />
120
+                      <el-table-column label="设备名称" align="center" prop="name" min-width="100" />
121
+                      <el-table-column label="规格型号" align="center" prop="series" min-width="90" />
122
+                      <el-table-column label="存放地址" align="center" prop="place" min-width="100" />
123
+                      <el-table-column label="操作" align="center" width="140" v-if="taskName == '安排设备'">
124
+                        <template slot-scope="scope">
125
+                          <el-button type="text" @click="replaceRowData(scope.row, scope.$index)">重新选择</el-button>
126
+                          <el-button type="text" style="color: #F56C6C;"
127
+                            @click="deleteRowData(scope.row, scope.$index)">删除</el-button>
128
+                        </template>
129
+                      </el-table-column>
130
+                    </el-table>
131
+                    <el-button class="mt10" type="primary" size="mini" @click="addRowdata()" icon="el-icon-plus"
132
+                      :disabled="taskName != '安排设备'">新增设备</el-button>
90 133
                   </el-form-item>
91
-                </el-col>
92
-              </el-row>
93
-              <!-- 安排设备意见 -->
94
-              <el-divider></el-divider>
95
-              <el-form-item label-width="120px" label="拟发放设备:" prop="modifyDevices">
96
-                <el-table :data="modifyDeviceList">
97
-                  <el-table-column label="序号" type="index" />
98
-                  <el-table-column label="出厂编号" align="center" prop="code" />
99
-                  <el-table-column label="设备品牌" align="center" prop="brand" />
100
-                  <el-table-column label="设备名称" align="center" prop="name" />
101
-                  <el-table-column label="规格型号" align="center" prop="series" />
102
-                  <el-table-column label="存放地址" align="center" prop="place" />
103
-                  <el-table-column label="操作" align="center" v-if="taskName == '安排设备'">
104
-                    <template slot-scope="scope">
105
-                      <el-button type="text" primary @click="replaceRowData(scope.row, scope.$index)">重新选择</el-button>
106
-                      <el-button type="text" style="color:#F56C6C"
107
-                        @click="deleteRowData(scope.row, scope.$index)">删除</el-button>
108
-                    </template>
109
-                  </el-table-column>
110
-                </el-table>
111
-                <el-button class="mt10" type="primary" size="mini" @click="addRowdata()" icon="el-icon-plus"
112
-                  :disabled="taskName != '安排设备'">新增设备</el-button>
113
-              </el-form-item>
114
-              <el-form-item label="安排设备意见:" prop="dispatchComment" label-width="125px">
115
-                <el-input type="textarea" :rows="3" placeholder="请输入安排设备意见" v-model="form.dispatchComment"
116
-                  :disabled="taskName != '安排设备'">
117
-                </el-input>
118
-              </el-form-item>
119
-              <el-row>
120
-                <el-col :span="6" :xs="24" :offset="12">
121
-                  <el-form-item label="签名:" label-width="120px" v-if="taskName != '设备申请'">
122
-                    <span class="auditor"> {{ form.dispatchUser ? form.dispatchUser.nickName : dispatchUser }} </span>
134
+                </td>
135
+              </tr>
136
+              <tr>
137
+                <td colspan="2" class="label-cell">安排设备意见</td>
138
+                <td colspan="10">
139
+                  <el-form-item prop="dispatchComment" class="table-form-item">
140
+                    <el-input type="textarea" :rows="3" placeholder="请输入安排设备意见" v-model="form.dispatchComment"
141
+                      :disabled="taskName != '安排设备'">
142
+                    </el-input>
123 143
                   </el-form-item>
124
-                </el-col>
125
-                <el-col :span="6">
126
-                  <el-form-item label="日期:" label-width="120px" v-if="taskName != '设备申请'">
127
-                    <span> {{ form.dispatchTime ? form.dispatchTime : dispatchTime }} </span>
144
+                  <el-row class="sign-line" v-if="taskName != '设备申请' || (taskName == '' && form.dispatchUser)">
145
+                    <el-col :span="6" :offset="11">
146
+                      签名:<span class="auditor">{{ form.dispatchUser ? form.dispatchUser.nickName : dispatchUser }}</span>
147
+                    </el-col>
148
+                    <el-col :span="6">
149
+                      日期:<span>{{ form.dispatchTime ? form.dispatchTime : dispatchTime }}</span>
150
+                    </el-col>
151
+                  </el-row>
152
+                </td>
153
+              </tr>
154
+              <tr>
155
+                <td colspan="2" class="label-cell">分管审核意见</td>
156
+                <td colspan="10">
157
+                  <el-form-item prop="managerComment" class="table-form-item">
158
+                    <el-input type="textarea" :rows="3" placeholder="请输入分管审核意见" v-model="form.managerComment"
159
+                      :disabled="taskName != '分管审核'">
160
+                    </el-input>
128 161
                   </el-form-item>
129
-                </el-col>
130
-              </el-row>
131
-              <!-- 分管审核意见 -->
132
-              <el-divider></el-divider>
133
-              <el-form-item label="分管审核意见:" prop="managerComment" label-width="125px">
134
-                <el-input type="textarea" :rows="3" placeholder="请输入分管审核意见" v-model="form.managerComment"
135
-                  :disabled="taskName != '分管审核'">
136
-                </el-input>
137
-              </el-form-item>
138
-              <el-row>
139
-                <el-col :span="6" :xs="24" :offset="12">
140
-                  <el-form-item label="签名:" label-width="120px">
141
-                    <span class="auditor"> {{ form.managerUser ? form.managerUser.nickName : managerUser }} </span>
162
+                  <el-row class="sign-line">
163
+                    <el-col :span="6" :offset="11">
164
+                      签名:<span class="auditor">{{ form.managerUser ? form.managerUser.nickName : managerUser }}</span>
165
+                    </el-col>
166
+                    <el-col :span="6">
167
+                      日期:<span>{{ form.managerTime ? form.managerTime : managerTime }}</span>
168
+                    </el-col>
169
+                  </el-row>
170
+                </td>
171
+              </tr>
172
+              <tr>
173
+                <td colspan="2" class="label-cell">已归还设备</td>
174
+                <td colspan="10">
175
+                  <el-table ref="returnDevicesRef" class="embed-table" :data="returnDevicesList" size="small" border
176
+                    row-key="deviceId" @selection-change="handleSelectionReturn">
177
+                    <el-table-column v-if="taskName == '归还确认'" type="selection" width="55" :selectable="checkReturnSelectable" />
178
+                    <el-table-column v-else label="归还状态" width="100" align="center">
179
+                      <template slot-scope="scope">
180
+                        <span class="return-status is-returned" v-if="isDeviceReturned(scope.row)">
181
+                          <i class="el-icon-success"></i>已归还
182
+                        </span>
183
+                        <span class="return-status is-pending" v-else>
184
+                          <i class="el-icon-remove-outline"></i>未归还
185
+                        </span>
186
+                      </template>
187
+                    </el-table-column>
188
+                    <el-table-column label="序号" type="index" width="55" align="center" />
189
+                    <el-table-column label="出厂编号" align="center" prop="code" min-width="100" />
190
+                    <el-table-column label="设备品牌" align="center" prop="brand" min-width="90" />
191
+                    <el-table-column label="设备名称" align="center" prop="name" min-width="100" />
192
+                    <el-table-column label="规格型号" align="center" prop="series" min-width="90" />
193
+                    <el-table-column label="存放地址" align="center" prop="place" min-width="100" />
194
+                  </el-table>
195
+                </td>
196
+              </tr>
197
+              <tr>
198
+                <td colspan="2" class="label-cell">需维修设备</td>
199
+                <td colspan="10">
200
+                  <el-form-item prop="repairDevices" class="table-form-item">
201
+                    <el-select style="width: 100%;" v-model="form.repairDevices" filterable multiple placeholder="请选择"
202
+                      clearable :disabled="taskName != '归还确认'">
203
+                      <el-option v-for="item in modifyDeviceList" :key="item.deviceId"
204
+                        :label="item.name + '【' + (item.brand != null ? item.brand : '') + (item.series != null ? '-' + item.series + '】' : '')
205
+                          + (item.code != null ? '(设备编号:' + item.code + ')' : '') + '📍' + item.place"
206
+                        :value="item.deviceId">
207
+                      </el-option>
208
+                    </el-select>
142 209
                   </el-form-item>
143
-                </el-col>
144
-                <el-col :span="6">
145
-                  <el-form-item label="日期:" label-width="120px">
146
-                    <span> {{ form.managerTime ? form.managerTime : managerTime }} </span>
210
+                </td>
211
+              </tr>
212
+              <tr>
213
+                <td colspan="2" class="label-cell">备注</td>
214
+                <td colspan="10">
215
+                  <el-form-item prop="remark" class="table-form-item">
216
+                    <el-input type="textarea" :rows="3" placeholder="请输入备注" v-model="form.remark"
217
+                      :disabled="taskName != '归还确认'">
218
+                    </el-input>
147 219
                   </el-form-item>
148
-                </el-col>
149
-              </el-row>
150
-              <!-- 归还确认 -->
151
-              <el-divider></el-divider>
152
-              <el-form-item label="已归还设备">
153
-                <el-table ref="returnDevicesRef" :data="returnDevicesList" @selection-change="handleSelectionReturn">
154
-                  <el-table-column type="selection" width="55" disabled />
155
-                  <el-table-column label="序号" type="index" />
156
-                  <el-table-column label="出厂编号" align="center" prop="code" />
157
-                  <el-table-column label="设备品牌" align="center" prop="brand" />
158
-                  <el-table-column label="设备名称" align="center" prop="name" />
159
-                  <el-table-column label="规格型号" align="center" prop="series" />
160
-                  <el-table-column label="存放地址" align="center" prop="place" />
161
-                </el-table>
162
-              </el-form-item>
163
-              <el-form-item label="需维修设备:" prop="repairDevices" label-width="120px">
164
-                <el-select style="width: 100%;" v-model="form.repairDevices" filterable multiple placeholder="请选择"
165
-                  clearable :disabled="taskName != '归还确认'">
166
-                  <el-option v-for="item in modifyDeviceList" :key="item.deviceId" :label="item.name + '【' + (item.brand != null ? item.brand : '') + (item.series != null ? '-' + item.series + '】' : '')
167
-                    + (item.code != null ? '(设备编号:' + item.code + ')' : '') + '📍' + item.place"
168
-                    :value="item.deviceId">
169
-                  </el-option>
170
-                </el-select>
171
-              </el-form-item>
172
-              <el-form-item label="备注:" prop="remark" label-width="120px">
173
-                <el-input type="textarea" :rows="3" placeholder="请输入备注" v-model="form.remark"
174
-                  :disabled="taskName != '归还确认'">
175
-                </el-input>
176
-              </el-form-item>
177
-              <el-form-item label="归还日期:" style="margin-left:20px" prop="returnDate">
178
-                <el-date-picker style="width:170px;" v-model="form.returnDate" value-format="yyyy-MM-dd" type="date"
179
-                  placeholder="选择日期" :disabled="taskName != '归还确认'">
180
-                </el-date-picker>
181
-              </el-form-item>
182
-            </el-form>
183
-            <el-row style="text-align: center;" v-if="taskName == '设备申请'">
184
-              <el-button type="primary" @click="submit">提交申请</el-button>
185
-            </el-row>
186
-            <el-row style="text-align: center;" v-else>
187
-              <el-button type="warning" @click="saves()" v-if="taskName">保存</el-button>
188
-              <el-button type="primary" @click="completeApply()" v-if="taskName">完成审批</el-button>
189
-            </el-row>
220
+                </td>
221
+              </tr>
222
+              <tr>
223
+                <td colspan="2" class="label-cell">归还日期</td>
224
+                <td colspan="10">
225
+                  <el-form-item prop="returnDate" class="table-form-item">
226
+                    <el-date-picker style="width: 240px;" v-model="form.returnDate" value-format="yyyy-MM-dd" type="date"
227
+                      placeholder="选择日期" :disabled="taskName != '归还确认'">
228
+                    </el-date-picker>
229
+                  </el-form-item>
230
+                </td>
231
+              </tr>
232
+            </table>
190 233
           </div>
191
-        </el-card>
234
+        </el-form>
235
+        <div class="form-footer" v-if="taskName == '设备申请'">
236
+          <el-button type="primary" @click="submit">提交申请</el-button>
237
+        </div>
238
+        <div class="form-footer" v-else-if="taskName">
239
+          <el-button type="warning" @click="saves()">保存</el-button>
240
+          <el-button type="primary" @click="completeApply()">完成审批</el-button>
241
+        </div>
192 242
       </el-col>
193 243
       <el-col :span="6" :xs="24" v-if="flowDisabled">
194 244
         <el-card>
@@ -249,11 +299,6 @@ export default {
249 299
       default: false
250 300
     }
251 301
   },
252
-  watch: {
253
-    'taskForm.formId'() {
254
-      this.initForm();
255
-    }
256
-  },
257 302
   created() {
258 303
     if (this.taskName == '分管审核') {
259 304
       this.managerUser = this.$store.getters.name;
@@ -306,13 +351,117 @@ export default {
306 351
       clicDevice: {},
307 352
       clickRowIndex: 0,
308 353
       multiple: true,
354
+      isSyncingReturnSelection: false,
355
+    }
356
+  },
357
+  watch: {
358
+    'taskForm.formId'() {
359
+      this.initForm();
360
+    },
361
+    returnDevicesList() {
362
+      this.trySyncReturnDeviceSelection();
363
+    },
364
+    taskName(val) {
365
+      if (val == '归还确认') {
366
+        this.trySyncReturnDeviceSelection();
367
+      }
309 368
     }
310 369
   },
311 370
   mounted() {
312 371
     this.initRules();
313 372
     this.initForm();
314 373
   },
374
+  computed: {
375
+    returnedDeviceIdSet() {
376
+      const rd = this.form.returnDevices;
377
+      if (!rd) {
378
+        return new Set();
379
+      }
380
+      if (Array.isArray(rd)) {
381
+        return new Set(rd.map(id => Number(id)));
382
+      }
383
+      if (typeof rd === 'string' && rd !== '') {
384
+        return new Set(rd.split(',').map(id => Number(id)));
385
+      }
386
+      return new Set();
387
+    }
388
+  },
315 389
   methods: {
390
+    isDeviceReturned(device) {
391
+      return device && this.returnedDeviceIdSet.has(Number(device.deviceId));
392
+    },
393
+    parseIdList(value) {
394
+      if (value == null || value === undefined || value === '') {
395
+        return [];
396
+      }
397
+      if (Array.isArray(value)) {
398
+        return value.map(id => Number(id));
399
+      }
400
+      return String(value).split(',').filter(id => id !== '').map(id => Number(id));
401
+    },
402
+    async loadDevicesByIds(ids) {
403
+      if (!ids.length) {
404
+        return [];
405
+      }
406
+      const devices = await Promise.all(
407
+        ids.map(id => getDevice(id).then(result => result.data).catch(() => null))
408
+      );
409
+      return devices.filter(Boolean);
410
+    },
411
+    async initDeviceFormData(data) {
412
+      const deviceIds = this.parseIdList(data.devices);
413
+      const modifyIds = this.parseIdList(data.modifyDevices);
414
+
415
+      if (deviceIds.length) {
416
+        this.deviceList = await this.loadDevicesByIds(deviceIds);
417
+        data.devices = deviceIds;
418
+        this.form.devices = deviceIds;
419
+      } else {
420
+        data.devices = [];
421
+        this.deviceList = [];
422
+        this.form.devices = [];
423
+      }
424
+
425
+      const grantIds = modifyIds.length ? modifyIds : deviceIds;
426
+      if (grantIds.length) {
427
+        this.modifyDeviceList = await this.loadDevicesByIds(grantIds);
428
+        data.modifyDevices = grantIds;
429
+        this.form.modifyDevices = grantIds;
430
+      } else {
431
+        data.modifyDevices = [];
432
+        this.modifyDeviceList = [];
433
+        this.form.modifyDevices = [];
434
+      }
435
+
436
+      this.setupReturnDevicesList(data);
437
+
438
+      if (data.repairDevices) {
439
+        this.form.repairDevices = this.parseIdList(data.repairDevices);
440
+      }
441
+      if (data.projectId) {
442
+        getProject(data.projectId).then(response => {
443
+          this.chooseProject = response.data;
444
+          this.isSelect = true;
445
+        });
446
+      }
447
+    },
448
+    setupReturnDevicesList(data) {
449
+      this.returnDevicesList = [...this.modifyDeviceList];
450
+      const returnIds = this.parseIdList(data.returnDevices);
451
+      this.form.returnDevices = returnIds;
452
+      this.trySyncReturnDeviceSelection();
453
+    },
454
+    checkReturnSelectable() {
455
+      return this.taskName == '归还确认' && !this.formDisabled;
456
+    },
457
+    trySyncReturnDeviceSelection() {
458
+      if (this.taskName != '归还确认' || !this.returnDevicesList.length) {
459
+        return;
460
+      }
461
+      this.$nextTick(() => {
462
+        this.syncReturnDeviceSelection();
463
+      });
464
+    },
316 465
     initRules() {
317 466
       if (this.taskName == '设备申请') {
318 467
         this.rules = {
@@ -368,71 +517,7 @@ export default {
368 517
           this.formTotal = 1;
369 518
           let data = res.data;
370 519
           this.form = data;
371
-          // 处理devices
372
-          if (res.data.devices == null || res.data.devices == undefined || res.data.devices == "") {
373
-            data.devices = []
374
-          } else {
375
-            data.devices = data.devices.split(',');
376
-            let arr = []
377
-            this.deviceList = []
378
-            for (let d of data.devices) {
379
-              arr.push(parseInt(d));
380
-              getDevice(d).then(result => {
381
-                this.deviceList.push(result.data);
382
-              })
383
-            }
384
-            data.devices = arr;
385
-          }
386
-          // 处理modifyDevices
387
-          if (res.data.modifyDevices == null || res.data.modifyDevices == undefined || res.data.modifyDevices == "") {
388
-            data.modifyDevices = []
389
-            this.modifyDeviceList = this.deviceList
390
-            this.form.modifyDevices = data.devices;
391
-          } else {
392
-            data.modifyDevices = data.modifyDevices.split(',');
393
-            let arr = []
394
-            this.modifyDeviceList = []
395
-            for (let d of data.modifyDevices) {
396
-              arr.push(parseInt(d));
397
-              getDevice(d).then(result => {
398
-                this.modifyDeviceList.push(result.data);
399
-              })
400
-            }
401
-            data.modifyDevices = arr;
402
-            this.form.modifyDevices = arr;
403
-          }
404
-          // 处理 returnDevices  
405
-          if (!data.returnDevices || data.returnDevices === "") {
406
-            data.returnDevices = [];
407
-            this.returnDevicesList = this.modifyDeviceList; // 如果逻辑允许,这里可以直接赋值 
408
-          } else {
409
-            this.returnDevicesList = this.modifyDeviceList;
410
-            let selectReturnDevicesIds = data.returnDevices.split(',');
411
-            let selectReturnDevicesPromises = selectReturnDevicesIds.map(d => getDevice(d).then(result => result.data));
412
-            Promise.all(selectReturnDevicesPromises).then(returnDevices => {
413
-              if (returnDevices) {
414
-                let deviceIdsSet = new Set(this.returnDevicesList.map(device => device.deviceId));
415
-                returnDevices.forEach(device1 => {
416
-                  if (deviceIdsSet.has(device1.deviceId)) {
417
-                    const matchingDevice = this.returnDevicesList.find(device2 => device2.deviceId === device1.deviceId);
418
-                    if (matchingDevice) {
419
-                      this.$refs.returnDevicesRef.toggleRowSelection(matchingDevice);
420
-                    }
421
-                  }
422
-                });
423
-              }
424
-            })
425
-          }
426
-          if (data.repairDevices) {
427
-            this.form.repairDevices = data.repairDevices.split(',');
428
-            this.form.repairDevices = this.form.repairDevices.map(v => Number(v));
429
-          }
430
-          if (data.projectId) {
431
-            getProject(data.projectId).then(response => {
432
-              this.chooseProject = response.data;
433
-              this.isSelect = true
434
-            })
435
-          }
520
+          this.initDeviceFormData(data);
436 521
         }
437 522
       })
438 523
     },
@@ -686,6 +771,7 @@ export default {
686 771
             list.push(j.deviceId)
687 772
           }
688 773
           this.form.modifyDevices = list;
774
+          this.returnDevicesList = [...this.modifyDeviceList];
689 775
         }
690 776
       }
691 777
       this.openDevice = false;
@@ -703,15 +789,34 @@ export default {
703 789
         list.push(j.deviceId)
704 790
       }
705 791
       this.form.modifyDevices = list;
792
+      this.returnDevicesList = [...this.modifyDeviceList];
706 793
     },
707 794
     addRowdata() {
708 795
       this.openDevice = true;
709 796
       this.multiple = true;
710 797
     },
711
-    // 选择已归还设备
798
+    // 选择已归还设备(仅归还确认节点)
712 799
     handleSelectionReturn(val) {
713
-      const ids = val.map(item => item.deviceId);
714
-      this.form.returnDevices = ids
800
+      if (this.taskName != '归还确认' || this.isSyncingReturnSelection) {
801
+        return;
802
+      }
803
+      this.form.returnDevices = val.map(item => Number(item.deviceId));
804
+    },
805
+    syncReturnDeviceSelection() {
806
+      const table = this.$refs.returnDevicesRef;
807
+      if (this.taskName != '归还确认' || !table || !this.returnDevicesList.length) {
808
+        return;
809
+      }
810
+      this.isSyncingReturnSelection = true;
811
+      table.clearSelection();
812
+      this.returnDevicesList.forEach(device => {
813
+        if (this.isDeviceReturned(device)) {
814
+          table.toggleRowSelection(device, true);
815
+        }
816
+      });
817
+      this.$nextTick(() => {
818
+        this.isSyncingReturnSelection = false;
819
+      });
715 820
     }
716 821
   },
717 822
 }
@@ -720,6 +825,184 @@ export default {
720 825
 <style lang="scss" scoped>
721 826
 @import "@/assets/styles/element-reset.scss";
722 827
 
828
+$border-light: #dcdfe6;
829
+$border-soft: #e4e7ed;
830
+$label-bg: #f0f2f5;
831
+$label-color: #606266;
832
+$text-primary: #303133;
833
+$accent: #409eff;
834
+
835
+.borrow-table-form {
836
+  margin-top: 16px;
837
+
838
+  .table-form-item {
839
+    margin-bottom: 0;
840
+
841
+    ::v-deep .el-form-item__content {
842
+      margin-left: 0 !important;
843
+      line-height: normal;
844
+    }
845
+
846
+    ::v-deep .el-form-item__error {
847
+      position: relative;
848
+      padding-top: 2px;
849
+    }
850
+  }
851
+
852
+  ::v-deep .el-input__inner,
853
+  ::v-deep .el-textarea__inner {
854
+    border-color: $border-light;
855
+    border-radius: 6px;
856
+    transition: border-color 0.2s, box-shadow 0.2s;
857
+
858
+    &:hover {
859
+      border-color: #c0c4cc;
860
+    }
861
+
862
+    &:focus {
863
+      border-color: $accent;
864
+      box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.12);
865
+    }
866
+  }
867
+
868
+  ::v-deep .el-input.is-disabled .el-input__inner,
869
+  ::v-deep .el-textarea.is-disabled .el-textarea__inner {
870
+    background-color: #f5f7fa;
871
+    color: #606266;
872
+  }
873
+
874
+  .embed-table {
875
+    width: 100%;
876
+    margin-top: 10px;
877
+  }
878
+
879
+  .return-status {
880
+    display: inline-flex;
881
+    align-items: center;
882
+    gap: 4px;
883
+    font-size: 13px;
884
+    font-weight: 500;
885
+    line-height: 1;
886
+
887
+    i {
888
+      font-size: 16px;
889
+    }
890
+
891
+    &.is-returned {
892
+      color: #67c23a;
893
+    }
894
+
895
+    &.is-pending {
896
+      color: #909399;
897
+    }
898
+  }
899
+}
900
+
901
+.form-table-wrap {
902
+  border: 1px solid $border-soft;
903
+  border-radius: 10px;
904
+  overflow: hidden;
905
+  background: #fff;
906
+  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
907
+}
908
+
909
+.form-table {
910
+  width: 100%;
911
+  border-collapse: collapse;
912
+  table-layout: fixed;
913
+  font-size: 14px;
914
+  color: $text-primary;
915
+
916
+  tr {
917
+    transition: background-color 0.15s;
918
+  }
919
+
920
+  tr:hover td:not(.label-cell) {
921
+    background-color: #fafcff;
922
+  }
923
+
924
+  td {
925
+    padding: 12px 14px;
926
+    border-bottom: 1px solid $border-light;
927
+    vertical-align: middle;
928
+    word-break: break-word;
929
+    background: #fff;
930
+  }
931
+
932
+  tr:last-child td {
933
+    border-bottom: none;
934
+  }
935
+
936
+  .label-cell {
937
+    width: 110px;
938
+    text-align: right;
939
+    font-size: 13px;
940
+    font-weight: 600;
941
+    color: $label-color;
942
+    background-color: $label-bg;
943
+    border-right: 1px solid $border-light;
944
+    white-space: nowrap;
945
+  }
946
+}
947
+
948
+.inner-table {
949
+  width: 100%;
950
+  border-collapse: separate;
951
+  border-spacing: 0;
952
+  margin-top: 8px;
953
+  font-size: 13px;
954
+  border: 1px solid $border-light;
955
+  border-radius: 8px;
956
+  overflow: hidden;
957
+
958
+  td {
959
+    padding: 8px 12px;
960
+    border-bottom: 1px solid $border-light;
961
+    border-right: 1px solid $border-light;
962
+    vertical-align: middle;
963
+    background: #fff;
964
+  }
965
+
966
+  tr:last-child td {
967
+    border-bottom: none;
968
+  }
969
+
970
+  td:last-child {
971
+    border-right: none;
972
+  }
973
+
974
+  .label-cell {
975
+    text-align: center;
976
+    font-weight: 600;
977
+    font-size: 12px;
978
+    color: $label-color;
979
+    background-color: $label-bg;
980
+    white-space: nowrap;
981
+  }
982
+}
983
+
984
+.sign-line {
985
+  margin-top: 12px;
986
+  padding-top: 10px;
987
+  border-top: 1px solid $border-light;
988
+  font-size: 13px;
989
+  color: $label-color;
990
+  line-height: 26px;
991
+
992
+  .auditor {
993
+    color: $text-primary;
994
+    font-weight: 500;
995
+  }
996
+}
997
+
998
+.form-footer {
999
+  margin-top: 24px;
1000
+  padding-bottom: 20px;
1001
+  text-align: center;
1002
+}
1003
+</style>
1004
+
1005
+<style>
723 1006
 ::v-deep .el-input.is-disabled .el-input__inner {
724 1007
   color: #121212 !important;
725 1008
 }

+ 2
- 1
oa-ui/src/views/oa/device/approval.vue Просмотреть файл

@@ -265,8 +265,9 @@ export default {
265 265
       this.title = "添加cmc设备审批";
266 266
     },
267 267
     handleView(row) {
268
+      this.taskForm.formId = row.deviceApplyId;
268 269
       this.open = true;
269
-      this.taskForm.formId = row.deviceApplyId
270
+      this.title = "查看设备审批";
270 271
     },
271 272
     /** 修改按钮操作 */
272 273
     handleUpdate(row) {

+ 284
- 74
oa-ui/src/views/oa/titles/record.vue Просмотреть файл

@@ -102,77 +102,116 @@
102 102
       @pagination="getList" />
103 103
 
104 104
     <!-- 添加或修改职称评审对话框 -->
105
-    <el-dialog :title="title" :visible.sync="open" width="60%" append-to-body>
106
-      <el-form ref="form" :model="form" :rules="formRules" label-width="120px">
107
-        <el-form-item label="申请人" prop="userId">
108
-          {{ getUserName(form.userId) }}
109
-        </el-form-item>
110
-        <el-form-item label="评审年度" prop="annual">
111
-          {{ form.annual }}
112
-        </el-form-item>
113
-        <el-form-item label="评审单位" prop="institude">
114
-          {{ form.institude }}
115
-        </el-form-item>
116
-        <el-form-item label="职称类型" prop="type">
117
-          {{ form.type }}
118
-        </el-form-item>
119
-        <el-form-item label="职称级别" prop="level">
120
-          {{ form.level }}
121
-        </el-form-item>
122
-        <el-form-item label="职称专业名称" prop="titleProfession">
123
-          {{ form.titleProfession }}
124
-        </el-form-item>
125
-        <el-form-item label="评审表(盖章前)" prop="sheet">
126
-          <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.sheet}`)">
127
-            {{ getFileName(form.sheet) }}
128
-          </el-link>
129
-          <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.sheet}`" :underline="false"
130
-            target="_blank">
131
-            <span class="el-icon-download">下载文件</span>
132
-          </el-link>
133
-        </el-form-item>
134
-        <el-form-item label="评审表(盖章后)" prop="sheetStamp">
135
-          <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.sheetStamp}`)">
136
-            {{ getFileName(form.sheetStamp) }}
137
-          </el-link>
138
-          <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.sheetStamp}`"
139
-            :underline="false" target="_blank">
140
-            <span class="el-icon-download">下载文件</span>
141
-          </el-link>
142
-        </el-form-item>
143
-        <el-form-item label="其他材料" prop="material">
144
-          <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.material}`)">
145
-            {{ getFileName(form.material) }}
146
-          </el-link>
147
-          <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.material}`" :underline="false"
148
-            target="_blank">
149
-            <span class="el-icon-download">下载文件</span>
150
-          </el-link>
151
-        </el-form-item>
152
-        <!-- 审核是否通过并添加材料 -->
153
-        <el-form-item label="是否通过" prop="isApproved">
154
-          <el-switch v-model="form.isApproved" active-value="1" inactive-value="0" active-text="通过" inactive-text="未通过">
155
-          </el-switch>
156
-        </el-form-item>
157
-        <template v-if="form.isApproved == '1'">
158
-          <el-form-item label="公示红头文件" prop="publicityFile">
159
-            <file-upload v-model="form.publicityFile" :filePathName="'职称评审/公示红头文件/' + form.annual + '/' + getUserName(form.userId)" :fileType="['pdf']"
160
-              @input="getPublicityFilePath" />
161
-          </el-form-item>
162
-          <el-form-item label="证书扫描件" prop="scanFile">
163
-            <file-upload v-model="form.scanFile" :filePathName="'职称评审/证书扫描件/' + form.annual + '/' + getUserName(form.userId)" :fileType="['pdf']"
164
-              @input="getScanFilePath" />
165
-          </el-form-item>
166
-          <el-form-item label="证书取得时间" prop="obtainTime">
167
-            <el-date-picker clearable v-model="form.obtainTime" type="date" value-format="yyyy-MM-dd"
168
-              placeholder="请选择证书取得时间">
169
-            </el-date-picker>
170
-          </el-form-item>
171
-        </template>
172
-      </el-form>
173
-      <div slot="footer" class="dialog-footer">
174
-        <el-button type="primary" @click="submitForm">确 定</el-button>
105
+    <el-dialog :visible.sync="open" width="760px" append-to-body custom-class="title-eval-dialog"
106
+      :close-on-click-modal="false">
107
+      <template slot="title">
108
+        <div class="title-eval-dialog__header">
109
+          <i class="el-icon-edit-outline" />
110
+          <span>{{ title }}</span>
111
+        </div>
112
+      </template>
113
+      <div class="title-eval-dialog__body">
114
+        <el-form ref="form" :model="form" :rules="formRules" label-width="120px">
115
+          <div class="form-section">
116
+            <div class="section-title">
117
+              <i class="el-icon-user" />
118
+              <span>基本信息</span>
119
+            </div>
120
+            <el-descriptions :column="2" border size="medium" class="info-descriptions">
121
+              <el-descriptions-item label="申请人">
122
+                <span class="info-value">{{ getUserName(form.userId) || '—' }}</span>
123
+              </el-descriptions-item>
124
+              <el-descriptions-item label="评审年度">
125
+                <span class="info-value">{{ form.annual || '—' }}</span>
126
+              </el-descriptions-item>
127
+              <el-descriptions-item label="评审单位">
128
+                <span class="info-value">{{ form.institude || '—' }}</span>
129
+              </el-descriptions-item>
130
+              <el-descriptions-item label="职称类型">
131
+                <el-tag v-if="form.type" size="small" effect="plain">{{ form.type }}</el-tag>
132
+                <span v-else class="info-empty">—</span>
133
+              </el-descriptions-item>
134
+              <el-descriptions-item label="职称级别">
135
+                <el-tag v-if="form.level" size="small" type="warning" effect="plain">{{ form.level }}</el-tag>
136
+                <span v-else class="info-empty">—</span>
137
+              </el-descriptions-item>
138
+              <el-descriptions-item label="职称专业名称" :span="2">
139
+                <span class="info-value">{{ form.titleProfession || '—' }}</span>
140
+              </el-descriptions-item>
141
+            </el-descriptions>
142
+          </div>
143
+
144
+          <div class="form-section">
145
+            <div class="section-title">
146
+              <i class="el-icon-folder-opened" />
147
+              <span>申请材料</span>
148
+            </div>
149
+            <el-form-item label-width="140px" v-for="item in applicationFiles" :key="item.key" :label="item.label" :prop="item.key">
150
+              <div v-if="hasFile(item.path)" class="file-row">
151
+                <el-link type="primary" :underline="false" @click="reviewWord(getUploadUrl(item.path))">
152
+                  <i class="el-icon-document" /> {{ getFileName(item.path) }}
153
+                </el-link>
154
+                <el-link class="ml20" type="warning" :href="getUploadUrl(item.path)" :underline="false" target="_blank">
155
+                  <i class="el-icon-download" /> 下载文件
156
+                </el-link>
157
+              </div>
158
+              <span v-else class="info-empty">暂无文件</span>
159
+            </el-form-item>
160
+          </div>
161
+
162
+          <div class="form-section form-section--result">
163
+            <div class="section-title">
164
+              <i class="el-icon-circle-check" />
165
+              <span>审核结果</span>
166
+            </div>
167
+            <el-form-item label="是否通过" prop="isApproved" class="approve-switch-item">
168
+              <el-switch v-model="form.isApproved" active-value="1" inactive-value="0" active-text="通过"
169
+                inactive-text="未通过" active-color="#67c23a" inactive-color="#f56c6c" />
170
+            </el-form-item>
171
+            <transition name="el-fade-in">
172
+              <div v-if="form.isApproved == '1'" class="pass-materials">
173
+                <el-alert title="通过评审后,请补充公示文件、证书扫描件及取得时间" type="info" :closable="false" show-icon
174
+                  class="pass-materials__tip" />
175
+                <el-form-item label="公示红头文件" prop="publicityFile">
176
+                  <div v-if="hasFile(form.publicityFile)" class="file-row file-row--readonly">
177
+                    <el-link type="primary" :underline="false" @click="reviewWord(getUploadUrl(form.publicityFile))">
178
+                      <i class="el-icon-document" /> {{ getFileName(form.publicityFile) }}
179
+                    </el-link>
180
+                    <el-link class="ml20" type="warning" :href="getUploadUrl(form.publicityFile)" :underline="false"
181
+                      target="_blank">
182
+                      <i class="el-icon-download" /> 下载文件
183
+                    </el-link>
184
+                  </div>
185
+                  <file-upload v-model="form.publicityFile"
186
+                    :filePathName="'职称评审/公示红头文件/' + form.annual + '/' + getUserName(form.userId)"
187
+                    :fileType="['pdf']" @input="getPublicityFilePath" />
188
+                </el-form-item>
189
+                <el-form-item label="证书扫描件" prop="scanFile">
190
+                  <div v-if="hasFile(form.scanFile)" class="file-row file-row--readonly">
191
+                    <el-link type="primary" :underline="false" @click="reviewWord(getUploadUrl(form.scanFile))">
192
+                      <i class="el-icon-document" /> {{ getFileName(form.scanFile) }}
193
+                    </el-link>
194
+                    <el-link class="ml20" type="warning" :href="getUploadUrl(form.scanFile)" :underline="false"
195
+                      target="_blank">
196
+                      <i class="el-icon-download" /> 下载文件
197
+                    </el-link>
198
+                  </div>
199
+                  <file-upload v-model="form.scanFile"
200
+                    :filePathName="'职称评审/证书扫描件/' + form.annual + '/' + getUserName(form.userId)" :fileType="['pdf']"
201
+                    @input="getScanFilePath" />
202
+                </el-form-item>
203
+                <el-form-item label="证书取得时间" prop="obtainTime">
204
+                  <el-date-picker v-model="form.obtainTime" clearable type="date" value-format="yyyy-MM-dd"
205
+                    placeholder="请选择证书取得时间" style="width: 100%" />
206
+                </el-form-item>
207
+              </div>
208
+            </transition>
209
+          </div>
210
+        </el-form>
211
+      </div>
212
+      <div slot="footer" class="title-eval-dialog__footer">
175 213
         <el-button @click="cancel">取 消</el-button>
214
+        <el-button type="primary" icon="el-icon-check" @click="submitForm">确 定</el-button>
176 215
       </div>
177 216
     </el-dialog>
178 217
   </div>
@@ -248,6 +287,15 @@ export default {
248 287
     }
249 288
   },
250 289
   computed: {
290
+    applicationFiles() {
291
+      const form = this.form || {};
292
+      return [
293
+        { key: 'sheet', label: '评审表(盖章前)', path: form.sheet },
294
+        // { key: 'secretOpinion', label: '保密审核意见单及承诺书', path: form.secretOpinion },
295
+        { key: 'sheetStamp', label: '评审表(盖章后)', path: form.sheetStamp },
296
+        { key: 'material', label: '其他材料', path: form.material },
297
+      ];
298
+    },
251 299
     formRules() {
252 300
       return {
253 301
         publicityFile: [
@@ -263,6 +311,18 @@ export default {
263 311
     },
264 312
   },
265 313
   methods: {
314
+    hasFile(path) {
315
+      return path != null && String(path).trim() !== '';
316
+    },
317
+    getUploadUrl(path) {
318
+      if (!this.hasFile(path)) return '';
319
+      const p = String(path).trim();
320
+      if (/^https?:\/\//i.test(p)) return p;
321
+      if (p.indexOf('/profile/upload') === 0) {
322
+        return `${this.baseUrl}${p}`;
323
+      }
324
+      return `${this.baseUrl}/profile/upload${p}`;
325
+    },
266 326
     /** 查询职称评审列表 */
267 327
     getList() {
268 328
       this.loading = true;
@@ -303,6 +363,7 @@ export default {
303 363
         level: null,
304 364
         titleProfession: null,
305 365
         sheet: null,
366
+        secretOpinion: null,
306 367
         sheetStamp: null,
307 368
         material: null,
308 369
         isApproved: null,
@@ -344,12 +405,33 @@ export default {
344 405
     },
345 406
     /** 修改按钮操作 */
346 407
     handleUpdate(row) {
408
+      let targetRow = row;
409
+      if (!targetRow || !targetRow.titleEvalId) {
410
+        const selected = (this.evalList || []).filter((item) =>
411
+          (this.ids || []).includes(item.titleEvalId)
412
+        );
413
+        targetRow = selected.length === 1 ? selected[0] : null;
414
+      }
415
+      const titleEvalId = targetRow
416
+        ? targetRow.titleEvalId
417
+        : Array.isArray(this.ids)
418
+          ? this.ids[0]
419
+          : this.ids;
420
+      if (!titleEvalId) {
421
+        this.$modal.msgWarning('请选择一条记录');
422
+        return;
423
+      }
347 424
       this.reset();
348
-      const titleEvalId = row.titleEvalId || this.ids;
425
+      this.title = '修改职称评审';
426
+      this.open = true;
427
+      if (targetRow) {
428
+        this.form = { ...this.form, ...targetRow };
429
+      }
349 430
       getEval(titleEvalId).then((response) => {
350
-        this.form = response.data;
351
-        this.open = true;
352
-        this.title = "修改职称评审";
431
+        this.form = { ...this.form, ...(response.data || {}) };
432
+        this.$nextTick(() => {
433
+          this.$refs.form && this.$refs.form.clearValidate();
434
+        });
353 435
       });
354 436
     },
355 437
     /**switch切换到未通过时清除上传文件 */
@@ -410,3 +492,131 @@ export default {
410 492
   },
411 493
 };
412 494
 </script>
495
+
496
+<style lang="scss" scoped>
497
+.form-section {
498
+  margin-bottom: 20px;
499
+  padding: 18px 20px;
500
+  border: 1px solid #e4e7ed;
501
+  border-radius: 8px;
502
+  background: #fafbfc;
503
+
504
+  &:last-child {
505
+    margin-bottom: 0;
506
+  }
507
+
508
+  .section-title {
509
+    display: flex;
510
+    align-items: center;
511
+    margin-bottom: 16px;
512
+    padding-bottom: 10px;
513
+    border-bottom: 2px solid #409eff;
514
+
515
+    i {
516
+      color: #409eff;
517
+      margin-right: 8px;
518
+      font-size: 18px;
519
+    }
520
+
521
+    span {
522
+      font-size: 15px;
523
+      font-weight: 600;
524
+      color: #303133;
525
+    }
526
+  }
527
+}
528
+
529
+.form-section--result {
530
+  background: #fff;
531
+}
532
+
533
+.info-descriptions {
534
+  ::v-deep .el-descriptions__label {
535
+    width: 110px;
536
+    color: #606266;
537
+    font-weight: 500;
538
+  }
539
+}
540
+
541
+.info-value {
542
+  color: #303133;
543
+  font-weight: 500;
544
+}
545
+
546
+.info-empty {
547
+  color: #c0c4cc;
548
+  font-size: 13px;
549
+}
550
+
551
+.file-row {
552
+  display: flex;
553
+  flex-wrap: wrap;
554
+  align-items: center;
555
+  line-height: 32px;
556
+
557
+  &--readonly {
558
+    margin-bottom: 8px;
559
+    padding: 8px 12px;
560
+    background: #f5f7fa;
561
+    border-radius: 4px;
562
+    border: 1px solid #ebeef5;
563
+  }
564
+}
565
+
566
+.approve-switch-item {
567
+  margin-bottom: 8px;
568
+}
569
+
570
+.pass-materials {
571
+  margin-top: 8px;
572
+  padding-top: 16px;
573
+  border-top: 1px dashed #e4e7ed;
574
+
575
+  &__tip {
576
+    margin-bottom: 16px;
577
+  }
578
+}
579
+</style>
580
+
581
+<style lang="scss">
582
+.title-eval-dialog {
583
+  border-radius: 10px;
584
+  overflow: hidden;
585
+
586
+  .el-dialog__header {
587
+    padding: 18px 24px 14px;
588
+    border-bottom: 1px solid #ebeef5;
589
+    background: linear-gradient(135deg, #f5f9ff 0%, #fff 100%);
590
+  }
591
+
592
+  .el-dialog__body {
593
+    padding: 20px 24px;
594
+    max-height: 68vh;
595
+    overflow-y: auto;
596
+  }
597
+
598
+  .el-dialog__footer {
599
+    padding: 14px 24px 18px;
600
+    border-top: 1px solid #ebeef5;
601
+    background: #fafbfc;
602
+  }
603
+
604
+  &__header {
605
+    display: flex;
606
+    align-items: center;
607
+    font-size: 17px;
608
+    font-weight: 600;
609
+    color: #303133;
610
+
611
+    i {
612
+      margin-right: 10px;
613
+      font-size: 20px;
614
+      color: #409eff;
615
+    }
616
+  }
617
+
618
+  &__footer {
619
+    text-align: right;
620
+  }
621
+}
622
+</style>

Загрузка…
Отмена
Сохранить