소스 검색

Merge branch 'master' of http://47.92.161.104:10080/shuzhan/shinestar-portal

yanliming 4 년 전
부모
커밋
90bf28f2b8
4개의 변경된 파일837개의 추가작업 그리고 239개의 파일을 삭제
  1. 9 1
      src/api/base/workPersonScheduling.js
  2. 4 1
      src/api/base/workShiftInfo.js
  3. 689 0
      src/views/base/workPersonScheduling-change.vue
  4. 135 237
      src/views/base/workPersonScheduling-list.vue

+ 9 - 1
src/api/base/workPersonScheduling.js

@@ -41,6 +41,14 @@ function batchRemove(idList){
   });
 }
 
+function findScheduling(formData){
+  return request.post(constant.serverUrl + "/base/workPersonScheduling/findScheduling", formData);
+}
+
+function changeScheduling(formData){
+  return request.post(constant.serverUrl + "/base/workPersonScheduling/changeScheduling", formData);
+}
+
 export default {
-  pageList,create,edit,add,update,remove,batchRemove
+  pageList,create,edit,add,update,remove,batchRemove,findScheduling,changeScheduling
 }

+ 4 - 1
src/api/base/workShiftInfo.js

@@ -41,7 +41,10 @@ function batchRemove(idList) {
   });
 }
 
+function shiftList(formData) {
+  return request.post(constant.serverUrl + "/base/workShiftInfo/shiftList", formData);
+}
 
 export default {
-  create, edit, add, update, remove, batchRemove, pageList
+  create, edit, add, update, remove, batchRemove, pageList,shiftList
 }

+ 689 - 0
src/views/base/workPersonScheduling-change.vue

