毕业设计中医特色社区护理系统

今天上午核酸检测,没写代码,申请了优秀毕业生,中午1.30左右开始写,主要完成了对前面内容的曾山改在这里插入图片描述
首先完成了阅读量,只有不是作者id点击文章才可以增加阅读量。
文章阅读量开始
article类里面添加 click_number变量
mapper层 添加 Boolean updateClickNumberByArticleId(Article article);接口,
xml文件

    <update id="updateClickNumberByArticleId">
       update article set click_number = #{click_number} where article_id =  #{article_id}
    </update>

controller层 添加一个函数 通过文章id获取文章 是前台获取文章所以不需要token,其实逻辑就是获取文章信息以后给click_number取出来然后加1再放回去 更新了阅读量

    @GetMapping("front/findArticleByArticleId")//会增加阅读量
    public AjaxResult findArticleByArticleId (@RequestParam String article_id) {
        try {
            Article article = articleMapper.findArticleByArticleId(article_id); // 获取文章信息
            article.setClick_number(article.getClick_number()  + 1); // 阅读量增加 1
            articleMapper.updateClickNumberByArticleId(article); // 将新阅读量更新到数据库中
            ArticleCategory articleCategory = articleCategoryMapper.findArticleCategoryById(article.getArticle_category());
            article.setCategory(articleCategory); // 设置文章分类信息
            return AjaxResult.success(200, "根据文章id获取文章信息成功", article);
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error(5020, "根据文章id获取文章信息失败");
        }
    }
@GetMapping("front/admin/findArticleByArticleId")//不会增加阅读量
    public AjaxResult adminFindArticleByArticleId (@RequestParam String article_id) {
        try {
            Article article = articleMapper.findArticleByArticleId(article_id); // 获取文章信息
            ArticleCategory articleCategory = articleCategoryMapper.findArticleCategoryById(article.getArticle_category());
            article.setCategory(articleCategory); // 设置文章分类信息
            return AjaxResult.success(200, "根据文章id获取文章信息成功", article);
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error(5020, "根据文章id获取文章信息失败");
        }
    }

前段代码
将接口分成了会增加阅读量的查看 还有不增加阅读量的查看 对应的后端代码也不相同
api书写如下


export function adminFindArticleByArticleId (query) { // 不会增加阅读量的查看
  return request({
    url: '/front/admin/findArticleByArticleId',
    method: 'get',
    params: query
  })
}

export function findArticleByArticleId (query) { // 会增加阅读量的查看
  return request({
    url: '/front/findArticleByArticleId',
    method: 'get',
    params: query
  })
}

用在前端不同的页面,会增加的放在文章展示界面的created函数中添加以下判断

  created () {
    if (this.$route.params.state === '1') {
      adminFindArticleByArticleId({ article_id: this.$route.params.article_id }).then(res => {
        this.article_data = res.data
      })
    } else if (this.$route.params.state === '0') {
      findArticleByArticleId({ article_id: this.$route.params.article_id }).then(res => {
        this.article_data = res.data
      })
    }
  }

这样的话如果他的路由参数为1的时候是自己查看 不增加阅读量 0的时候为游客或者其他的查看 添加阅读量
router的写法

{
        path: 'article-read/:article_id/:state', // 1 代表作者查看,0 代表非作者查看
        name: 'ArticleRead',
        component: () => import('../views/article-read')
      }

阅读量增加结束
在这里插入图片描述

文章管理:显示分类,修改分类开始
首先给文章管理界面添加修改分类,查看,编辑按钮,上架四个按钮 四个一起说了
1.修改分类是在修改分类对应的click事件里面 添加事件 给改变的分类赋值给newCategoryFrom,id也给过去 用来查找文章 然后弹出提示窗 此操作将修改文章分类 同时引入接口updateArticleCategoryByArticleId 将会修改文章分类
2.文章编辑是新建了一个vue将文章的内容获取到赋值给富文本编辑器 同时右上角显示发布文章 ,里面的标题 分类 描述也获取到 引入updateArticle adminFindArticleByArticleId 一个是在created里面创建的时候就获取文章内容 一个是用于更新文章
3.查看就是不会增加阅读量的查看
4. 上下架是 将文章的article_status改变同时更新文章 下架 同理 这里跟是那个面文章编辑用的api不同 其实应该相同 我自己写完才发现可以一样因为vuex里面存有文章id文章的信息
下面是vue代码
article-admin

