【VUE】vue网页设计---垃圾管理系统网站设计

发布于:2022-12-21 ⋅ 阅读:(477) ⋅ 点赞:(0)

1、引言

设计结课作业,课程设计无处下手,网页要求的总数量太多?没有合适的模板?数据库,java,python,vue,html作业复杂工程量过大?毕设毫无头绪等等一系列问题。你想要解决的问题,在微信公众号“coding加油站”中全部会得到解决

2、作品介绍

垃圾管理系统采用html,vue技术来实现,符合所学知识体系,适用于常见的作业以及课程设计,需要获取更多的作品,请关注微信公众号:coding加油站,回复“垃圾管理系统”免费获取,如需更多资料,可在微信后台留言。欢迎大家来提问,交流学习。

2.1、作品简介方面 

垃圾管理系统采用常规方式来实现,符合绝大部分的要求。代码配置有相关文档讲解,如需从代码中学到知识点,那么这个作品将是你的不二之选

2.2、作品二次开发工具

此作品代码相对简单,基本使用课堂中所学知识点来完成,只需要修改相关的介绍文字,一些图片,就可以改为自己独一无二的代码,网页作品下载后可使用任意编辑软件(例如:DW、HBuilder、NotePAD 、Vscode 、Sublime 、Webstorm 所有编辑器均可使用),java,python等相关作业使用自己常使用的工具亦可完成相关二次开发。

2.3、作品技术介绍

html网页作品技术方面:使用CSS制作了网页背景图、鼠标经过及选中导航变色效果、下划线等相关技术来美化相关界面,部分采用了javascript来做校验。 使用html5,以及css3等相关技术完成技术的布局,在本作品中,会使用常见的布局,常见的浮动布局,flex布局都会有使用到哦。同时在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识,同时使用了一些js的相关知识。例如使用到了dom,和bom来获取浏览器的相关api,同时使用css对样式进行相关的美化,使得界面更加符合网页设计

vue作品技术方面:使用vue技术开发的网站,涉及常见的vue指令,如v-for,v-if,v-show,v-html等的使用,包含watch,计算属性等常见功能的开发,以及组件的使用,使用vue相关全家桶的使用,运用了v-router来作为路由,完全符合常见的网站开发技术。同时也会使用html5,以及css3等相关技术完成技术的布局,在本作品中,会使用常见的布局,常见的浮动布局,flex布局都会有使用到哦。

3、作品演示

【coding加油站】vue程序设计---垃圾管理系统

3.1、首页

 相关代码:

<template>
  <div class="dashboard-container">
    <header class="welcome-banner">
      <h2>你好,{{ name }}!</h2>
      <p>欢迎来到徐州市垃圾收运系统</p>
    </header>
    <section class="section">
      <div class="section-titles">
        <div class="section-title">统计数据</div>
      </div>
      <ul class="icon-block-list">
        <IconBlock icon="trash" name="垃圾吨数" :desc="trashWeight + ' 吨'" type="warning" />
        <IconBlock icon="marker" name="投放点数" :desc="disposalCount + ' 个'" type="success" />
        <IconBlock icon="trash" name="垃圾车数" :desc="vehicleCount + ' 辆'" type="danger" />
        <IconBlock icon="driver" name="驾驶员数" :desc="driverCount + ' 位'" type="primary" />
        <IconBlock icon="user" name="总用户数" :desc="userCount + ' 位'" type="info" />
        <IconBlock icon="task" name="总任务数" :desc="taskCount + ' 个'" type="warning" />
        <IconBlock icon="clock" name="运行天数" :desc="runningDay + ' 天'" type="primary" />
      </ul>
    </section>
  </div>
</template>

<script>
import { mapGetters } from 'vuex'
import IconBlock from '@/components/IconBlock'

export default {
  name: 'Dashboard',
  components: { IconBlock },
  data() {
    return {
      trashWeight: 666,
      disposalCount: 10000,
      vehicleCount: 500,
      driverCount: 1000,
      userCount: 1200,
      taskCount: 20,
      runningDay: 1
    }
  },
  computed: {
    ...mapGetters(['name'])
  }
}
</script>

<style lang="scss" scoped>
.dashboard-container {
  margin: 30px;
}

.welcome-banner {
  padding: 18px 36px;
  color: white;
  background: var(--warning-color);
  border-radius: 20px;
}

