vue3组合式api单文件组件写法

一,模板部分

html 复制代码
<template>
  <div class="device container">
    <breadcrumb :list="['首页', '应急处置']" />
    <div class="search_box">
      <div class="left">
        <span style="margin-right: 15px" @click="searchDevice">查询</span>
        <el-date-picker v-model="time" type="datetimerange" start-placeholder="开始时间" end-placeholder="结束时间"
          format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" range-separator="至" />
        <el-button size="large" type="primary" class="searchButton" style="margin-top: -4px" @click="searchDevice">查
          询</el-button>
      </div>
    </div>
    <!-- 表格 -->
    <el-table :data="deviceList">
      <el-table-column prop="userName" label="处置人" align="center" />
      <el-table-column prop="commandTime" label="处置时间" align="center" />
      <el-table-column prop="method" label="处置指令" align="center" :formatter="methodFormatter" />
      <el-table-column prop="execList[0].status" label="指令状态" align="center" :formatter="exceFormatter" />
      <!-- 原因 -->
      <el-table-column prop="reason" label="原因" align="center" />
      <el-table-column prop="param.vins[0]" label="车架号" align="center" width="180" />
      <el-table-column prop="execList[0].targetOrgName" label="所属企业" align="center" />

      <!-- 操作列 -->
      <el-table-column label="操作" align="center">
        <template #default="scope">
          <el-button type="primary" @click="getDeta(scope.row.id)">查看</el-button>
        </template>
      </el-table-column>
    </el-table>
    <!-- 分页 -->
    <div class="page">
      <el-pagination :current-page="queryInfo.pageNo" :page-size="queryInfo.pageSize" :total="total" background
        prev-text="上一页" next-text="下一页" layout="sizes,prev, pager, next, jumper" :page-sizes="[10, 20, 50]"
        @current-change="handleCurrentChange" @size-change="handleSizeChange" />
    </div>
    <!-- 详情信息对话框 -->
    <el-dialog v-model="detaDialogVisible" title="应急处置详情" width="70%" :destroy-on-close="true" @close="detaClose">
      <el-form :model="deta">
        <el-row>
          <el-col :span="12">
            <el-form-item label="处置人">
              <el-input v-model="deta.userName" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="处置时间">
              <el-input v-model="deta.commandTime" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="处置指令">
              <el-input v-model="deta.method" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="指令状态">
              <el-input v-model="status" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="原因">
              <el-input v-model="deta.reason" type="textarea" :row="2" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="内容">
              <el-input v-model="deta.content" type="textarea" :row="2" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="车架号">
              <el-select v-model="detaParam">
                <el-option v-for="item in deta.param.vins" :key="item" :label="item" :value="item" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="所属机构">
              <el-input v-model="targetOrgName" />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <el-table :data="detaTable">
        <el-table-column prop="reqTime" label="请求时间" align="center" />
        <el-table-column prop="respTime" label="响应时间" align="center" />
        <el-table-column prop="status" label="状态" align="center" width="80" />
        <el-table-column prop="message" label="消息" align="center" />
        <el-table-column prop="data" label="数据" align="center" />
      </el-table>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="detaDialogVisible = false">取 消</el-button>
          <el-button type="primary" @click="detaDialogVisible = false">确定</el-button>
        </span>
      </template>
    </el-dialog>
  </div>
</template>

二,js逻辑部分

javascript 复制代码
<script setup>
import { ref, reactive } from "vue";
import { queryCommand, getCommand } from "@/api/emergencyResponse";
const detaDialogVisible = ref(false)
const deviceList = ref([])
const total = ref(0)
const status = ref(null)
const detaParam = ref(null)
const targetOrgName = ref(null)
const time = ref([])
const detaTable = ref([])
const deta = ref({
  param: {}
})
const queryInfo = reactive({
  pageNo: 1,
  pageSize: 10,
  startTime: '',
  endTime: '',
  kind: 'Emergency',
})
const queryDevice = async () => {
  const res = await queryCommand(queryInfo)
  if (res.code == 0) {
    deviceList.value = res.data
    total.value = res.totalElements
  }
}
queryDevice()
const searchDevice = async () => {
  queryInfo.startTime = ""
  queryInfo.endTime = ""
  if (time.value != null) {
    queryInfo.startTime = time.value[0]
    queryInfo.endTime = time.value[1]
  }
  const res = await queryCommand(queryInfo)
  if (res.code == 0) {
    deviceList.value = res.data
    total.value = res.totalElements
  }
}
const getDeta = async (vin) => {
  detaDialogVisible.value = true
  const res = await getCommand(vin)
  deta.value = res.data
  status.value = deta.value.execList[0].status
  detaTable.value = deta.value.execList[0].execLogs
  detaParam.value = deta.value.param.vins[0]
  targetOrgName.value = deta.value.execList[0].targetOrgName
}
</script>
相关推荐
烬头882143 分钟前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
pas1361 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
2601_949833391 小时前
flutter_for_openharmony口腔护理app实战+预约管理实现
android·javascript·flutter
军军君012 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three
xiaoqi9223 小时前
React Native鸿蒙跨平台如何实现分类页面组件通过searchQuery状态变量管理搜索输入,实现了分类的实时过滤功能
javascript·react native·react.js·ecmascript·harmonyos
qq_177767373 小时前
React Native鸿蒙跨平台实现应用介绍页,实现了应用信息卡片展示、特色功能网格布局、权限/联系信息陈列、评分展示、模态框详情交互等通用场景
javascript·react native·react.js·ecmascript·交互·harmonyos
2603_949462103 小时前
Flutter for OpenHarmony社团管理App实战:预算管理实现
android·javascript·flutter
wuhen_n4 小时前
JavaScript内存管理与执行上下文
前端·javascript
Hi_kenyon4 小时前
理解vue中的ref
前端·javascript·vue.js
jin1233225 小时前
基于React Native鸿蒙跨平台地址管理是许多电商、外卖、物流等应用的重要功能模块,实现了地址的添加、编辑、删除和设置默认等功能
javascript·react native·react.js·ecmascript·harmonyos