<template>
    <div class="article_list">
      <el-table
        :data="articleList" size="medial" style="width: 1040px; margin: 0 auto;">
        <el-table-column label="文章标题" width="140" prop="article_title"></el-table-column>
        <el-table-column label="文章简介" width="140" prop="article_describe"></el-table-column>
        <el-table-column label="状态" width="100">
          <template slot-scope="scope">
            <el-tag size="mini" v-if="scope.row.article_category === 1" type="success"> 护理 </el-tag>
            <el-tag size="mini" v-else-if="scope.row.article_category === 2" type="success"> 养生 </el-tag>
          </template>
        </el-table-column>
        <el-table-column prop="click_number" label="阅读量" width="100"></el-table-column>
        <el-table-column label="状态" width="100">
          <template slot-scope="scope">
            <el-tag size="mini" v-if="scope.row.article_status === '1'" type="success"> 上架 </el-tag>
            <el-tag size="mini" v-else-if="scope.row.article_status === '0'" type="danger"> 下架 </el-tag>
          </template>
        </el-table-column>
        <el-table-column label="发布时间" width="160">
          <template slot-scope="scope">
            {{ scope.row.create_time.substring(0,19).replace("T", " ") }}
          </template>
        </el-table-column>
        <el-table-column width="300">
          <template slot="header">
            <el-button type="success" size="mini" @click="handleToAdd">新增文章</el-button>
          </template>
          <template slot-scope="scope">
            <el-button size="mini" type="warning" @click="handlePreviewArticle(scope.row)"> 查看 </el-button>
            <el-button size="mini" type="warning" @click="handleEditArticle(scope.row)"> 编辑 </el-button>
            <el-button size="mini" type="warning" @click="handleUpdateCategory(scope.row)"> 修改分类 </el-button>
            <el-button size="mini" v-if="scope.row.article_status === '0'" type="warning" @click="handlePublishArticle(scope.row)"> 上架 </el-button>
            <el-button size="mini" v-else-if="scope.row.article_status === '1'" type="danger" @click="handleUnShelveArticle(scope.row)"> 下架 </el-button>
          </template>
        </el-table-column>
      </el-table>
      <!-- 修改分类对话框:开始 -->
      <el-dialog title="提示" width="35%" :visible.sync="updateArticleCategoryDialogVisibe">
        <el-form :model="newCategoryFrom">
          <el-form-item  prop="article_category" label="请选择分类" >
            <el-select @change="handleChangeCategory"
              style="width: 240px" v-model="newCategoryFrom.article_category">
              <el-option label="护理" value="1"/>
              <el-option label="养生" value="2"/>
            </el-select>
          </el-form-item>
        </el-form>
        <div slot="footer">
          <el-button @click="updateArticleCategoryDialogVisibe = false">取 消</el-button>
          <el-button type="primary" @click="handleConfirmUpdateArticleCategory">确 定</el-button>
        </div>
      </el-dialog>
      <!-- 修改分类对话框:结束 -->
    </div>
</template>

