npmapps 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,147 @@
1
+ <template>
2
+ <div class="attendanceCycle" v-loading="loading">
3
+ <div class="header">
4
+ <div class="left">
5
+ <el-button size="mini" type="primary" @click="onSave">选择</el-button>
6
+ </div>
7
+ <div class="right">
8
+
9
+ </div>
10
+ </div>
11
+ <el-table
12
+ size="mini"
13
+ :data="tableData"
14
+ style="width: 100%"
15
+ border
16
+ @row-click="handleRowClick"
17
+ >
18
+ <!-- 单选框列 -->
19
+ <el-table-column width="50">
20
+ <template slot-scope="scope">
21
+ <el-radio
22
+ :value="currentRow.monthId"
23
+ :label="scope.row.monthId"
24
+ >&nbsp;</el-radio>
25
+ </template>
26
+ </el-table-column>
27
+ <el-table-column prop="monthId" label="表集合"></el-table-column>
28
+ <el-table-column prop="monthName" label="名称"></el-table-column>
29
+ <el-table-column prop="monthName" label="休息班"></el-table-column>
30
+ <el-table-column prop="monthName" label="班段信息"></el-table-column>
31
+ <el-table-column prop="monthName" label="班次类型"></el-table-column>
32
+ <el-table-column prop="monthName" label="状态"></el-table-column>
33
+ </el-table>
34
+ <div class="footer">
35
+ <div class="left">
36
+
37
+ </div>
38
+ <div class="right">
39
+ <el-pagination
40
+ @size-change="handleSizeChange"
41
+ @current-change="handleCurrentChange"
42
+ :current-page="currentPage"
43
+ :page-sizes="[10, 20, 30, 100]"
44
+ :page-size="10"
45
+ layout="total, sizes, prev, pager, next"
46
+ :total="total"
47
+ >
48
+ </el-pagination>
49
+ </div>
50
+ </div>
51
+ </div>
52
+ </template>
53
+
54
+ <script>
55
+ import {
56
+ getOpenAttendanceCycleMonthListApi,
57
+ } from "../../employeeSchedulingManagement/data.js";
58
+
59
+ export default {
60
+ // 班次
61
+ props: {
62
+ close: {
63
+ type: Function,
64
+ default: () => {},
65
+ },
66
+ setData:{
67
+ type: Function,
68
+ default: () => {},
69
+ },
70
+ },
71
+
72
+ data() {
73
+ return {
74
+ loading: false,
75
+ tableData: [],
76
+ year: "2025",
77
+ options: [],
78
+ currentRow: {
79
+ monthId: "",
80
+ }, // 当前选中的行
81
+ currentPage: 1,
82
+ total: 11110,
83
+ };
84
+ },
85
+ mounted() {
86
+ this.loading = false;
87
+ this.getTableData();
88
+ },
89
+ methods: {
90
+ getTableData() {
91
+ this.loading = true;
92
+ getOpenAttendanceCycleMonthListApi(this.year).then((res) => {
93
+ this.tableData = res;
94
+ console.log(res, "res");
95
+ this.loading = false;
96
+ });
97
+ },
98
+
99
+ yearChange() {
100
+ this.getTableData();
101
+ },
102
+ handleRowClick(row) {
103
+ this.currentRow = row; // 点击行时更新选中状态
104
+ },
105
+ onSave() {
106
+ if (this.currentRow.monthId === "") {
107
+ return this.$message.error("请选择");
108
+ }
109
+ this.close();
110
+ this.setData(this.currentRow);
111
+ },
112
+ handleSizeChange(val) {
113
+ this.currentPage = 1;
114
+ this.getTableData();
115
+ },
116
+ handleCurrentChange(val) {
117
+ this.currentPage = val;
118
+ this.getTableData();
119
+ },
120
+
121
+
122
+ },
123
+ };
124
+ </script>
125
+
126
+ <style lang="less" scoped>
127
+ .attendanceCycle {
128
+ .header {
129
+ display: flex;
130
+ justify-content: space-between;
131
+ align-items: center;
132
+ margin-bottom: 10px;
133
+ .left {
134
+ display: flex;
135
+ align-items: center;
136
+ }
137
+ .right {
138
+ display: flex;
139
+ align-items: center;
140
+ }
141
+ }
142
+ .footer {
143
+ display: flex;
144
+ justify-content: space-between;
145
+ }
146
+ }
147
+ </style>
@@ -0,0 +1,147 @@
1
+ <template>
2
+ <div class="attendanceCycle" v-loading="loading">
3
+ <div class="header">
4
+ <div class="left">
5
+ <el-button size="mini" type="primary" @click="onSave">选择</el-button>
6
+ </div>
7
+ <div class="right">
8
+
9
+ </div>
10
+ </div>
11
+ <el-table
12
+ size="mini"
13
+ :data="tableData"
14
+ style="width: 100%"
15
+ border
16
+ @row-click="handleRowClick"
17
+ >
18
+ <!-- 单选框列 -->
19
+ <el-table-column width="50">
20
+ <template slot-scope="scope">
21
+ <el-radio
22
+ :value="currentRow.monthId"
23
+ :label="scope.row.monthId"
24
+ >&nbsp;</el-radio>
25
+ </template>
26
+ </el-table-column>
27
+ <el-table-column prop="monthId" label="表集合"></el-table-column>
28
+ <el-table-column prop="monthId" label="编码"></el-table-column>
29
+ <el-table-column prop="monthName" label="名称"></el-table-column>
30
+ <el-table-column prop="monthName" label="是否按周期排班"></el-table-column>
31
+ <el-table-column prop="monthName" label="周期"></el-table-column>
32
+ <el-table-column prop="monthName" label="生效日期"></el-table-column>
33
+ </el-table>
34
+ <div class="footer">
35
+ <div class="left">
36
+
37
+ </div>
38
+ <div class="right">
39
+ <el-pagination
40
+ @size-change="handleSizeChange"
41
+ @current-change="handleCurrentChange"
42
+ :current-page="currentPage"
43
+ :page-sizes="[10, 20, 30, 100]"
44
+ :page-size="10"
45
+ layout="total, sizes, prev, pager, next"
46
+ :total="total"
47
+ >
48
+ </el-pagination>
49
+ </div>
50
+ </div>
51
+ </div>
52
+ </template>
53
+
54
+ <script>
55
+ import {
56
+ getOpenAttendanceCycleMonthListApi,
57
+ } from "../../employeeSchedulingManagement/data.js";
58
+
59
+ export default {
60
+ // 轮班制度
61
+ props: {
62
+ close: {
63
+ type: Function,
64
+ default: () => {},
65
+ },
66
+ setData:{
67
+ type: Function,
68
+ default: () => {},
69
+ },
70
+ },
71
+
72
+ data() {
73
+ return {
74
+ loading: false,
75
+ tableData: [],
76
+ year: "2025",
77
+ options: [],
78
+ currentRow: {
79
+ monthId: "",
80
+ }, // 当前选中的行
81
+ currentPage: 1,
82
+ total: 11110,
83
+ };
84
+ },
85
+ mounted() {
86
+ this.loading = false;
87
+ this.getTableData();
88
+ },
89
+ methods: {
90
+ getTableData() {
91
+ this.loading = true;
92
+ getOpenAttendanceCycleMonthListApi(this.year).then((res) => {
93
+ this.tableData = res;
94
+ console.log(res, "res");
95
+ this.loading = false;
96
+ });
97
+ },
98
+
99
+ yearChange() {
100
+ this.getTableData();
101
+ },
102
+ handleRowClick(row) {
103
+ this.currentRow = row; // 点击行时更新选中状态
104
+ },
105
+ onSave() {
106
+ if (this.currentRow.monthId === "") {
107
+ return this.$message.error("请选择");
108
+ }
109
+ this.close();
110
+ this.setData(this.currentRow);
111
+ },
112
+ handleSizeChange(val) {
113
+ this.currentPage = 1;
114
+ this.getTableData();
115
+ },
116
+ handleCurrentChange(val) {
117
+ this.currentPage = val;
118
+ this.getTableData();
119
+ },
120
+
121
+
122
+ },
123
+ };
124
+ </script>
125
+
126
+ <style lang="less" scoped>
127
+ .attendanceCycle {
128
+ .header {
129
+ display: flex;
130
+ justify-content: space-between;
131
+ align-items: center;
132
+ margin-bottom: 10px;
133
+ .left {
134
+ display: flex;
135
+ align-items: center;
136
+ }
137
+ .right {
138
+ display: flex;
139
+ align-items: center;
140
+ }
141
+ }
142
+ .footer {
143
+ display: flex;
144
+ justify-content: space-between;
145
+ }
146
+ }
147
+ </style>
@@ -0,0 +1,401 @@
1
+ <template>
2
+ <div class="batchScheduling">
3
+ <div class="basicInfo">
4
+ <div class="title">基本信息</div>
5
+ <div class="content">
6
+ <el-form
7
+ ref="form"
8
+ :model="formData"
9
+ label-width="140px"
10
+ :rules="rules"
11
+ >
12
+ <div class="form-item-fisrt">
13
+ <el-form-item label="开始日期" prop="startDate">
14
+ <el-date-picker
15
+ style="width: 100%"
16
+ size="small"
17
+ v-model="formData.startDate"
18
+ type="date"
19
+ placeholder="选择日期"
20
+ >
21
+ </el-date-picker>
22
+ </el-form-item>
23
+ <el-form-item label="结束日期" prop="endDate">
24
+ <el-date-picker
25
+ style="width: 100%"
26
+ size="small"
27
+ v-model="formData.endDate"
28
+ type="date"
29
+ placeholder="选择日期"
30
+ >
31
+ </el-date-picker>
32
+ </el-form-item>
33
+ <el-form-item label="分类" prop="category">
34
+ <el-input
35
+ size="small"
36
+ v-model="formData.category"
37
+ placeholder="请输入分类"
38
+ />
39
+ </el-form-item>
40
+ <el-form-item label="轮班制度" prop="shiftRotationSystem">
41
+ <el-input
42
+ size="small"
43
+ v-model="formData.shiftRotationSystem"
44
+ placeholder="请输入轮班制度"
45
+ >
46
+ <el-button
47
+ slot="append"
48
+ icon="el-icon-search"
49
+ @click="openShiftRotationSystem"
50
+ ></el-button
51
+ ></el-input>
52
+ </el-form-item>
53
+ <el-form-item
54
+ label="起始班次序号"
55
+ prop="startShift"
56
+ v-if="formData.participants === '1'"
57
+ >
58
+ <el-input
59
+ size="small"
60
+ v-model="formData.startShift"
61
+ placeholder="请输入起始班次序号"
62
+ />
63
+ </el-form-item>
64
+ <el-form-item label="法定假日休息班次" prop="legalHolidayRestShift">
65
+ <el-input
66
+ size="small"
67
+ v-model="formData.legalHolidayRestShift"
68
+ placeholder="请输入法定假日休息班次"
69
+ >
70
+ <el-button
71
+ slot="append"
72
+ icon="el-icon-search"
73
+ @click="openShift('legalHolidayRestShift')"
74
+ ></el-button
75
+ ></el-input>
76
+ </el-form-item>
77
+ <el-form-item
78
+ label="企业假日休息班次"
79
+ prop="enterpriseHolidayRestShift"
80
+ >
81
+ <el-input
82
+ size="small"
83
+ v-model="formData.enterpriseHolidayRestShift"
84
+ placeholder="请输入企业假日休息班次"
85
+ >
86
+ <el-button
87
+ slot="append"
88
+ icon="el-icon-search"
89
+ @click="openShift('enterpriseHolidayRestShift')"
90
+ ></el-button
91
+ ></el-input>
92
+ </el-form-item>
93
+ <el-form-item label="企业日历" prop="calendar">
94
+ <el-input
95
+ size="small"
96
+ v-model="formData.calendar"
97
+ placeholder="请输入企业日历"
98
+ >
99
+ <el-button
100
+ slot="append"
101
+ icon="el-icon-search"
102
+ @click="openCompanyCalendar"
103
+ ></el-button
104
+ ></el-input>
105
+ </el-form-item>
106
+ <el-form-item label="参与人员" prop="participants">
107
+ <el-radio-group v-model="formData.participants">
108
+ <el-radio label="1">组内全部人员</el-radio>
109
+ <el-radio label="2">组内部分人员</el-radio>
110
+ </el-radio-group>
111
+ </el-form-item>
112
+ </div>
113
+ <div v-if="formData.participants === '2'" class="form-item-second">
114
+ <el-form-item label="选择人员" prop="personList">
115
+ <el-input
116
+ :value="personListComputed"
117
+ type="textarea"
118
+ placeholder="请输入内容"
119
+ />
120
+ </el-form-item>
121
+ <el-form-item>
122
+ <el-button
123
+ icon="el-icon-search"
124
+ size="mini"
125
+ style="margin-right: 10px"
126
+ @click="openAttendancePersonnel"
127
+ ></el-button>
128
+ <el-checkbox v-model="formData.reverseFilter"
129
+ >反向筛选</el-checkbox
130
+ >
131
+ </el-form-item>
132
+ </div>
133
+ </el-form>
134
+ </div>
135
+ </div>
136
+ <div class="shiftInfo">
137
+ <div class="title">班次信息</div>
138
+ <div class="shiftInfo-content">
139
+ <el-table size="mini" :data="tableData" style="width: 100%" border>
140
+ <el-table-column label="序号" prop="index"></el-table-column>
141
+ <el-table-column label="班次" prop="shiftName"> </el-table-column>
142
+ <el-table-column label="上班时间" prop="shiftTime"> </el-table-column>
143
+ <el-table-column label="下班时间" prop="shiftTimeEnd">
144
+ </el-table-column>
145
+ </el-table>
146
+ </div>
147
+ </div>
148
+ <div class="bottom">
149
+ <el-button size="small" @click="close">取消</el-button>
150
+ <el-button size="small" type="primary" @click="onSave">生成排班</el-button>
151
+ </div>
152
+ </div>
153
+ </template>
154
+
155
+ <script>
156
+ import shiftRotationSystem from "../../components/shiftRotationSystem";
157
+ import shift from "../../components/shift";
158
+ import companyCalendar from "../../components/companyCalendar";
159
+ import attendancePersonnel from "../../components/attendancePersonnel";
160
+ export default {
161
+ // 批量排班
162
+ name: "batchScheduling",
163
+ props: {
164
+ close: {
165
+ type: Function,
166
+ default: () => {},
167
+ },
168
+
169
+ },
170
+ data() {
171
+ return {
172
+ formData: {
173
+ startDate: "", // 开始日期
174
+ endDate: "", // 结束日期
175
+ category: "", // 分类
176
+ shiftRotationSystem: "", // 轮班制度
177
+ startShift: "", // 起始班次序号
178
+ legalHolidayRestShift: "", // 法定假日休息班次
179
+ enterpriseHolidayRestShift: "", // 企业假日休息班次
180
+ calendar: "", // 企业日历
181
+ participants: "1", // 参与人员
182
+ personList: [],
183
+ reverseFilter: false,
184
+ },
185
+ rules: {
186
+ startDate: [
187
+ { required: true, message: "请选择开始日期", trigger: "blur" },
188
+ ],
189
+ endDate: [
190
+ { required: true, message: "请选择结束日期", trigger: "blur" },
191
+ ],
192
+ category: [{ required: true, message: "请输入分类", trigger: "blur" }],
193
+ shiftRotationSystem: [
194
+ { required: true, message: "请输入轮班制度", trigger: "blur" },
195
+ ],
196
+ startShift: [
197
+ { required: true, message: "请输入起始班次序号", trigger: "blur" },
198
+ ],
199
+ legalHolidayRestShift: [
200
+ {
201
+ required: true,
202
+ message: "请输入法定假日休息班次",
203
+ trigger: "blur",
204
+ },
205
+ ],
206
+ enterpriseHolidayRestShift: [
207
+ {
208
+ required: true,
209
+ message: "请输入企业假日休息班次",
210
+ trigger: "blur",
211
+ },
212
+ ],
213
+ calendar: [
214
+ { required: true, message: "请输入企业日历", trigger: "blur" },
215
+ ],
216
+ participants: [
217
+ { required: true, message: "请输入参与人员", trigger: "blur" },
218
+ ],
219
+ },
220
+ tableData: [
221
+ {
222
+ id: 1,
223
+ index: 1,
224
+ shiftName: "早班",
225
+ shiftTime: "07:00-09:00",
226
+ shiftTimeEnd: "09:00-11:00",
227
+ },
228
+ {
229
+ id: 2,
230
+ index: 2,
231
+ shiftName: "中班",
232
+ shiftTime: "09:00-11:00",
233
+ shiftTimeEnd: "11:00-13:00",
234
+ },
235
+ {
236
+ id: 3,
237
+ index: 3,
238
+ shiftName: "晚班",
239
+ shiftTime: "11:00-13:00",
240
+ shiftTimeEnd: "13:00-15:00",
241
+ },
242
+ {
243
+ id: 4,
244
+ index: 4,
245
+ shiftName: "夜班",
246
+ shiftTime: "13:00-15:00",
247
+ shiftTimeEnd: "15:00-17:00",
248
+ },
249
+ {
250
+ id: 5,
251
+ index: 5,
252
+ shiftName: "夜班",
253
+ shiftTime: "15:00-17:00",
254
+ shiftTimeEnd: "17:00-19:00",
255
+ },
256
+ {
257
+ id: 6,
258
+ index: 6,
259
+ shiftName: "夜班",
260
+ shiftTime: "17:00-19:00",
261
+ shiftTimeEnd: "19:00-21:00",
262
+ },
263
+ {
264
+ id: 7,
265
+ index: 7,
266
+ shiftName: "夜班",
267
+ shiftTime: "19:00-21:00",
268
+ shiftTimeEnd: "21:00-23:00",
269
+ },
270
+ ],
271
+ };
272
+ },
273
+ computed: {
274
+ personListComputed() {
275
+ return "1";
276
+ },
277
+ },
278
+ mounted() {},
279
+ methods: {
280
+ openShiftRotationSystem() {
281
+ const config = {
282
+ props: {
283
+ title: "轮班制度",
284
+ width: "50%",
285
+ },
286
+ slots: {
287
+ default: (
288
+ <shiftRotationSystem
289
+ setData={this.setShiftRotationSystem}
290
+ close={() => close()}
291
+ />
292
+ ),
293
+ },
294
+ };
295
+ let { close } = this.$dialogFnByJsx(config);
296
+ },
297
+ setShiftRotationSystem(data) {
298
+ console.log(data);
299
+ },
300
+ openShift(key) {
301
+ const config = {
302
+ props: {
303
+ title: "班次",
304
+ width: "50%",
305
+ },
306
+ slots: {
307
+ default: (
308
+ <shift
309
+ setData={(d) => this.setShift(d, key)}
310
+ close={() => close()}
311
+ />
312
+ ),
313
+ },
314
+ };
315
+ let { close } = this.$dialogFnByJsx(config);
316
+ },
317
+ setShift(data, key) {
318
+ console.log(data, key, "setShift");
319
+ },
320
+ openCompanyCalendar() {
321
+ const config = {
322
+ props: {
323
+ title: "企业日历",
324
+ width: "50%",
325
+ },
326
+ slots: {
327
+ default: (
328
+ <companyCalendar
329
+ setData={this.setCompanyCalendarData}
330
+ close={() => close()}
331
+ />
332
+ ),
333
+ },
334
+ };
335
+ let { close } = this.$dialogFnByJsx(config);
336
+ },
337
+ setCompanyCalendarData(row) {
338
+ console.log(row, "setCompanyCalendarData");
339
+ },
340
+
341
+ openAttendancePersonnel() {
342
+ const config = {
343
+ props: {
344
+ title: "选择考勤人员",
345
+ width: "50%",
346
+ },
347
+ slots: {
348
+ default: (
349
+ <attendancePersonnel
350
+ close={() => close()}
351
+ setData={(row) => this.setAttendancePersonnel(row)}
352
+ multiple={true}
353
+ />
354
+ ),
355
+ },
356
+ };
357
+ let { close } = this.$dialogFnByJsx(config);
358
+ },
359
+ setAttendancePersonnel(row) {
360
+ console.log(row, "setAttendancePersonnel");
361
+ },
362
+
363
+ onSave() {
364
+ console.log("onSave");
365
+ this.close();
366
+ }
367
+ },
368
+ };
369
+ </script>
370
+
371
+ <style lang="less">
372
+ .batchScheduling {
373
+ .title {
374
+ font-size: 16px;
375
+ font-weight: 600;
376
+ border-bottom: 1px solid #ccc;
377
+ margin-bottom: 10px;
378
+ padding-bottom: 6px;
379
+ }
380
+ .basicInfo {
381
+ .form-item-fisrt {
382
+ display: flex;
383
+ flex-wrap: wrap;
384
+ .el-form-item {
385
+ width: 45%;
386
+ margin-bottom: 14px;
387
+ }
388
+ }
389
+ .form-item-second {
390
+ .el-form-item {
391
+ margin-bottom: 4px;
392
+ }
393
+ }
394
+ }
395
+ .bottom {
396
+ display: flex;
397
+ justify-content: flex-end;
398
+ margin-top: 10px;
399
+ }
400
+ }
401
+ </style>