123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741 |
- <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
- multiple
- 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-for="tag in showWorkTags"
- :key="tag.number"
- :value="tag.id"
- closable
- @close="closeTag(tag)"
- >{{ tag.name }}</el-tag
- >
- </div>
- </div>
- </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: "无",
- number2: "无",
- number3: "无",
- number4: "无",
- number5: "无",
- number6: "无",
- number7: "无",
- personInfoData: [],
- selectId: "",
- showWorkTags: [],
- showWorkTag1: [],
- showWorkTag2: [],
- showWorkTag3: [],
- showWorkTag4: [],
- showWorkTag5: [],
- showWorkTag6: [],
- showWorkTag7: [],
- numberArray1: [],
- numberArray2: [],
- numberArray3: [],
- numberArray4: [],
- numberArray5: [],
- numberArray6: [],
- numberArray7: [],
- };
- },
- 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");
- var numberArray1 = [];
- var numberArray2 = [];
- var numberArray3 = [];
- var numberArray4 = [];
- var numberArray5 = [];
- var numberArray6 = [];
- var numberArray7 = [];
- for (var i = 1; i < 8; i++) {
- self["showWorkTag" + i].forEach((item, index) => {
- self["numberArray" + i].push(item.id);
- });
- var num = self["numberArray" + i].join(";");
- if (num != null && num != "") {
- self.schedulingIds.push(num);
- }
- }
- // self.showWorkTag1.forEach((item, index) => {
- // numberArray1.push(item.id);
- // });
- // var numberArray2 = [];
- // self.showWorkTag2.forEach((item, index) => {
- // numberArray2.push(item.id);
- // });
- // var numberArray3 = [];
- // self.showWorkTag3.forEach((item, index) => {
- // numberArray3.push(item.id);
- // });
- // var numberArray4 = [];
- // self.showWorkTag4.forEach((item, index) => {
- // numberArray4.push(item.id);
- // });
- // var numberArray5 = [];
- // self.showWorkTag5.forEach((item, index) => {
- // numberArray5.push(item.id);
- // });
- // var numberArray6 = [];
- // self.showWorkTag6.forEach((item, index) => {
- // numberArray6.push(item.id);
- // });
- // var numberArray7 = [];
- // self.showWorkTag7.forEach((item, index) => {
- // numberArray7.push(item.id);
- // });
- // var num1 = numberArray1.join(";");
- // var num2 = numberArray1.join(";");
- // self.schedulingIds.push(num1);
- // self.schedulingIds.push(num1);
- // self.schedulingIds["3"] = numberArray3;
- // self.schedulingIds["4"] = numberArray4;
- // self.schedulingIds["5"] = numberArray5;
- // self.schedulingIds["6"] = numberArray6;
- // self.schedulingIds["7"] = numberArray7;
- formData.append("schedulingIds", self.schedulingIds);
- 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;
- self.showTagNum = tagNum;
- var tagsName = "showWorkTag" + self.showTagNum;
- self.showWorkTags = this[tagsName];
- // 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() {
- var self = this;
- if (this.currentRow != "" && self.currentRow != null) {
- var flag = true;
- if (this.showWorkTags != null) {
- this.showWorkTags.forEach((item, index) => {
- if (item.id == self.currentRow.id) {
- flag = false;
- }
- });
- }
- if (flag) {
- var tag = {
- id: self.currentRow.id,
- number: self.currentRow.number,
- name: self.currentRow.name,
- };
- var tagsName = "showWorkTag" + self.showTagNum;
- self.showWorkTags.push(tag);
- self[tagsName] = self.showWorkTags;
- var numberName = "number" + self.showTagNum;
- // var nums = [];
- // self.showWorkTags.forEach((item, index) => {
- // nums.push(item.number);
- // });
- //var num = nums.join(",");
- self[numberName] = "√";
- //self.showId = self.currentRow.id + ",";
- //self.schedulingIds[self.showTagNum] = self.showWorkTags;
- }
- // if (this.showTagNum != "" && self.showTagNum != null) {
- // self.showId = self.currentRow.id;
- // self.showName = self.currentRow.name;
- // self.showNumber = self.currentRow.number;
- // self.leftClickType = true;
- // self.rightClickType = true;
- // self.uploadTags[this.showTagNum] = self.showName;
- // self.schedulingIds[this.showTagNum] = self.showId;
- // var numberName = "number" + self.showTagNum;
- // self[numberName] = self.showNumber;
- // self.selectId = self.currentRow.id;
- // var tag = {
- // id: self.currentRow.id,
- // number: self.currentRow.number,
- // name: self.currentRow.name,
- // };
- // self.showWorkTags.push(tag);
- // }
- }
- },
- moveDown() {
- var self = this;
- // 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 = "";
- // var tag = {
- // id: self.currentRow.id,
- // number: self.currentRow.number,
- // name: self.currentRow.name,
- // };
- // self.showWorkTags.splice(tag, 1);
- // }
- if (this.currentRow != "" && self.currentRow != null) {
- if (self.showWorkTags != null) {
- var tag = {
- id: self.currentRow.id,
- number: self.currentRow.number,
- name: self.currentRow.name,
- };
- this.showWorkTags.splice(this.showWorkTags.indexOf(tag), 1);
- var tagsName = "showWorkTag" + self.showTagNum;
- this.showWorkTags.splice(this.showWorkTags.indexOf(tag), 1);
- this.self[tagsName].splice(this.showWorkTags.indexOf(tag), 1);
- }
- }
- },
- closeTag(tag) {
- if (this.showWorkTags != null) {
- this.showWorkTags.splice(this.showWorkTags.indexOf(tag), 1);
- }
- // 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>
|