<script>
import { findArticleByAuthorId, updateStateByArticleId, updateArticleCategoryByArticleId } from '../../api/article'
export default {
  name: 'ArticleAdmin',
  data () {
    return {
      articleList: [],
      newCategoryFrom: {
        article_id: '',
        article_category: ''
      },
      updateArticleCategoryDialogVisibe: false // 控制修改分类对话框的显示
    }
  },
  created () {
    this.fetchArticleList()
  },
  methods: {
    handleToAdd () { // 新增文章
      this.$router.push({ name: 'ArticleAdd' })
    },
    handlePreviewArticle (article) { // 查看文章
      this.$router.push({ name: 'ArticleRead', params: { article_id: article.article_id, state: '1' } })
    },
    handleEditArticle  (article) { // 编辑文章
      this.$router.push({ name: 'ArticleEdit', params: { article_id: article.article_id } })
    },
    handleUpdateCategory (article) {
      this.newCategoryFrom.article_category = article.article_category + ''
      this.newCategoryFrom.article_id = article.article_id
      this.updateArticleCategoryDialogVisibe = true
    },
    handleChangeCategory (articleCategory) {
      this.newCategoryFrom.article_category = articleCategory
    },
    handleConfirmUpdateArticleCategory () {
      this.$confirm('此操作将修改文章分类, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        center: true
      }).then(() => {
        this.updateArticleCategoryDialogVisibe = false
        return updateArticleCategoryByArticleId(this.newCategoryFrom)
      }).then(() => {
        this.fetchArticleList()
        this.$message({
          type: 'success',
          message: '修改成功',
          offset: 100
        })
      }).catch(error => {
        if (error !== 'cancel') {
          this.$message({
            type: 'error',
            message: '修改失败',
            offset: 100
          })
        }
      })
    },
    handlePublishArticle (article) {
      this.$confirm('此操作将上架文章, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        center: true
      }).then(() => {
        article.article_status = '1'
        return updateStateByArticleId(article)
      }).then(() => {
        this.fetchArticleList()
        this.$message({
          type: 'success',
          message: '上架成功',
          offset: 100
        })
      }).catch(error => {
        if (error !== 'cancel') {
          this.$message({
            type: 'error',
            message: '上架失败',
            offset: 100
          })
        }
      })
    },
    handleUnShelveArticle (article) {
      this.$confirm('此操作将下架文章, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        center: true
      }).then(() => {
        article.article_status = '0'
        return updateStateByArticleId(article)
      }).then(() => {
        this.fetchArticleList()
        this.$message({
          type: 'success',
          message: '下架成功',
          offset: 100
        })
      }).catch(error => {
        console.log(error)
        if (error !== 'cancel') {
          this.$message({
            type: 'error',
            message: '下架失败',
            offset: 100
          })
        }
      })
    },
    fetchArticleList () {
      findArticleByAuthorId({ author_id: this.$store.state.user.userinfo.user_id }).then(res => {
        console.log('res.data', res.data)
        this.articleList = res.data
      }).catch(error => {
        console.log(error)
      })
    }
  }
}
</script>

<style lang="less" scoped>
.article_list {
  padding-top: 50px;
}
</style>

article-edit

<template>
  <div>
    <el-row id="article-top">
      <a href="#/article-admin" class="back"> <i class="el-icon-back"></i> 返回</a>
      <div class="action">
        <el-button type="warning" @click="handleUpdateArticleCheck">+ 发布文章</el-button>
      </div>
    </el-row>
    <el-row  id="article-editor">
      <quill-editor v-model="article.article_content"
        style="height: 600px; margin-bottom: 10px"></quill-editor>
    </el-row>
    <!-- 更新文章对话框:开始 -->
    <el-dialog title="提示" width="35%" :visible.sync="updateArticleDialogVisible">
      <el-form :model="article" :rules="articleRules" ref="articleRef">
        <el-form-item  prop="article_title" label='请输入文章标题' >
          <el-input v-model="article.article_title"></el-input>
        </el-form-item>
        <el-form-item  prop="article_describe" label='请输入文章描述' >
          <el-input v-model="article.article_describe"></el-input>
        </el-form-item>
        <el-form-item label="文章分类"  prop="article_category">
          <el-select placeholder="请选择文章分类" clearable
            v-model="article.article_category" style="width: 240px">
            <el-option label="护理" :value="1"/>
            <el-option label="养生" :value="2"/>
          </el-select>
        </el-form-item>
      </el-form>
      <div slot="footer">
        <el-button @click="updateArticleDialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="handleConfirmUpdateArticle">确 定</el-button>
      </div>
    </el-dialog>
    <!-- 更新文章对话框:结束 -->
  </div>