.section-titles {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin: 28px 0;
}

.section-title {
  display: grid;
  grid-template-columns: repeat(2, auto);
  align-items: center;
  font-size: 18px;
}

.icon-block-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
  gap: 30px;
  padding: 0;
  margin: 0;
  list-style-type: none;
}
</style>

3.2、垃圾车管理

相关代码:

<template>
  <div class="app-container">
    <div class="filter-container">
      <el-input
        v-model="listQuery.name"
        placeholder="姓名"
        clearable
        @input="handleFilter"
      />
      <el-select
        v-model="listQuery.gender"
        placeholder="性别"
        clearable
        @change="handleFilter"
      >
        <el-option
          v-for="item in genderOptions"
          :key="item"
          :label="item"
          :value="item"
        />
      </el-select>
      <el-select v-model="listQuery.sort" @change="handleFilter">
        <el-option
          v-for="item in sortOptions"
          :key="item.key"
          :value="item.key"
          :label="item.label"
        />
      </el-select>
      <el-button
        type="primary"
        icon="el-icon-plus"
        @click="handleCreate"
      >添加</el-button>
    </div>
    <el-table
      v-loading="listLoading"
      :data="list"
      element-loading-text="拼命加载中"
      border
      style="whitespace: nowrap;"
      @sort-change="sortChange"
    >
      <el-table-column
        label="ID"
        prop="id"
        sortable="custom"
        :class-name="getSortClass('id')"
      />
      <el-table-column label="姓名" prop="name" />
      <el-table-column label="性别" prop="gender" />
      <el-table-column label="出生日期" prop="birthdate">
        <template slot-scope="{ row }">
          <span>{{ row.birthdate | parseTime("{y}-{m}-{d}") }}</span>
        </template>
      </el-table-column>
      <el-table-column label="电话" prop="phone" />
      <el-table-column label="工作年份" prop="worktime" />
      <el-table-column label="驾驶证" prop="license" />
      <el-table-column label="车牌号" prop="platenumber" />
      <el-table-column label="违章次数" prop="violation" />
      <el-table-column label="操作" align="center" width="200">
        <template slot-scope="{ row, $index }">
          <el-button
            size="mini"
            type="primary"
            icon="el-icon-edit"
            @click="handleUpdate(row)"
          >修改</el-button>
          <el-button
            size="mini"
            type="danger"
            icon="el-icon-delete"
            @click="handleDelete(row, $index)"
          >删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <Pagination
      v-show="total > 0"
      :total="total"
      :page.sync="listQuery.page"
      :limit.sync="listQuery.limit"
      @pagination="getList"
    />
    <el-dialog
      :title="dialogStatus === 'create' ? '添加驾驶员信息' : '修改驾驶员信息'"
      :visible.sync="dialogFormVisible"
    >
      <el-form ref="ruleForm" :model="form" :rules="rules">
        <el-form-item label="姓名" label-width="120px" prop="name">
          <el-input v-model="form.name" autocomplete="off" />
        </el-form-item>
        <el-form-item label="性别" label-width="120px" prop="gender">
          <el-radio-group v-model="form.gender">
            <el-radio label="男" />
            <el-radio label="女" />
          </el-radio-group>
        </el-form-item>
        <el-form-item label="出生日期" label-width="120px" prop="birthdate">
          <el-date-picker v-model="form.birthdate" />
        </el-form-item>
        <el-form-item label="电话" label-width="120px" prop="phone">
          <el-input v-model="form.phone" autocomplete="off" />
        </el-form-item>
        <el-form-item label="工作年份" label-width="120px" prop="worktime">
          <el-date-picker v-model="form.worktime" type="year" />
        </el-form-item>
        <el-form-item label="驾驶证" label-width="120px" prop="license">
          <el-select v-model="form.license">
            <el-option
              v-for="item in licenseOptions"
              :key="item"
              :value="item"
              :label="item"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="车牌号" label-width="120px" prop="platenumber">
          <el-input v-model="form.platenumber" autocomplete="off" />
        </el-form-item>
        <el-form-item label="违章次数" label-width="120px">
          <el-input v-model="form.violation" autocomplete="off" />
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 消</el-button>
        <el-button
          type="primary"
          @click="dialogStatus === 'create' ? createData() : updateData()"
        >确 定</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import { fetchList, createDriver, updateDriver } from '@/api/drivers'
