123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- <style lang="scss" scoped>
- .day-cell{
- height: 100%;
- }
- .dialog-style{
- div{
- text-align: center;
- margin: 5px 0;
- label,/deep/ .el-input,/deep/ .el-textarea{
- display: inline-block;
- vertical-align: middle;
- }
- /deep/ .el-input{
- width: 200px;
- }
- /deep/ .el-textarea{
- width: 460px;
- }
- .el-select /deep/ .el-input{
- width: 70px;
- }
- }
- .add-bt{
- cursor: pointer;
- font-size: 18px;
- float: right;
- }
- .del-bt{
- cursor: pointer;
- font-size: 18px;
- }
- }
- .hide{
- opacity: 0;
- }
- </style>
- <template>
- <div>
- <el-calendar v-model="searchMonth">
- <template
- slot="dateCell"
- slot-scope="{date, data}">
- <div class="day-cell" @click="chooseDay(data)">
- <p>{{getDayNum(data.day)}}</p>
- <div v-if="new Date(data.day).getMonth() == searchMonth.getMonth()">
- <p v-for="item in planList[getDayNum(data.day)]" :key="item.id" :style="{'color':colorSet[item.status]}">
- {{item.name}}
- </p>
- </div>
- </div>
- </template>
- </el-calendar>
- <el-dialog
- class="dialog-style"
- title="编辑计划"
- :visible.sync="visibleChange"
- width="1000px">
- <div v-for="(item, index) in dayPlan" :key="index">
- <label>计划:</label>
- <el-input placeholder="" v-model="item.name" :disabled="!ableEdit"></el-input>
-
- <label>内容:</label>
- <el-input type="textarea" autosize placeholder="" v-model="item.content" :disabled="!ableEdit"></el-input>
-
- <label :class="{'hide':!item.id}">状态:</label>
- <el-select v-model="item.status" placeholder="请选择" size="mini" :class="{'hide':!item.id}" :disabled="item.id == null || !ableEdit">
- <el-option :label="'准备'" :value="0"></el-option>
- <el-option :label="'执行'" :value="1"></el-option>
- <el-option :label="'暂搁'" :value="2"></el-option>
- <el-option :label="'完成'" :value="3"></el-option>
- <el-option :label="'中止'" :value="4"></el-option>
- </el-select>
-
- <el-button @click="judgePlan(item)" type="text" :class="{'hide':!item.id}" :disabled="item.id == null">评价</el-button>
-
- <i class="el-icon-remove-outline del-bt" @click="visibleDelete = true;plan = item;deleteIndex = index" v-if="ableEdit"></i>
- </div>
- <i class="el-icon-circle-plus-outline add-bt" @click="addDayPlan()" v-if="ableEdit"></i>
- <span slot="footer" class="dialog-footer" v-if="ableEdit">
- <el-button @click="visibleChange = false">取 消</el-button>
- <el-button type="primary" @click="editTask">确 定</el-button>
- </span>
- </el-dialog>
- <el-dialog
- :title="plan.name + ' 任务评价'"
- :visible.sync="visibleJudge"
- width="800px">
- <div v-html="plan.evaluation" v-show="noEdit"></div>
- <Judge :planJudge="plan.evaluation" :changeSignal="changeSignal" @setEvaluation="setEvaluation" v-show="!noEdit"></Judge>
- <span slot="footer" class="dialog-footer">
- <el-button type="primary" @click="noEdit = false;" v-if="noEdit">编辑</el-button>
- <el-button type="primary" @click="visibleJudge = false;plan={}" v-if="!noEdit">取消</el-button>
- <el-button type="primary" @click="editTask" v-if="!noEdit">确 定</el-button>
- </span>
- </el-dialog>
- <el-dialog
- title="提示"
- :visible.sync="visibleDelete"
- width="200px">
- <p class="center-text">确认删除?</p>
- <span slot="footer" class="dialog-footer">
- <el-button @click="visibleDelete = false;plan={}">取 消</el-button>
- <el-button type="primary" @click="deletePlan">确 定</el-button>
- </span>
- </el-dialog>
- </div>
- </template>
- <script>
- import { getMonthPlan,addPlan,updatePlan,deletePlan } from '@/api/month';
- import Judge from "@/components/MainPage/Judge/Judge";
- export default {
- name: 'Month',
- components: {
- Judge
- },
- data () {
- return {
- colorSet:{
- 0:'gray',
- 1:'blue',
- 2:'red',
- 3:'green',
- 4:'yellow',
- },
- searchMonth: new Date(),
- params:{
- startTime: '',
- userId: this.$store.state.checkUser.id
- },
- visibleChange: false,
- planList: {},
- dayPlan: [],
- visibleDelete: false,
- plan:{},
- deleteIndex: '',
- noEdit: false,
- visibleJudge: false,
- changeSignal: false
- }
- },
- created() {
- this.getMonthPlan();
- },
- watch: {
- searchMonth(val,old) {
- if(val.getMonth() != old.getMonth()){
- this.params.startTime = val.getTime();
- this.getMonthPlan();
- }
- },
- '$store.state.checkUser.id'(val){
- this.params.userId = val;
- this.getMonthPlan();
- }
- },
- computed: {
- ableEdit() {
- return this.$store.state.loginUser.id == this.$store.state.checkUser.id;
- },
- },
- methods: {
- getMonthPlan(){
- getMonthPlan(this.params).then((data) => {
- this.planList = {};
- for(let key in data.data){
- this.$set(this.planList,key,data.data[key]);
- }
- })
- },
- editTask(){
- this.visibleChange = false;
- this.dayPlan.forEach(item => {
- if(item.id){
- let temp = {
- "id": item.id,
- "name": item.name,
- "content": item.content,
- "status": item.status,
- "startTime": this.searchMonth.getTime(),
- }
- updatePlan(temp).then((data) => {
- if(!data.result){
- this.$message(data.message);
- }
- this.getMonthPlan();
- })
- }
- else{
- addPlan(item).then((data) => {
- if(!data.result){
- this.$message(data.message);
- }
- this.getMonthPlan();
- })
- }
- })
- },
- chooseDay(data){
- if(new Date(data.day).getMonth() != this.searchMonth.getMonth()){
- return;
- }
- this.visibleChange = true;
- let day = this.getDayNum(data.day);
- this.dayPlan = JSON.parse(JSON.stringify(this.planList[day]));
- },
- addDayPlan(){
- this.dayPlan.push({
- "name": "",
- "content": "",
- "year": this.searchMonth.getFullYear(),
- "userId": "",
- "startTime": this.searchMonth.getTime(),
- })
- },
- deletePlan(){
- if(this.plan.id){
- let temp = {
- id: this.plan.id
- }
- deletePlan(temp).then((data) => {
- if(!data.result){
- this.$message(data.message);
- }
- else{
- this.dayPlan.splice(this.deleteIndex,1);
- }
- })
- }
- else{
- this.dayPlan.splice(this.deleteIndex,1);
- }
- this.visibleDelete = false;
- this.plan={};
- },
- getDayNum(day){
- return ~~day.split('-')[2];
- },
- setEvaluation(val){
- this.plan.evaluation = val;
- },
- judgePlan(item){
- this.visibleJudge = true;
- this.noEdit = true;
- this.plan = JSON.parse(JSON.stringify( item ));
- this.changeSignal = !this.changeSignal;
- }
- }
- }
- </script>
|