</template>

<script>
import { updateArticle } from '../../api/doctor/article'
import { adminFindArticleByArticleId } from '../../api/article'
export default {
  name: 'ArticleEdit',
  data () {
    return {
      updateArticleDialogVisible: false, // 控制更新文章对话框显示
      article: {
        author_id: '',
        article_content: '',
        article_title: '',
        article_describe: '',
        article_category: '1'
      },
      articleRules: {
        article_title: [
          { required: true, message: '请输入文章标题', trigger: 'blur' }
        ],
        article_describe: [
          { required: true, message: '请输入文章描述', trigger: 'blur' }
        ],
        article_category: [
          { required: true, message: '请选择分类', trigger: 'blur' }
        ]
      }
    }
  },
  created () {
    adminFindArticleByArticleId({ article_id: this.$route.params.article_id }).then(res => {
      this.article = res.data
    })
    this.article.article_id = this.$route.params.article_id
  },
  methods: {
    handleConfirmUpdateArticle () {
      this.$refs.articleRef.validate((valid) => {
        if (valid) {
          this.$confirm(`确定更新文章:${this.article.article_title}`, '询问', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
          }).then(() => {
            return updateArticle(this.article)
          }).then(() => {
            this.publishArticleDialogVisible = false
            this.$message({ type: 'success', message: '更新成功!' })
            this.$router.go(-1)
          }).catch(error => {
            if (error !== 'cancel') {
              this.$message({ type: 'error', message: '更新失败!' })
            }
          })
        } else {
          return false
        }
      })
    },
    /**
     * 检测文章内容是否为空
     */
    handleUpdateArticleCheck: function () {
      if (this.article.article_content === '') {
        this.$notify({
          title: '警告',
          message: '内容不能为空',
          type: 'warning'
        })
      } else {
        this.updateArticleDialogVisible = true
      }
    }
  }
}
</script>

<style lang="less" scoped>
#article-top {
  height: 7vh;
  display: flex;
  position: relative;
  box-shadow: 0 0px 5px 0 #efefef;
  .back {
    text-align: center;
    width: 10%;
    height: 7vh;
    line-height: 7vh;
    text-decoration: none;
    background-color: #f1f1f1;
    color: #3377ff;
    cursor: pointer;
  }
  .action {
    background-color: #fff;
    width: 90%;
    display: flex;
    padding-right: 25px;
    justify-content: flex-end;
    align-items: center;
  }
}
#article-editor {
  padding: 50px 150px;
}
</style>

article-read

<template>
  <div class="article_show__wrapper">
    <article-show :article="article_data"/>
  </div>
</template>

<script>
import { findArticleByArticleId, adminFindArticleByArticleId } from '../../api/article'
import ArticleShow from '../../components/article-show'
export default {
  name: 'ArticleRead',
  data () {
    return {
      article_data: ''
    }
  },
  components: { ArticleShow },
  created () {
    if (this.$route.params.state === '1') {
      adminFindArticleByArticleId({ article_id: this.$route.params.article_id }).then(res => {
        this.article_data = res.data
      })
    } else if (this.$route.params.state === '0') {
      findArticleByArticleId({ article_id: this.$route.params.article_id }).then(res => {
        this.article_data = res.data
      })
    }
  }
}
</script>

<style lang="less" scoped>
.article_show__wrapper {
  display: flex; justify-content: center;
}
</style>

article