import Pagination from '@/components/Pagination'
import { parseTime } from '@/utils'

export default {
  name: 'DriversTable',
  components: { Pagination },
  filters: { parseTime },
  data() {
    return {
      list: null,
      listLoading: true,
      listQuery: {
        page: 1,
        limit: 10,
        name: undefined,
        sort: '+id'
      },
      total: 0,
      genderOptions: ['男', '女'],
      sortOptions: [
        { label: '升序', key: '+id' },
        { label: '降序', key: '-id' }
      ],
      dialogFormVisible: false,
      dialogStatus: '',
      form: {
        id: null,
        name: '',
        gender: '',
        birthdate: '',
        phone: '',
        worktime: '',
        license: '',
        violation: '',
        platenumber: ''
      },
      rules: {
        name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
        gender: [{ required: true, message: '请选择性别', trigger: 'blur' }],
        birthdate: [
          { required: true, message: '请选择出生日期', trigger: 'blur' }
        ],
        phone: [
          { required: true, message: '请输入电话号码', trigger: 'blur' },
          {
            pattern: /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-7|9])|(?:5[0-3|5-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1|8|9]))\d{8}$/,
            message: '电话号码格式不对',
            trigger: 'blur'
          }
        ],
        worktime: [
          { required: true, message: '请选择工作年份', trigger: 'blur' }
        ],
        license: [
          { required: true, message: '请选择驾驶证类型', trigger: 'blur' }
        ],
        platenumber: [
          { required: true, message: '请输入车牌号', trigger: 'blur' },
          {
            pattern: /^(?:[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}(?:(?:[0-9]{5}[DF])|(?:[DF](?:[A-HJ-NP-Z0-9])[0-9]{4})))|(?:[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9 挂学警港澳]{1})$/,
            message: '车牌号格式不对',
            trigger: 'blur'
          }
        ]
      },
      licenseOptions: ['A', 'B', 'C', 'D', 'E']
    }
  },
  created() {
    this.getList()
  },
  methods: {
    getList() {
      this.listLoading = true
      fetchList(this.listQuery).then(response => {
        this.list = response.data.items
        this.total = response.data.total
        this.listLoading = false
      })
    },
    handleFilter() {
      this.listQuery.page = 1
      this.getList()
    },
    sortChange(data) {
      const { prop, order } = data
      if (prop === 'id') {
        this.sortByID(order)
      }
    },
    sortByID(order) {
      this.listQuery.sort = order === 'ascending' ? '+id' : '-id'
      this.handleFilter()
    },
    getSortClass(key) {
      const sort = this.listQuery.sort
      return sort === `+${key}` ? 'ascending' : 'descending'
    },
    handleCreate() {
      this.resetForm()
      this.dialogFormVisible = true
      this.dialogStatus = 'create'
      this.$nextTick(() => {
        this.$refs['ruleForm'].clearValidate()
      })
    },
    resetForm() {
      this.form = {
        id: null,
        name: '',
        gender: '',
        birthdate: '',
        phone: '',
        worktime: '',
        license: '',
        violation: '',
        platenumber: ''
      }
    },
    createData() {
      this.$refs['ruleForm'].validate(valid => {
        if (valid) {
          this.form.id = parseInt(Math.random() * 100) + 1024
          createDriver(this.form).then(() => {
            this.list.unshift(this.form)
            this.dialogFormVisible = false
            this.$message.success('创建成功!')
          })
        }
      })
    },
    handleDelete(row, index) {
      this.$message.success('删除成功!')
      this.list.splice(index, 1)
    },
    handleUpdate(row) {
      this.form = { ...row }
      this.dialogStatus = 'update'
      this.dialogFormVisible = true
      this.$nextTick(() => {
        this.$refs['ruleForm'].clearValidate()
      })
    },
    updateData() {
      this.$refs['ruleForm'].validate(valid => {
        if (valid) {
          updateDriver(this.form).then(() => {
            const index = this.list.findIndex(item => item.id === this.form.id)
            this.list.splice(index, 1, this.form)
            this.dialogFormVisible = false
            this.$message.success('修改成功!')
          })
        }
      })
    }
  }
}
</script>

 

总结

以上就是本次项目的全部内容,需要交流或者免费获取代码请关注微信公众号:coding加油站,回复“垃圾管理系统”免费获取

本文含有隐藏内容,请 开通VIP 后查看