sunlupeng 1 年之前
父节点
当前提交
f418a4d6d0

+ 1 - 1
src/api/personnel/attendance/employee/index.js

@@ -8,7 +8,7 @@ export function listUser(query) {
     params: query
   })
 }
-// 修改用户
+// 设置排班
 export function updateUser(data) {
   return request({
     url: '/personnel/attendance/employee-setting/batch-update',

+ 1 - 1
src/api/personnel/attendance/leave/index.js

@@ -12,7 +12,7 @@ export function listLeave(query) {
 // 查询详细
 export function getLeave(id) {
   return request({
-    url: '/personnel/attendance/leave/page?id=' + id,
+    url: '/personnel/attendance/leave/get?id=' + id,
     method: 'get'
   })
 }

+ 1 - 1
src/api/personnel/attendance/scheduling/index.js

@@ -12,7 +12,7 @@ export function listScheduling(query) {
 // 获取精简信息列表
 export function listSimpleSchedulings() {
   return request({
-    url: '/system/post/list-all-simple',
+    url: '/personnel/attendance/scheduling-manage/list',
     method: 'get'
   })
 }

+ 8 - 8
src/views/personnel/attendance/business/index.vue

@@ -71,7 +71,7 @@
       <el-table-column label="出差人" align="center" prop="employeeName" min-width="80" />
       <el-table-column label="部门" align="center" prop="deptName" min-width="100" />
       <el-table-column label="职位" align="center" prop="position" min-width="100" />
-      <el-table-column label="手机号" align="center" prop="employeePhone" min-width="100" />
+      <el-table-column label="手机号" align="center" prop="employeePhone" min-width="120" />
       <el-table-column label="出差地点" align="center" prop="destination" min-width="120" />
       <el-table-column label="开始日期" align="center" prop="startDate" min-width="100" />
       <el-table-column label="结束日期" align="center" prop="endDate" min-width="100" />
@@ -88,7 +88,7 @@
           <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" min-width="140">
         <template v-slot="scope">
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
             v-hasPermi="['attendance:business:update']">修改</el-button>
@@ -138,7 +138,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="24">
-            <el-form-item label="出差开始日期" prop="startDate">
+            <el-form-item label="开始日期" prop="startDate">
               <el-date-picker value-format="yyyy-MM-dd" v-model="form.startDate" type="date" placeholder="请选择日期"
                 style="width: 100%;" @change="upDay">
               </el-date-picker>
@@ -146,7 +146,7 @@
           </el-col>
 
           <el-col :span="24">
-            <el-form-item label="出差结束日期" prop="endDate">
+            <el-form-item label="结束日期" prop="endDate">
               <el-date-picker value-format="yyyy-MM-dd" v-model="form.endDate" type="date" placeholder="请选择日期"
                 style="width: 100%;" @change="upDay">
               </el-date-picker>
@@ -160,8 +160,8 @@
             </el-form-item>
           </el-col>
           <el-col :span="24">
-            <el-form-item label="预估费用(元)" prop="estimatedCost">
-              <el-input v-model="form.estimatedCost" placeholder='预估费用'
+            <el-form-item label="预估费用" prop="estimatedCost">
+              <el-input v-model="form.estimatedCost" placeholder='预估费用(元)'
                 onblur="value=value.match(/\d+\.?\d{0,2}/,'')"></el-input>
             </el-form-item>
           </el-col>
@@ -241,7 +241,7 @@
           <div class="fx-field x-grid-col-12">
             <div class="field-label">
               <span class="field-required">*</span>
-              <div class="field-name">出差开始日期</div>
+              <div class="field-name">开始日期</div>
             </div>
             <div class="field-component">
               <span :title="form.startDate">{{ form.startDate }}</span>
@@ -250,7 +250,7 @@
           <div class="fx-field x-grid-col-12">
             <div class="field-label">
               <span class="field-required">*</span>
-              <div class="field-name">出差结束日期</div>
+              <div class="field-name">结束日期</div>
             </div>
             <div class="field-component">
               <span :title="form.endDate">{{ form.endDate }}</span>

+ 19 - 13
src/views/personnel/attendance/employee/index.vue

@@ -24,8 +24,8 @@
           </el-form-item>
           <el-form-item label="班次" prop="schedulingId">
             <el-select v-model="queryParams.schedulingId" placeholder="班次" clearable style="width: 240px">
-              <el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)" :key="parseInt(dict.value)" :label="dict.label"
-                :value="parseInt(dict.value)" />
+              <el-option v-for="dict in schedulList" :key="dict.id" :label="dict.shiftName"
+                :value="dict.id" />
             </el-select>
           </el-form-item>
           <el-form-item label="手机号" prop="phoneNumber">
@@ -64,9 +64,9 @@
     <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="排班选择" prop="schedulingId">
-            <el-select v-model="form.schedulingId" placeholder="请选择排班" clearable style="width: 100%;">
-              <el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)" :key="parseInt(dict.value)" :label="dict.label"
-                :value="parseInt(dict.value)" />
+          <el-select v-model="form.schedulingId" placeholder="班" clearable style="width: 100%;">
+              <el-option v-for="dict in schedulList" :key="dict.id" :label="dict.shiftName"
+                :value="dict.id" />
             </el-select>
           </el-form-item>
       </el-form>
@@ -79,10 +79,8 @@
 </template>
 
 <script>
-import {
-  listUser,
-  updateUser
-} from "@/api/personnel/attendance/employee/index";
+import { listSimpleSchedulings } from "@/api/personnel/attendance/scheduling/index";
+import {listUser,updateUser} from "@/api/personnel/attendance/employee/index";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import { listSimpleDepts } from "@/api/system/dept";
@@ -107,6 +105,7 @@ export default {
       title: "",
       // 部门树选项
       deptOptions: undefined,
+      schedulList:[],
       // 是否显示弹出层
       open: false,
       // 部门名称
@@ -164,6 +163,11 @@ export default {
         this.deptOptions = [];
         this.deptOptions.push(...this.handleTree(response.data, "id"));
       });
+      listSimpleSchedulings().then(response => {
+        // 处理 postOptions 参数
+        this.schedulList = [];
+        this.schedulList.push(...response.data);
+      });
     },
     // 筛选节点
     filterNode(value, data) {
@@ -183,7 +187,7 @@ export default {
     // 表单重置
     reset() {
       this.form = {
-        ids: "",
+        employeeIds: "",
         schedulingId: "",
       };
       this.resetForm("form");
@@ -195,19 +199,20 @@ export default {
     },
     /** 重置按钮操作 */
     resetQuery() {
+      this.queryParams.deptId = undefined;
       this.resetForm("queryForm");
       this.handleQuery();
     },
     // 多选框选中数据
     handleSelectionChange(selection) {
       console.log(selection);
-      this.form.ids = selection.map(item => item.employeeId)
+      this.form.employeeIds = selection.map(item => item.employeeId)
+      console.log(this.form.employeeIds);
       this.single = selection.length != 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
     handleAdd() {
-      this.reset();
       this.open = true;
       this.title = "设置排班";
     },
@@ -217,7 +222,8 @@ export default {
       this.$refs["form"].validate(valid => {
         if (valid) {
           updateUser(this.form).then(response => {
-              this.$modal.msgSuccess("修改成功");
+              this.$modal.msgSuccess("设置成功");
+              this.reset();
               this.open = false;
               this.getList();
             });

+ 10 - 2
src/views/personnel/attendance/info/daily.vue

@@ -14,7 +14,7 @@
           @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item label="日期" prop="attendanceDate">
-        <el-date-picker v-model="queryParams.attendanceDate" style="width: 250px" value-format="yyyy-MM-dd HH:mm:ss"
+        <el-date-picker v-model="queryParams.attendanceDate" style="width: 250px" format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
           type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
           :default-time="['00:00:00', '23:59:59']" />
       </el-form-item>
@@ -83,7 +83,7 @@ export default {
         deptId: undefined,
         position: undefined,
         employeePhone: undefined,
-        attendanceDate: [],
+        attendanceDate: [new Date(), new Date()],
       },
     };
   },
@@ -92,6 +92,14 @@ export default {
     this.getListDept();
   },
   methods: {
+    //获取当前日期(年月日)
+    getNowDate() {
+      const date = new Date()
+      const year = date.getFullYear()
+      const month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
+      const day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
+      return year + '-' + month + '-' + day
+    },
     /** 查询部门列表 */
     getListDept() {
       listDept().then(response => {

+ 13 - 4
src/views/personnel/attendance/info/monthly.vue

@@ -14,9 +14,11 @@
           @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item label="日期" prop="attendanceDate">
-        <el-date-picker v-model="queryParams.attendanceDate" style="width: 250px" value-format="yyyy-MM-dd HH:mm:ss"
-          type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
-          :default-time="['00:00:00', '23:59:59']" />
+        <el-date-picker
+          v-model="queryParams.attendanceDate"
+          type="month"
+          placeholder="选择月份">
+        </el-date-picker>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
@@ -84,7 +86,7 @@ export default {
         deptId: undefined,
         position: undefined,
         employeePhone: undefined,
-        attendanceDate: [],
+        attendanceDate: this.getNowDate(),
       },
     };
   },
@@ -93,6 +95,13 @@ export default {
     this.getListDept();
   },
   methods: {
+     //获取当前日期(年月)
+     getNowDate() {
+      const date = new Date()
+      const year = date.getFullYear()
+      const month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
+      return year + '-' + month
+    },
     /** 查询部门列表 */
     getListDept() {
       listDept().then(response => {

+ 2 - 2
src/views/personnel/attendance/leave/index.vue

@@ -73,7 +73,7 @@
       <el-table-column label="请假人" align="center" prop="employeeName" min-width="100" />
       <el-table-column label="部门" align="center" prop="deptName" min-width="100" />
       <el-table-column label="职位" align="center" prop="position" min-width="100" />
-      <el-table-column label="手机号" align="center" prop="employeePhone" min-width="100" />
+      <el-table-column label="手机号" align="center" prop="employeePhone" min-width="120" />
       <el-table-column label="请假类型" align="center" prop="leaveType" min-width="100" />
       <el-table-column label="开始日期" align="center" prop="startDate" min-width="120" />
       <el-table-column label="结束日期" align="center" prop="endDate" min-width="120" />
@@ -89,7 +89,7 @@
           <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="140">
         <template v-slot="scope">
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
             v-hasPermi="['attendance:leave:update']">修改</el-button>

+ 49 - 14
src/views/personnel/attendance/out/index.vue

@@ -71,7 +71,7 @@
       <el-table-column label="外出人" align="center" prop="employeeName" min-width="100" />
       <el-table-column label="部门" align="center" prop="deptName" min-width="100" />
       <el-table-column label="职位" align="center" prop="position" min-width="100" />
-      <el-table-column label="手机号" align="center" prop="employeePhone" min-width="100" />
+      <el-table-column label="手机号" align="center" prop="employeePhone" min-width="120" />
       <el-table-column label="外出地点" align="center" prop="destination" min-width="150" />
       <el-table-column label="外出开始时间" align="center" prop="startDate" min-width="150" />
       <el-table-column label="外出结束时间" align="center" prop="endDate" min-width="150" />
@@ -87,7 +87,7 @@
           <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" min-width="150">
         <template v-slot="scope">
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
             v-hasPermi="['attendance:out:update']">修改</el-button>
@@ -105,61 +105,61 @@
     <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-row>
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="外出人" prop="employeeName">
               <el-input v-model="form.employeeName" placeholder='点击选择' readonly @click.native="openSingle"></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12" style="display: none;">
+          <el-col :span="24" style="display: none;">
             <el-form-item label="外出人Id" style="display: none;">
               <el-input v-model="form.employeeId" placeholder='外出人Id' disabled></el-input>
             </el-form-item>
           </el-col>
 
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="部门">
               <el-input v-model="form.deptName" placeholder='部门' disabled></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="职位">
               <el-input v-model="form.position" placeholder='职位' disabled></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="手机号">
               <el-input v-model="form.employeePhone" placeholder='手机号' disabled></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="外出地点" prop="destination">
               <el-input maxlength="20" v-model="form.destination" placeholder='外出地点'></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="外出开始时间" prop="startDate">
+          <el-col :span="24">
+            <el-form-item label="开始时间" prop="startDate">
               <el-date-picker value-format="yyyy-MM-dd HH:mm:ss" default-time="09:00:00" v-model="form.startDate"
                 type="datetime" placeholder="选择时间" style="width: 100%;" @change="upHour">
               </el-date-picker>
             </el-form-item>
           </el-col>
 
-          <el-col :span="12">
-            <el-form-item label="外出结束时间" prop="endDate">
+          <el-col :span="24">
+            <el-form-item label="结束时间" prop="endDate">
               <el-date-picker value-format="yyyy-MM-dd HH:mm:ss" default-time="18:00:00" v-model="form.endDate"
                 type="datetime" placeholder="选择时间" style="width: 100%;" @change="upHour">
               </el-date-picker>
             </el-form-item>
           </el-col>
 
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="外出时长">
               <el-input v-model="form.hour" placeholder='外出时长'
                 oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"></el-input>
             </el-form-item>
           </el-col>
 
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="外出事由" prop="reason">
               <el-input maxlength="200" rows="4" show-word-limit type="textarea" v-model="form.reason"
                 placeholder="请输入备注" />
@@ -382,6 +382,41 @@ export default {
     this.getListDept();
   },
   methods: {
+    upHour() {
+      if (this.form.startDate && this.form.endDate) {
+        let Hours = this.calLeaveDays();
+        this.form.hour = Math.ceil(Hours);
+        if (Hours < 0) {
+          this.form.startDate = "";
+          this.form.endDate = "";
+          this.form.hour = "";
+          this.$message.warning("开始时间小于结束时间,请重新选择!");
+          return;
+        } else if (Hours == 0) {
+          this.form.startDate = "";
+          this.form.endDate = "";
+          this.form.hour = "";
+          this.$message.warning("外出时间为0,请重新选择!");
+          return;
+        } 
+      }
+
+    },
+    calLeaveDays() {
+      var start_time = new Date();
+      var end_time = new Date();
+      start_time = new Date(this.form.startDate);
+      end_time = new Date(this.form.endDate );
+      console.log(start_time);
+      console.log(end_time);
+      //转成毫秒数,两个日期相减
+      var hours = end_time.getTime() - start_time.getTime();
+      //转换成小时
+      var hour = hours / (1000 * 60 * 60);
+      console.log("hour = ", hour);
+      return hour;
+    },
+
     getEmployee() {
       getEmployeeInfo(this.form.employeeId).then(response => {
         let employeeInfo = response.data;

+ 69 - 3
src/views/personnel/attendance/scheduling/index.vue

@@ -31,7 +31,7 @@
       <el-table-column label="排班名称" align="center" prop="shiftName" />
       <el-table-column label="时间安排" align="center">
         <template v-slot="scope">
-          <span>{{ parseTime(scope.row.startTime) + '~' + parseTime(scope.row.endTime) }}</span>
+          <span>{{ scope.row.startTime + '~' + scope.row.endTime }}</span>
         </template>
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@@ -267,10 +267,14 @@ export default {
     },
     /** 导出按钮操作 */
     handleExport() {
-      const queryParams = this.queryParams;
+      // 处理查询参数
+      let params = { ...this.queryParams };
+      params.pageNo = undefined;
+      params.pageSize = undefined;
+      // 执行导出
       this.$modal.confirm('是否确认导出所有据项?').then(() => {
         this.exportLoading = true;
-        return exportScheduling(queryParams);
+        return exportScheduling(params);
       }).then(response => {
         this.$download.excel(response, '排班信息.xls');
         this.exportLoading = false;
@@ -279,3 +283,65 @@ export default {
   }
 };
 </script>
+<style lang="scss" scoped>
+.widget-wrapper>.widget-list {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.x-grid-col-6 {
+  width: 50%;
+}
+
+.x-grid-col-12 {
+  width: 100%;
+}
+
+.fx-field {
+  line-height: 20px;
+  padding: 7px 12px 12px;
+  position: relative;
+}
+
+.fx-field .field-label {
+  word-wrap: break-word;
+  color: #141e31;
+  display: flex;
+  font-weight: 600;
+  line-height: 20px;
+  padding: 5px 0;
+  position: relative;
+  word-break: break-word;
+}
+
+.fx-field .field-label .field-required {
+  color: #eb5050;
+  margin-left: -6px;
+  position: relative;
+}
+
+.fx-field .field-label .field-name {
+  overflow: hidden;
+}
+
+.field-component {
+  word-wrap: break-word;
+  background: #f5f6f8;
+  border-radius: 2px;
+  color: #141e31;
+  font-size: 14px;
+  line-height: 20px;
+  min-height: 32px;
+  padding: 6px 8px;
+  white-space: pre-wrap;
+  word-break: break-word;
+}
+
+ul {
+  padding-left: 0px !important;
+}
+
+.el-tag+.el-tag {
+  margin-left: 10px;
+}
+</style>