<template>
  <div id="article-wrapper">
    <el-row id="article-category">
      <aside>
        <ul>
          <li :class="{ active: currentSelet === '1' }" @click="handleChange('1')">护理</li>
          <li :class="{ active: currentSelet === '2' }" @click="handleChange('2')">养生</li>
        </ul>
      </aside>
      <div id="article-container">
        <article-card @readArticle="handleReadArticle" v-for="item in articleList" :article-data="item" :key="item.article_id"></article-card>
      </div>
    </el-row>
    <el-row id="pagination">
      <!-- 分页:开始 -->
      <el-pagination v-if="page.listTotal !== '0'"
        small :page-sizes="[6, 12, 18]" :page-size="page.pageSize"
        layout="total, sizes, prev, pager, next, jumper" :total="page.listTotal"
        @size-change="handleSizeChange" @current-change="handleCurrentChange">
      </el-pagination>
      <!-- 分页:结束 -->
      <el-empty description="文章暂无" v-if="!page.listTotal"></el-empty>

    </el-row>
  </div>
</template>

<script>
import ArticleCard from '../../components/article-card'
import { findArticleByCategory, findArticleTotalByCategory } from '../../api/article'
export default {
  name: 'Article',
  components: { ArticleCard },
  data () {
    return {
      articleList: [],
      currentSelet: '1',
      page: { // 分页数据
        article_category: '1',
        pageNum: 1,
        pageSize: 6,
        listTotal: 0
      }
    }
  },
  created () {
    this.fetchArticleList()
  },
  methods: {
    handleSizeChange (newPageSize) {
      this.page.pageSize = newPageSize
      this.fetchArticleList()
    },
    handleCurrentChange (newPageNum) {
      this.page.pageNum = newPageNum
      this.fetchArticleList()
    },
    handleChange (category) {
      this.currentSelet = category
      this.page.article_category = category
      this.page.pageNum = 1
      this.page.pageSize = 6
      this.fetchArticleList()
    },
    fetchArticleList () {
      findArticleTotalByCategory({ article_category: this.page.article_category }).then(res => { // Promise 链式处理
        console.log(res)
        this.page.listTotal = res.data
        return findArticleByCategory(this.page)
      }).then(res => {
        this.articleList = res.data
        console.log(res) // for debug
      }).catch(error => {
        console.log(error)
      })
    },
    handleReadArticle (id) {
      this.$router.push({ name: 'ArticleRead', params: { article_id: id,state : '0' } })
    }
  }
}
</script>

<style lang="less" scoped>
#article-wrapper {
  padding-top: 25px;
  #article-category {
    display: flex;
    ul {
      width: 100px; position: fixed;
      li {
        padding: 10px 25px;
        text-align: center;
        line-height: 25px;
        overflow: hidden;
        background-color: #f8f8f8;
        font-weight: 400;
        font-size: 14px;
        border-bottom: 1px solid #eee;
        cursor: pointer;
      }
      li.active {
        background-color: #fff;
        font-weight: bold;
      }
    }
    #article-container {
      width: 80%; margin: 0 auto;
      display: flex; flex-wrap: wrap; justify-content: flex-start;
    }
  }
  #pagination {
    text-align: center; padding-top: 25px;
  }
}
</style>

用到的api

export function updateArticle (data) {
  return request({
    url: '/front/updateArticle',
    method: 'post',
    data: data
  })
}
import request from '../request'

export function findAllArticle () {
  return request({
    url: '/findAllArticle',
    method: 'get'
  })
}

export function findArticleByCategory (query) {
  return request({
    url: '/front/findArticleByCategory',
    method: 'get',
    params: query
  })
}

export function findArticleTotalByCategory (query) {
  return request({
    url: '/front/findArticleTotalByCategory',
    method: 'get',
    params: query
  })
}

export function adminFindArticleByArticleId (query) { // 不会增加阅读量的查看
  return request({
    url: '/front/admin/findArticleByArticleId',
    method: 'get',
    params: query
  })
}