@@ -0,0 +1,689 @@
+
+<template>
+  <el-dialog
+    :visible.sync="showDialog"
+    :title="title"
+    :modal-append-to-body="false"
+    width="700px"
+    style="text-align: left"
+    @close="closeDialog"
+    :close-on-click-modal="false"
+    v-loading="loading"
+  >
+    <div>
+      <el-form
+        ref="queryForm"
+        :model="queryModel"
+        inline
+        :rules="ruleValidate"
+        class="demo-form-inline"
+      >
+        <el-row>
+          <el-col>
+            <el-form-item label="排班日期" prop="timeRanges">
+              <el-date-picker
+                v-model="queryModel.timeRanges"
+                type="daterange"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+                value-format="yyyy-MM-dd"
+                :default-time="timeRangesDefaultTime"
+                size="mini"
+              ></el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="部门" prop="companyId">
+              <el-select-tree
+                size="mini"
+                :props="props"
+                :options="companyResult"
+                v-model="queryModel.companyId"
+                height="200"
+              ></el-select-tree>
+            </el-form-item>
+            <el-form-item label="员工" prop="personId">
+              <el-select
+                filterable
+                v-model="queryModel.personId"
+                clearable
+                size="mini"
+                style="width: 200px"
+              >
+                <el-option
+                  v-for="person in personInfoData"
+                  :key="person.id"
+                  :value="person.id"
+                  :label="person.name"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item>
+              <el-button
+                type="primary"
+                size="mini"
+                icon="ios-search"
+                @click="handleQuery('queryForm')"
+                :loading="loading"
+                >查询</el-button
+              >
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div class="von-cho">
+        <div class="von-left">
+          <div class="von-tit">可选班次</div>
+          <ul>
+            <li v-for="shift in shiftData" :key="shift.id">
+              <a
+                href="#"
+                @click="selectShift(shift)"
+                v-if="selectId == shift.id"
+                class="active"
+                >{{ shift.number }} - {{ shift.name }}</a
+              >
+              <a href="#" @click="selectShift(shift)" v-else
+                >{{ shift.number }} - {{ shift.name }}</a
+              >
+            </li>
+          </ul>
+        </div>
+        <div class="von-center">
+          <el-button round size="mini" @click="moveUp">选择</el-button>
+          <div style="height: 10px"></div>
+          <el-button round size="mini" @click="moveDown">移除</el-button>
+        </div>
+        <div class="von-right">
+          <div class="von-right-top">
+            <div class="von-tit">排班规律表</div>
+            <ul>
+              <li>
+                <a href="#" v-if="showTagNum == 1" class="active" @click="changeTag('1')">一</a>
+                <a href="#" v-else @click="changeTag('1')">一</a>
+                <p>{{ number1 }}</p>
+              </li>
+              <li>
+                <a href="#" v-if="showTagNum == 2" class="active" @click="changeTag('2')">二</a>
+                <a href="#" v-else @click="changeTag('2')">二</a>
+                <p>{{ number2 }}</p>
+              </li>
+              <li>
+                <a href="#" v-if="showTagNum == 3" class="active" @click="changeTag('3')">三</a>
+                <a href="#" v-else @click="changeTag('3')">三</a>
+                <p>{{ number3 }}</p>
+              </li>
+              <li>
+                <a href="#" v-if="showTagNum == 4" class="active" @click="changeTag('4')">四</a>
+                <a href="#" v-else @click="changeTag('4')">四</a>
+                <p>{{ number4 }}</p>
+              </li>
+              <li>
+                <a href="#" v-if="showTagNum == 5" class="active" @click="changeTag('5')">五</a>
+                <a href="#" v-else @click="changeTag('5')">五</a>
+                <p>{{ number5 }}</p>
+              </li>
+              <li>
+                <a href="#" v-if="showTagNum == 6" class="active" @click="changeTag('6')">六</a>
+                <a href="#" v-else @click="changeTag('6')">六</a>
+                <p>{{ number6 }}</p>
+              </li>
+              <li>
+                <a href="#" v-if="showTagNum == 7" class="active" @click="changeTag('7')">七</a>
+                <a href="#" v-else @click="changeTag('7')">七</a>
+                <p>{{ number7 }}</p>
+              </li>
+            </ul>
+          </div>
+          <div class="von-right-bot">
+            <el-tag
+              v-if="leftClickType && rightClickType"
+              closable
+              @close="closeTag()"
+              >{{ showName }}</el-tag
+            >
+          </div>
+        </div>
+      </div>
+      <!-- <div class="flex-row">
+        <el-row>
+          <el-col :span="9">
+            <el-table
+              :data="shiftData"
+              height="300px"
+              style="width: 300px"
+              highlight-current-row
+              @current-change="handleCurrentChange"
+            >
+              <el-table-column prop="name" label="可选班次" width="190">
+                <template slot-scope="{ row }">
+                  <span>{{ row.number }} - {{ row.name }}</span>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-col>
+          <el-col :span="6">
+            <div class="flex-col">
+              <div>
+                <el-button round size="mini" @click="moveUp">选择</el-button>
+                <div style="height: 10px"></div>
+                <el-button round size="mini" @click="moveDown">移除</el-button>
+              </div>
+            </div>
+          </el-col>
+          <el-col :span="9">
+            <div>
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                @click="changeTag('1')"
+                >一</el-tag
+              >
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                type="success"
+                @click="changeTag('2')"
+                >二</el-tag
+              >
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                type="info"
+                @click="changeTag('3')"
+                >三</el-tag
+              >
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                type="warning"
+                @click="changeTag('4')"
+                >四</el-tag
+              >
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                type="danger"
+                @click="changeTag('5')"
+                >五</el-tag
+              >
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                type="success"
+                @click="changeTag('6')"
+                >六</el-tag
+              >
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                type="info"
+                @click="changeTag('7')"
+                >七</el-tag
+              >
+            </div>
+            <div>
+              <el-tag size="mini" align="middle" style="width: 25px">
+                {{ number1 }}
+              </el-tag>
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                type="success"
+                >{{ number2 }}</el-tag
+              >
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                type="info"
+                >{{ number3 }}</el-tag
+              >
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                type="warning"
+                >{{ number4 }}</el-tag
+              >
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                type="danger"
+                >{{ number5 }}</el-tag
+              >
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                type="success"
+                >{{ number6 }}</el-tag
+              >
+              <el-tag
+                size="mini"
+                align="middle"
+                style="width: 25px"
+                type="info"
+                >{{ number7 }}</el-tag
+              >
+            </div>
+            <div>
+              <el-tag
+                v-if="leftClickType && rightClickType"
+                closable
+                @close="closeTag()"
+                >{{ showName }}</el-tag
+              >
+            </div>
+          </el-col>
+        </el-row>
+      </div> -->
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="closeDialog">取 消</el-button>
+      <el-button type="primary" @click="handleSubmit" :loading="submitting"
+        >确 定</el-button
+      >
+    </span>
+  </el-dialog>
+</template>
+<script>
+import Constant from "@/constant";
+import workPersonSchedulingApi from "@/api/base/workPersonScheduling";
+import workShiftInfoApi from "@/api/base/workShiftInfo";
+import companyInfoApi from "@/api/base/companyInfo";
+import personRoleApi from "@/api/base/personRoleInfo";
+import personInfoApi from "@/api/base/personInfo";
+import SelectTree from "@/components/SelectTree";
+
+export default {
+  props: ["businessKey", "title"],
+  data() {
+    return {
+      queryModel: {
+        companyId: "",
+        timeRanges: "",
+        personId: "",
+      },
+      formModel: {},
+      ruleValidate: {
+        timeRanges: [
+          { required: true, message: "请选择日期", trigger: "blur" },
+        ],
+        companyId: [
+          { required: true, message: "请选择排班部门", trigger: "blur" },
+        ],
+      },
+      showDialog: true,
+      loading: false,
+      submitting: false,
+      companyResult: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children",
+      },
+      timeRangesDefaultTime: [],
+      menuList: [],
+      relatedMenus: [],
+      rightCheckedItems: [],
+      tableData: [],
+      shiftData: [],
+      uploadTags: [],
+      schedulingIds: [],
+      showName: "",
+      showId: "",
+      showNumber: "",
+      showTagNum: "",
+      currentRow: "",
+      leftClickType: false,
+      rightClickType: false,
+      number1: "0",
+      number2: "0",
+      number3: "0",
+      number4: "0",
+      number5: "0",
+      number6: "0",
+      number7: "0",
+      personInfoData: [],
+      selectId: "",
+    };
+  },
+  created() {
+    var self = this;
+
+    companyInfoApi.treeList().then(function (response) {
+      var jsonData = response.data;
+      if (jsonData.result) {
+        if (jsonData.data != null && jsonData.data != "") {
+          self.companyResult = jsonData.data;
+          self.tableData = jsonData.data;
+        }
+      }
+    });
+  },
+  watch: {
+    "queryModel.companyId": function (val, oldval) {
+      if (val != null && val != "") {
+        var self = this;
+        var formData = new FormData();
+        formData.append("companyId", val);
+        personInfoApi.findByCompanyId(formData).then(function (response) {
+          var jsonData = response.data;
+          if (jsonData.result) {
+            if (jsonData.data != null && jsonData.data != "") {
+              self.personInfoData = jsonData.data;
+            }
+          }
+        });
+      }
+    },
+  },
+  methods: {
+    closeDialog() {
+      this.$emit("close", false);
+    },
+    handleSubmit() {
+      var self = this;
+
+      this.$refs["queryForm"].validate((valid) => {
+        if (valid) {
+          var self = this;
+          self.loading = true;
+          var startDate = "";
+          var endDate = "";
+          var timeRanges = self.queryModel.timeRanges + "";
+
+          if (timeRanges != "" && timeRanges != null) {
+            timeRanges = timeRanges.split(",");
+            startDate = timeRanges[0];
+            endDate = timeRanges[1];
+          }
+          var formData = new FormData();
+          formData.append("startDate", startDate);
+          formData.append("endDate", endDate);
+          formData.append("schedulingIds", self.schedulingIds);
+          formData.append("companyId", self.queryModel.companyId);
+          formData.append("personId", self.queryModel.personId);
+          //formData.append("companyId", "ee25ae8d-d102-4fcd-8d58-71e40f413337");
+
+          workPersonSchedulingApi
+            .changeScheduling(formData)
+            .then(function (response) {
+              var jsonData = response.data;
+              self.loading = false;
+              if (jsonData.result) {
+                self.$message({
+                  message: "保存成功!",
+                  type: "success",
+                });
+
+                self.$emit("close", true);
+              } else {
+                self.$message({
+                  message: jsonData.message + "",
+                  type: "warning",
+                });
+
+                self.$emit("close", false);
+              }
+            });
+        }
+      });
+    },
+    handleQuery() {
+      var self = this;
+
+      this.$refs["queryForm"].validate((valid) => {
+        if (valid) {
+          self.queryShiftInfo();
+        }
+      });
+    },
+    queryShiftInfo() {
+      var self = this;
+      var formData = new FormData();
+      //formData.append("companyId", self.queryModel.companyId);
+      formData.append("companyId", "ee25ae8d-d102-4fcd-8d58-71e40f413337");
+
+      workShiftInfoApi.shiftList(formData).then(function (response) {
+        var jsonData = response.data;
+        if (jsonData.result) {
+          if (jsonData.data != null && jsonData.data != "") {
+            self.shiftData = jsonData.data;
+          }
+        }
+      });
+    },
+    changeTag(tagNum) {
+      var self = this;
+      this.showTagNum = tagNum;
+      if (self.uploadTags[tagNum] != null) {
+        this.showName = self.uploadTags[tagNum];
+        self.rightClickType = true;
+      } else {
+        self.rightClickType = false;
+        self.leftClickType = true;
+      }
+    },
+    handleCurrentChange(val) {
+      this.currentRow = val;
+    },
+    moveUp() {
+      if (this.currentRow != "" && this.currentRow != null) {
+        if (this.showTagNum != "" && this.showTagNum != null) {
+          this.showId = this.currentRow.id;
+          this.showName = this.currentRow.name;
+          this.showNumber = this.currentRow.number;
+          this.leftClickType = true;
+          this.rightClickType = true;
+          this.uploadTags[this.showTagNum] = this.showName;
+          this.schedulingIds[this.showTagNum] = this.showId;
+          var numberName = "number" + this.showTagNum;
+          this[numberName] = this.showNumber;
+          this.selectId = this.currentRow.id;
+        }
+      }
+    },
+    moveDown() {
+      if (this.showTagNum != "" && this.showTagNum != null) {
+        this.uploadTags[this.showTagNum] = null;
+        this.schedulingIds[this.showTagNum] = null;
+        this.rightClickType = false;
+        var numberName = "number" + this.showTagNum;
+        this[numberName] = "0";
+        this.selectId = "";
+      }
+    },
+    closeTag() {
+      if (this.showTagNum != "" && this.showTagNum != null) {
+        this.uploadTags[this.showTagNum] = null;
+        this.schedulingIds[this.showTagNum] = null;
+        this.rightClickType = false;
+        var numberName = "number" + this.showTagNum;
+        this[numberName] = "0";
+        this.selectId = "";
+      }
+    },
+    selectShift(shift) {
+      this.currentRow = shift;
+      this.selectId = shift.id;
+    },
+  },
+  mounted() {
+    //this.queryRelatedMenuList();
+  },
+  components: {
+    "el-select-tree": SelectTree,
+  },
+};
+</script>
+
+<style scoped>
+.user-panel {
+  margin: 10px auto;
+}
+</style>
+<style lang="scss">
+.flex-row {
+  display: flex;
+  flex-direction: row;
+}
+
+.flex-col {
+  display: flex;
+  flex-direction: col;
+  justify-content: center; /* 水平居中 */
+  align-items: center; /* 垂直居中 */
+}
+</style>
+<style>
+* {
+  margin: 0;
+  padding: 0;
+}
+li {
+  list-style: none;
+}
+a {
+  text-decoration: none;
+  color: #101010;
+}
+body {
+  font-size: 14px;
+  color: #101010;
+  font-family: Gotham, "Helvetica Neue", Helvetica, Arial, "sans-serif";
+}
+.von-cho {
+  display: flex;
+  align-items: center;
+  height: 332px;
+  justify-content: space-between;
+}
+.von-left,
+.von-right {
+  height: 100%;
+  width: 40%;
+}
+.von-left,
+.von-right-top,
+.von-right-bot {
+  border: 1px solid #eaedf4;
+  border-radius: 5px;
+  overflow: hidden;
+}
+.von-right-bot {
+  padding: 11px 15px;
+}
+.von-tit {
+  background: #f3f6f9;
+  padding: 11px 15px;
+  font-size: 16px;
+}
+.von-left ul {
+  overflow-y: scroll;
+  height: 100%;
+  padding: 10px 0;
+}
+.von-left li,
+.von-center {
+  display: flex;
+  flex-flow: column;
+}
+.von-left li a {
+  padding: 5px 15px;
+  display: block;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+.von-left li .active {
+  background: #f3f6f9;
+  color: #3894ff;
+}
+.von-center button {
+  padding: 5px 15px;
+  margin: 5px 10px;
+  border-radius: 5px;
+  box-shadow: initial;
+}
+.von-right {
+  display: flex;
+  flex-flow: column;
+  justify-content: space-between;
+}
+.von-right-top {
+  margin-bottom: 10px;
+}
+.von-right-top ul {
+  display: flex;
+  justify-content: space-between;
+  padding: 10px;
+}
+.von-right-top ul li {
+  color: #888;
+  font-size: 12px;
+  display: flex;
+  flex-flow: column;
+  align-items: center;
+  margin-bottom: 10px;
+}
+.von-right-top ul li a {
+  display: block;
+  margin-bottom: 5px;
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+  text-align: center;
+}
+.von-right-top ul li .active {
+  border-radius: 50%;
+  background: rgba(22, 119, 255, 0.25);
+}
+.von-right-top ul li p {
+  width: 16px;
+  height: 16px;
+  line-height: 16px;
+  border-radius: 50%;
+  background: #1677ff;
+  color: white;
+  text-align: center;
+  font-size: 80%;
+}
+/* .von-right-top ul li:last-child p {
+  background: #33bb00;
+} */
+.von-right-bot {
+  flex: 1;
+}
+.von-right-bot ul {
+  padding: 5px;
+  display: flex;
+  flex-wrap: wrap;
+}
+.von-right-bot ul li {
+  background: #d0deff;
+  border: 1px solid #7ca5df;
+  padding: 3px 5px;
+  margin: 5px;
+  border-radius: 3px;
+}
+.von-right-bot ul li a {
+  margin-left: 5px;
+  color: #5682bf;
+}
+</style>

+ 135 - 237
src/views/base/workPersonScheduling-list.vue

@@ -6,7 +6,7 @@
         <a href="#">系统管理</a>
       </el-breadcrumb-item>
       <el-breadcrumb-item>
-        <a href="/workPersonScheduling">workPersonScheduling管理</a>
+        <a href="/workPersonScheduling">人员排班管理</a>
       </el-breadcrumb-item>
     </el-breadcrumb>
     <el-divider></el-divider>
@@ -16,90 +16,46 @@
     <el-form
       ref="queryForm"
       :model="queryModel"
+      :rules="ruleValidate"
       inline
       class="demo-form-inline"
     >
-      <el-form-item label="编号" prop="id">
-        <el-input type="text" size="mini" v-model="queryModel.id"></el-input>
-      </el-form-item>
-      <el-form-item label="人员id" prop="personId">
-        <el-input
-          type="text"
+      <el-form-item label="安排日期" prop="queryMonth">
+        <el-date-picker
+          v-model="queryModel.queryMonth"
           size="mini"
-          v-model="queryModel.personId"
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="年" prop="year">
-        <el-input type="text" size="mini" v-model="queryModel.year"></el-input>
-      </el-form-item>
-      <el-form-item label="月" prop="month">
-        <el-input type="text" size="mini" v-model="queryModel.month"></el-input>
-      </el-form-item>
-      <el-form-item label="日" prop="day">
-        <el-input type="text" size="mini" v-model="queryModel.day"></el-input>
-      </el-form-item>
-      <el-form-item label="安排日期" prop="schedulingDay">
-        <el-input
-          type="text"
-          size="mini"
-          v-model="queryModel.schedulingDay"
-        ></el-input>
+          type="month"
+          value-format="yyyy-MM"
+          placeholder="选择月"
+        >
+        </el-date-picker>
       </el-form-item>
-      <el-form-item label="班次ID,多逗号分隔" prop="shiftIds">
-        <el-input
-          type="text"
-          size="mini"
-          v-model="queryModel.shiftIds"
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="班次编号,多逗号分隔" prop="shiftNumbers">
-        <el-input
-          type="text"
-          size="mini"
-          v-model="queryModel.shiftNumbers"
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="创建人" prop="createBy">
-        <el-input
-          type="text"
+      <el-form-item label="部门" prop="companyId">
+        <el-select-tree
           size="mini"
-          v-model="queryModel.createBy"
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="创建时间" prop="createTime">
-        <el-input
-          type="text"
-          size="mini"
-          v-model="queryModel.createTime"
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="更新人" prop="updateBy">
-        <el-input
-          type="text"
-          size="mini"
-          v-model="queryModel.updateBy"
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="更新时间" prop="updateTime">
-        <el-input
-          type="text"
-          size="mini"
-          v-model="queryModel.updateTime"
-        ></el-input>
+          :props="props"
+          :options="companyResult"
+          v-model="queryModel.companyId"
+          height="200"
+        ></el-select-tree
+        >&nbsp;
+        <el-checkbox v-model="queryModel.subordinate"
+          >是否包含下级单位</el-checkbox
+        >
       </el-form-item>
-      <el-form-item label="是否删除" prop="delFlag">
+      <!-- <el-form-item label="人员id" prop="personId">
         <el-input
           type="text"
           size="mini"
-          v-model="queryModel.delFlag"
+          v-model="queryModel.personId"
         ></el-input>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item>
         <el-button
           type="primary"
           size="mini"
           icon="ios-search"
-          @click="changePage(1)"
+          @click="handleQuery('queryForm')"
           :loading="loading"
           >查询</el-button
         >&nbsp;
@@ -119,130 +75,98 @@
         size="small"
         plain
         icon="el-icon-circle-plus"
-        @click="handleAdd"
-        >新增</el-button
-      >
-      <el-button
-        type="primary"
-        size="small"
-        plain
-        icon="el-icon-circle-plus"
-        :disabled="multipleSelection.length == 0"
-        @click="handleBatchDelete"
-        >删除选中项</el-button
+        @click="handleChange"
+        >自动排班</el-button
       >
     </el-row>
     <el-table
       :data="tableData"
-      style="min-height: 400px"
       v-loading="loading"
+      :height="tableHeight"
       stripe
       @sort-change="sortChange"
       @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" width="55"></el-table-column>
-      <el-table-column prop="id" label="编号" width="180"></el-table-column>
-      <el-table-column
-        prop="personId"
-        label="人员id"
-        width="180"
-      ></el-table-column>
-      <el-table-column prop="year" label="年" width="180"></el-table-column>
-      <el-table-column prop="month" label="月" width="180"></el-table-column>
-      <el-table-column prop="day" label="日" width="180"></el-table-column>
-      <el-table-column
-        prop="schedulingDay"
-        label="安排日期"
-        width="180"
-      ></el-table-column>
-      <el-table-column
-        prop="shiftIds"
-        label="班次ID,多逗号分隔"
-        width="180"
-      ></el-table-column>
-      <el-table-column
-        prop="shiftNumbers"
-        label="班次编号,多逗号分隔"
-        width="180"
-      ></el-table-column>
       <el-table-column
-        prop="createBy"
-        label="创建人"
-        width="180"
+        type="index"
+        label="序号"
+        :index="indexMethod"
+        width="50"
       ></el-table-column>
       <el-table-column
-        prop="createTime"
-        label="创建时间"
-        width="180"
+        prop="companyName"
+        label="部门"
+        width="90"
       ></el-table-column>
       <el-table-column
-        prop="updateBy"
-        label="更新人"
-        width="180"
+        prop="id"
+        label="编号"
+        width="90"
       ></el-table-column>
       <el-table-column
-        prop="updateTime"
-        label="更新时间"
-        width="180"
+        prop="name"
+        label="名称"
+        width="150"
       ></el-table-column>
-      <el-table-column
-        prop="delFlag"
-        label="是否删除"
-        width="180"
-      ></el-table-column>
-      <el-table-column label="操作">
-        <template slot-scope="{ row }">
-          <el-button size="mini" type="warning" @click="handleEdit(row)"
-            >编辑</el-button
-          >
-          <el-button size="mini" type="danger" @click="handleDelete(row)"
-            >删除</el-button
-          >
-        </template>
-      </el-table-column>
+      <template v-for="col in dayList">
+        <el-table-column
+          :label="col.day+''"
+          :prop="col.id+''"
+          :key="col.id+''"
+          width="80px"
+        >
+          <template slot-scope="{ row }">
+            <div style="display: flex; flex-direction: column">
+              <template v-for="(item, index) in row.personNumberMap[col.id]">
+                <div v-html="showItem(item)" :key="index+''"></div>
+              </template>
+            </div>
+          </template>
+        </el-table-column>
+      </template>
     </el-table>
-    <el-pagination
-      :current-page.sync="pageIndex"
-      :total="totalElements"
-      :page-sizes="pageSizeList"
-      @current-change="changePage"
-      @size-change="pageSizeChange"
-      layout="total, sizes, prev, pager, next, jumper"
-    ></el-pagination>
     <workPersonScheduling-detail
       v-if="showModal"
       :businessKey="businessKey"
       :title="modalTitle"
       @close="onDetailModalClose"
     ></workPersonScheduling-detail>
+    <workPersonScheduling-change
+      v-if="showChangeModal"
+      :businessKey="businessKey"
+      :title="modalTitle"
+      @close="onDetailModalClose"
+    ></workPersonScheduling-change>
   </div>
 </template>
 <script>
 import Constant from "@/constant";
 import WorkPersonSchedulingDetail from "./workPersonScheduling-detail";
+import WorkPersonSchedulingChange from "./workPersonScheduling-change";
 import workPersonSchedulingApi from "@/api/base/workPersonScheduling";
+import companyInfoApi from "@/api/base/companyInfo";
+import SelectTree from "@/components/SelectTree";
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
 
 export default {
+  name: "BaseWorkPersonSchedulingList",
   data() {
     var self = this;
 
     return {
+      ruleValidate: {
+        companyId: [{ required: true, message: "不能为空", trigger: "blur" }],
+        queryMonth: [
+          { required: true, message: "请选择", trigger: "blur" }
+        ]
+      },
       queryModel: {
-        id: "",
-        personId: "",
-        year: "",
-        month: "",
-        day: "",
-        schedulingDay: "",
-        shiftIds: "",
-        shiftNumbers: "",
-        createBy: "",
-        createTime: "",
-        updateBy: "",
-        updateTime: "",
-        delFlag: "",
+        personName: "",
+        queryMonth: "",
+        companyId: "",
+        subordinate: false,
       },
       loading: false,
       tableData: [],
@@ -257,9 +181,47 @@ export default {
       showModal: false,
       modalTitle: "",
       businessKey: "",
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children",
+      },
+      companyResult:[],
+      dayList:[],
+      tableHeight: 300,
+      showChangeModal:false,
     };
   },
+  created() {
+    var self = this;
+
+    companyInfoApi.treeList().then(function (response) {
+      var jsonData = response.data;
+      if (jsonData.result) {
+        if (jsonData.data != null && jsonData.data != "") {
+          self.companyResult = jsonData.data;
+        }
+      }
+    });
+  },
   methods: {
+    handleQuery() {
+      var self = this;
+
+      this.$refs["queryForm"].validate(valid => {
+        if (valid) {
+          self.changePage(1);
+        }
+      });
+    },
+    showItem(item) {
+      return item;
+    },
+    indexMethod(index) {
+      return (this.pageIndex - 1) * this.pageSize + (index + 1);
+    },
     changePage(pageIndex) {
       var self = this;
 
@@ -268,22 +230,10 @@ export default {
       self.pageIndex = pageIndex;
       var formData = new FormData();
 
-      formData.append("pageIndex", self.pageIndex);
-      formData.append("pageSize", self.pageSize);
-
-      formData.append("id", self.queryModel.id);
-      formData.append("personId", self.queryModel.personId);
-      formData.append("year", self.queryModel.year);
-      formData.append("month", self.queryModel.month);
-      formData.append("day", self.queryModel.day);
-      formData.append("schedulingDay", self.queryModel.schedulingDay);
-      formData.append("shiftIds", self.queryModel.shiftIds);
-      formData.append("shiftNumbers", self.queryModel.shiftNumbers);
-      formData.append("createBy", self.queryModel.createBy);
-      formData.append("createTime", self.queryModel.createTime);
-      formData.append("updateBy", self.queryModel.updateBy);
-      formData.append("updateTime", self.queryModel.updateTime);
-      formData.append("delFlag", self.queryModel.delFlag);
+      formData.append("personName", self.queryModel.personName);
+      formData.append("queryMonth", self.queryModel.queryMonth);
+      formData.append("companyId", self.queryModel.companyId);
+      formData.append("subordinate", self.queryModel.subordinate);
 
       if (this.field != null) {
         formData.append("field", this.field);
@@ -294,15 +244,17 @@ export default {
       }
 
       workPersonSchedulingApi
-        .pageList(formData)
+        .findScheduling(formData)
         .then(function (response) {
           self.loading = false;
 
-          var jsonData = response.data.data;
-
-          self.tableData = jsonData.data;
-          self.totalPages = jsonData.totalPages;
-          self.totalElements = jsonData.recordsTotal;
+          var jsonData = response.data;
+          self.tableData = jsonData.personList;
+          self.dayList = jsonData.dayList;
+          //45为分页栏的高度
+          //页面高度-列表上面的高度-分页栏高度
+          self.tableHeight =
+            window.innerHeight - self.$refs.formTable.$el.offsetTop - 100;
         })
         .catch((error) => {
           self.loading = false;
@@ -328,82 +280,28 @@ export default {
     handleReset(name) {
       this.$refs[name].resetFields();
     },
-    handleAdd() {
-      this.modalTitle = "新增";
+    handleChange() {
+      this.modalTitle = "自动排班";
       this.businessKey = "";
-      this.showModal = true;
-    },
-    handleEdit(record) {
-      this.modalTitle = "编辑";
-      this.businessKey = record.id;
-      this.showModal = true;
-    },
-    handleDelete(record) {
-      var self = this;
-
-      self
-        .$confirm("是否确认删除?", "提示", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning",
-        })
-        .then(() => {
-          workPersonSchedulingApi.remove(record.id).then(function (response) {
-            var jsonData = response.data;
-
-            if (jsonData.result) {
-              // var index = self.tableData.indexOf(record);
-              // self.tableData.splice(index, 1);
-              self.changePage(self.pageIndex);
-
-              self.$message({
-                type: "success",
-                message: "删除成功!",
-              });
-            }
-          });
-        });
-    },
-    handleBatchDelete() {
-      var self = this;
-
-      var idList = this.multipleSelection.map((record) => {
-        return record.id;
-      });
-
-      this.$confirm("是否确认删除选中项?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      }).then(() => {
-        workPersonSchedulingApi.batchRemove(idList).then(function (response) {
-          var jsonData = response.data;
-
-          if (jsonData.result) {
-            self.changePage(self.pageIndex);
-
-            self.$message({
-              type: "success",
-              message: "删除成功!",
-            });
-          }
-        });
-      });
+      this.showChangeModal = true;
     },
     onDetailModalClose(refreshed) {
       //保存成功后回调
       this.showModal = false;
+      this.showChangeModal = false;
 
       if (refreshed) {
-        this.changePage(this.pageIndex);
+        this.handleQuery();
       }
     },
   },
   mounted: function () {
-    this.changePage(1);
+    //this.changePage(1);
   },
   components: {
     "workPersonScheduling-detail": WorkPersonSchedulingDetail,
+    "workPersonScheduling-change": WorkPersonSchedulingChange,
+    "el-select-tree": SelectTree,
   },
 };
 </script>