export function findArticleByArticleId (query) { // 会增加阅读量的查看
  return request({
    url: '/front/findArticleByArticleId',
    method: 'get',
    params: query
  })
}

  export function findArticleByAuthorId (query) {
    return request({
      url: '/front/findArticleByAuthorId',
      method: 'get',
      params: query
    })
  }
  
  export function updateStateByArticleId (data) {
    return request({
      url: '/updateStateByArticleId',
      method: 'post',
      data: data
    })
  }

  export function updateArticleCategoryByArticleId (data) {
    return request({
      url: '/front/updateArticleCategoryByArticleId',
      method: 'post',
      data: data
    })
  }
  


前端代码结束
后端 实体类不变
xml文件添加

   <update id="updateStateByArticleId">
       update article set article_status = #{article_status}  where article_id = #{article_id}
    </update>
    <update id="updateClickNumberByArticleId">
       update article set click_number = #{click_number} where article_id =  #{article_id}
    </update>
    <!--update article set article_category = 2 where article_id = 32-->
    <update id="updateArticleCategoryByArticleId">
      update article set article_category = #{article_category}
      where article_id = #{article_id}
    </update>

mapper添加

    Boolean updateArticleCategoryByArticleId(Article article);

    Boolean updateArticle(Article article);

controller添加

 /**
     * 前台:中医生文章管理:更新文章分类
     * @param request
     * @param article
     * @return
     */
    @PostMapping("front/updateArticleCategoryByArticleId")
    public AjaxResult  updateArticleCategoryByArticleId (HttpServletRequest request, @RequestBody Article article) {
        try {
            String token = request.getHeader("Authorization");
            try {
                Claims claims = JwtUtils.checkToken(token);
                if (claims == null) {
                    return AjaxResult.error(50012, "未传输 token");
                }
            } catch (ExpiredJwtException e) {
                return AjaxResult.error(50013, "token 已过期");
            } catch (Exception e) {
                return AjaxResult.error(50014, "无效 token");
            }
            Boolean result = articleMapper.updateArticleCategoryByArticleId(article);
            if (result) {
                return AjaxResult.success(200, "修改文章分类成功", result);
            } else {
                return AjaxResult.error(5005, "修改文章分类失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error(5005, "修改文章分类失败");
        }
    }
/**
     * 前台:文章管理:更新文章内容
     */
    @PostMapping("front/updateArticle")
    public AjaxResult updateArticle (HttpServletRequest request, @RequestBody Article article) {
        try {
            String token = request.getHeader("Authorization");
            try {
                Claims claims = JwtUtils.checkToken(token);
                if (claims == null) {
                    return AjaxResult.error(50012, "未传输 token");
                }
            } catch (ExpiredJwtException e) {
                return AjaxResult.error(50013, "token 已过期");
            } catch (Exception e) {
                return AjaxResult.error(50014, "无效 token");
            }
            Boolean addArticleResult = articleMapper.updateArticle(article);
            if (addArticleResult) {
                return AjaxResult.success(200, "发布文章成功", addArticleResult);
            } else {
                return AjaxResult.error(5010, "发布文章失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error(5010, "发布文章失败");
        }
    }

编辑文章 查看文章结束
服务的上架与下架开始
首先在service实体类添加一个 private String service_sign; 表示今天明天后天 三天 服务只允许上架三天的服务 后续会继续更改
然后mapper里面添加
Boolean updateService(Service service);
List findTimeBySignId(@Param(“doctor_id”) Integer doctor_id, @Param(“service_sign”) String service_sign);两个接口
xml文件里面添加

 <update id="updateService"
        parameterType="bysj.bysj.model.Service">
   update service set  service_state = #{service_state}
   where  service_id = #{service_id}
</update>
<select id="findTimeBySignId"
        resultMap="serviceMap">
select * from service as s, time as t
where doctor_id = #{doctor_id} and service_sign = #{service_sign}
and s.time_id = t.time_id
</select>

controller

/**
     * 前台:服务管理:上架下架
     */
    @PostMapping("front/updateService")
    public AjaxResult updateService (HttpServletRequest request, @RequestBody Service service) {
        try {
            String token = request.getHeader("Authorization");
            try {
                Claims claims = JwtUtils.checkToken(token);
                if (claims == null) {
                    return AjaxResult.error(50012, "未传输 token");
                }
            } catch (ExpiredJwtException e) {
                return AjaxResult.error(50013, "token 已过期");
            } catch (Exception e) {
                return AjaxResult.error(50014, "无效 token");
            }
            Boolean updateResult =  serviceMapper.updateService(service);
            if (updateResult) {
                return AjaxResult.success(200, "更改状态成功", updateResult);
            } else {
                return AjaxResult.error(5010, "更改状态失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error(5010, "更改状态失败");
        }
            /**
     * 前台:服务管理:获取服务时间列表
     * @param request
     * @return
     */
    @GetMapping("front/findTimeBySignId")
    public AjaxResult findTimeBySignId (HttpServletRequest request, @RequestParam Integer doctor_id, @RequestParam String service_sign) {
        try {
            String token = request.getHeader("Authorization");
            try {
                Claims claims = JwtUtils.checkToken(token);
                if (claims == null) {
                    return AjaxResult.error(50012, "未传输 token");
                }
            } catch (ExpiredJwtException e) {
                return AjaxResult.error(50013, "token 已过期");
            } catch (Exception e) {
                return AjaxResult.error(50014, "无效 token");
            }
            return AjaxResult.success(200, "获取服务时间列表成功", serviceMapper.findTimeBySignId(doctor_id, service_sign));
        } catch (Exception e) {
            return AjaxResult.error(5025, "获取服务时间列表失败");
        }
    }

两个接口写完了
前段api

  export function serviceGetUserDoctorTotal () {
    return request({
      url: '/front/service/getUserDoctorTotal',
      method: 'get'
    })
  }
  export function findTimeBySignId (query) {
    return request({
      url: '/front/findTimeBySignId',
      method: 'get',
      params: query
    })
  }
  export function updateService (data) {
  return request({
    url: '/front/updateService',
    method: 'post',
    data: data
  })
}

服务管理界面,首先会通过sign获取三天的所有time列表 然后上下架的时候 引入updateService这个api更像服务的状态
然后结束
service-admin.vue

<template>
  <div id="service-admin">
    <div class="time-container">
      <div class="time-item">
          {{ todayTime }}
          <el-table :data="todayTimeList" border>
            <el-table-column prop="time.time_content" label="时段"  width="180">
            </el-table-column>
            <el-table-column label="状态" width="100">
              <template slot-scope="scope">
                <el-tag size="mini" v-if="scope.row.service_state === '0'" type="success"> 上架 </el-tag>
                <el-tag size="mini" v-else-if="scope.row.service_state === '1'" type="danger"> 下架 </el-tag>
              </template>
            </el-table-column>
            <el-table-column width="150" label="操作">
              <template slot-scope="scope">
                <el-button size="mini"  type="warning" v-if="scope.row.service_state === '1'" @click="handlePublish(scope.row)"> 上架 </el-button>
                <el-button size="mini"  type="danger" v-else-if="scope.row.service_state === '0'" @click="handleGround(scope.row)"> 下架 </el-button>
              </template>
            </el-table-column>
          </el-table>
        </div>
      <div class="time-item">
          {{ tomorrowTime }}
          <el-table :data="tomorrowTimeList" border>
            <el-table-column prop="time.time_content" label="时段"  width="180">
            </el-table-column>
            <el-table-column label="状态" width="100">
              <template slot-scope="scope">
                <el-tag size="mini" v-if="scope.row.service_state === '0'" type="success"> 上架 </el-tag>
                <el-tag size="mini" v-else-if="scope.row.service_state === '1'" type="danger"> 下架 </el-tag>
              </template>
            </el-table-column>
            <el-table-column width="150" label="操作">
              <template slot-scope="scope">
                <el-button size="mini"  type="warning" v-if="scope.row.service_state === '1'" @click="handlePublish(scope.row)"> 上架 </el-button>
                <el-button size="mini"  type="danger" v-else-if="scope.row.service_state === '0'" @click="handleGround(scope.row)"> 下架 </el-button>
              </template>
            </el-table-column>
          </el-table>
        </div>
      <div class="time-item">
          {{ afterTomorrowTime }}
          <el-table :data="afterTomorrowTimeList" border>
            <el-table-column prop="time.time_content" label="时段"  width="180">
            </el-table-column>
            <el-table-column label="状态" width="100">
              <template slot-scope="scope">
                <el-tag size="mini" v-if="scope.row.service_state === '0'" type="success"> 上架 </el-tag>
                <el-tag size="mini" v-else-if="scope.row.service_state === '1'" type="danger"> 下架 </el-tag>
              </template>
            </el-table-column>
            <el-table-column width="150" label="操作">
              <template slot-scope="scope">
                <el-button size="mini"  type="warning" v-if="scope.row.service_state === '1'" @click="handlePublish(scope.row)"> 上架 </el-button>
                <el-button size="mini"  type="danger" v-else-if="scope.row.service_state === '0'" @click="handleGround(scope.row)"> 下架 </el-button>
              </template>
            </el-table-column>
          </el-table>
        </div>
    </div>
    <div style="padding-top: 50px;">
      任务提醒:你于202248日上午8:0010:00要为客户离若进行拔罐。
    </div>
  </div>
</template>

<script>
import { findTimeBySignId, updateService } from '../../api/service'
export default {
  name: 'ServiceAdmin',
  data () {
    return {
      timeList: [],
      serviceDate: new Date(),
      todayTimeList: [],
      todayTime: '',
      tomorrowTimeList: [],
      tomorrowTime: '',
      afterTomorrowTimeList: [],
      afterTomorrowTime: '',
      groundForm: {
        time_id: '',
        service_date: '',
        doctor_id: ''
      }
    }
  },
  created () {
    const doctorId = this.$store.state.user.userinfo.user_id
    findTimeBySignId({ doctor_id: doctorId, service_sign: '1' }).then(res => {
      this.todayTime = res.data[0].service_date
      console.log(this.todayTime)
      this.todayTimeList = res.data
      console.log(res.data)
    })
    findTimeBySignId({ doctor_id: doctorId, service_sign: '2' }).then(res => {
      this.tomorrowTime = res.data[0].service_date
      this.tomorrowTimeList = res.data
    })
    findTimeBySignId({ doctor_id: doctorId, service_sign: '3' }).then(res => {
      this.afterTomorrowTime = res.data[0].service_date
      this.afterTomorrowTimeList = res.data
    })
  },
  methods: {
    handlePublish (service) { // 进行上架操作
      this.$confirm('此操作将上架服务, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        center: true
      }).then(() => {
        service.service_state = '0'
        return updateService(service)
      }).then(() => {
        this.$message({
          type: 'success',
          message: '上架成功!',
          offset: 100
        })
      }).catch((error) => {
        console.log('error', error)
        if (error !== 'cancel') {
          this.$message({
            type: 'error',
            message: '上架失败!'
          })
        }
      })
    },
    handleGround (service) { // 进行下架操作
      this.$confirm('此操作将下架服务, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        center: true
      }).then(() => {
        service.service_state = '1'
        return updateService(service)
      }).then(() => {
        this.$message({
          type: 'success',
          message: '下架成功!',
          offset: 100
        })
      }).catch((error) => {
        console.log('error', error)
        if (error !== 'cancel') {
          this.$message({
            type: 'error',
            message: '下架失败!'
          })
        }
      })
    }
  }
}
</script>

<style lang="less" scoped>
.time-item {
  width: 431px; margin: 15px;
  & /deep/ .el-date-editor.el-input {
    width: 129px;
  }
  & /deep/ .cell {
    text-align: center;
  }
}
.time-container  {
  display: flex; justify-content: center;
}
#service-admin {
  text-align: center;
}
</style>

服务的上架下架结束
睡觉!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值