根据后端返回下拉请求地址,前端动态请求拿到下拉数据渲染

完整代码如下:

<template>

  <!-- 资源列表页 -->

  <div>

    <div>

      <i

        @click="$router.go(-1)"

        style="

          color: #409eff;

          cursor: pointer;

          margin-right: 5px;

          font-size: 18px;

        "

        class="el-icon-back"

      ></i

      >{{ getCurrentPageTitle }}

    </div>

    <br />

    <el-row class="contentTop">

      <el-col :span="12">

        <el-button type="primary" size="mini" @click="doAdd">新建</el-button>

        <el-button

          size="mini"

          @click="

            drawerImportant = true;

            active = 0;

            currentFile = null;

          "

          >导入</el-button

        >

        <!-- <el-button size="mini">批量更新</el-button>

        <el-button size="mini">删除</el-button> -->

        <el-button size="mini" @click="doExport">导出</el-button>

        <el-button size="mini" @click="doExportTemplate">导出模板</el-button>

      </el-col>

      <el-col :span="10">

        <el-input

          placeholder="请输入内容"

          v-model="inputValue"

          class="input-with-select"

          size="mini"

          clearable

        >

          <el-select

            v-model="selectValue"

            slot="prepend"

            style="width: 120px"

            placeholder="请选择"

            clearable

            @change="changeSelect"

          >

            <el-option

              :label="item.label"

              :value="item.value"

              v-for="item in searchList"

              :key="item.value"

            ></el-option>

          </el-select>

          <el-button

            slot="append"

            icon="el-icon-search"

            @click="doSearch"

          ></el-button>

        </el-input>

      </el-col>

      <el-col :span="0.5">

        <el-button

          icon="el-icon-setting"

          size="mini"

          @click="doSetting"

        ></el-button>

      </el-col>

    </el-row>

    <br />

    <el-row>

      <!-- @cell-click="doClickCell" -->

      <el-table

        :data="tableInfo.list"

        size="mini"

        @selection-change="handleSelectionChange"

        fit

        :stripe="true"

        :row-key="rowKey"

        ref="multipleTable"

        max-height="500"

        border

        id="tableId"

        @sort-change="sortChange"

      >

        <!-- <el-table-column

          type="selection"

          :reserve-selection="true"

          width="55"

        ></el-table-column> -->

        <el-table-column

          v-for="(item, index) in tableInfo.columns"

          v-if="!item.hide"

          :prop="item.name"

          :label="item.label"

          :key="index"

          :show-overflow-tooltip="true"

          sortable="custom"

        >

          <!-- <template slot-scope="scope">

            <el-button

              v-if="item.name == 'example'"

              type="text"

              @click="doClickCell(scope.row)"

              >{{ scope.row[item.name] }}</el-button

            >

            <span v-else>{{ scope.row[item.name] }}</span>

          </template> -->

        </el-table-column>

        <el-table-column fixed="right" label="操作" width="180">

          <template slot-scope="scope">

            <el-button @click="doClickCell(scope.row)" type="text" size="small"

              >详情</el-button

            >

            <el-button

              @click.stop="deleteRow(scope.row.id)"

              type="text"

              size="small"

              >删除</el-button

            >

          </template>

        </el-table-column>

      </el-table>

      <div style="text-align: center">

        <el-pagination

          @size-change="handleSizeChange"

          @current-change="handleCurrentChange"

          :current-page="paramsPage.pageNum"

          :page-sizes="[10, 20, 30, 50, 100]"

          :page-size="paramsPage.pageSize"

          layout="total, sizes, prev, pager, next, jumper"

          :total="tableInfo.total"

        ></el-pagination>

      </div>

    </el-row>

    <el-drawer

      title="列表显示属性配置"

      :visible.sync="drawer"

      direction="rtl"

      size="45%"

    >

      <el-transfer

        style="text-align: left; display: inline-block"

        v-model="transferValue"

        filterable

        :left-default-checked="[]"

        :right-default-checked="[]"

        :render-content="renderFunc"

        :titles="['未选属性', '已选属性']"

        :format="{

          noChecked: '${total}',

          hasChecked: '${checked}/${total}',

        }"

        :props="{

          key: 'name',

          label: 'label',

        }"

        @change="handleChange"

        :data="dataList"

      >

      </el-transfer>

      <br />

      <br />

      <div style="padding: 0 20px">

        <el-button type="primary" size="small" @click="doSettingConfirm"

          >应用</el-button

        >

        <el-button size="small" @click="drawer = false">取消</el-button>

        <el-button style="float: right" size="small" @click="doRest"

          >还原默认</el-button

        >

      </div>

    </el-drawer>

    <el-drawer

      title="创建"

      :visible.sync="drawerAdd"

      direction="rtl"

      size="30%"

    >

      <div style="padding-left: 20px">

        <el-form

          label-position="top"

          label-width="80px"

          :model="formLabelAlign"

        >

          <el-collapse

            v-model="activeNames"

            v-for="(item, index) in modelList"

            :key="index"

          >

            <el-collapse-item :title="item.name" :name="index">

              <el-row :gutter="40" v-for="(v, i) in item.infoList" :key="i">

                <el-col :span="20">

                  <el-form-item :label="v.label">

                    <el-input

                      v-if="v.typeValue == 'input'"

                      v-model="formLabelAlign[v.name]"

                      placeholder="请输入"

                      style="width: 570px"

                    ></el-input>

                    <el-input

                      v-else-if="v.typeValue == 'number'"

                      type="number"

                      v-model="formLabelAlign[v.name]"

                      placeholder="请输入"

                      style="width: 570px"

                    ></el-input>

                    <el-date-picker

                      v-else-if="v.typeValue == 'date'"

                      value-format="yyyy-MM-dd"

                      type="date"

                      v-model="formLabelAlign[v.name]"

                      placeholder="请输入"

                      style="width: 570px"

                    ></el-date-picker>

                    <el-date-picker

                      v-else-if="v.typeValue == 'time'"

                      value-format="yyyy-MM-dd HH:mm:ss"

                      type="datetime"

                      v-model="formLabelAlign[v.name]"

                      placeholder="请输入"

                      style="width: 570px"

                    ></el-date-picker>

                    <el-select

                      v-else-if="

                        v.typeValue == 'select' &&

                        v[`valueAttribute${i}`] &&

                        v[`valueAttribute${i}`].length > 0

                      "

                      v-model="formLabelAlign[v.name]"

                      clearable

                      style="width: 570px"

                    >

                      <el-option

                        v-for="w in v[`valueAttribute${i}`]"

                        :key="w.key"

                        :label="w.value"

                        :value="w.key"

                      >

                      </el-option>

                    </el-select>

                    <el-cascader

                      v-else-if="

                        v.typeValue == 'isCascade' &&

                        v[`valueAttribute${i}`] &&

                        v[`valueAttribute${i}`].length > 0

                      "

                      v-model="formLabelAlign[v.name]"

                      :options="v[`valueAttribute${i}`]"

                      :props="propsCascader"

                      @change="handleChangeCas"

                    ></el-cascader>

                  </el-form-item>

                </el-col>

              </el-row>

            </el-collapse-item>

          </el-collapse>

          <div class="bottomButton">

            <el-button type="primary" @click="doConfirm">提交</el-button>

            <el-button @click="drawerAdd = false">取消</el-button>

          </div>

        </el-form>

      </div>

    </el-drawer>

    <el-drawer

      title="批量导入"

      :visible.sync="drawerImportant"

      direction="rtl"

      size="45%"

    >

      <div style="padding-left: 20px">

        <el-steps :active="active" finish-status="success" align-center>

          <el-step title="上传文件"></el-step>

          <el-step title="选择关联模型"></el-step>

        </el-steps>

        <div style="padding-left: 20px">

          <div v-if="active == 0">

            <div

              style="

                margin: 20px 0;

                background: rgb(255, 244, 226);

                border: 1px solid rgb(255, 223, 172);

              "

            >

              <i style="color: rgb(255, 156, 1)" class="el-icon-info"></i>

              说明:导入编辑需要先导出需要修改的实例,并完成编辑修改后才能进行导入编辑操作

            </div>

            <el-upload

              class="upload-demo"

              drag

              action

              multiple

              :http-request="uploadFiles"

            >

              <i class="el-icon-upload"></i>

              <div class="el-upload__text">

                将文件拖到此处,或<em>点击上传</em>

              </div>

              <div class="el-upload__tip" slot="tip">

                只能上传jpg/png文件,且不超过500kb

                <el-button

                  type="primary"

                  icon="el-icon-download"

                  size="mini"

                  @click="downloadTemplate"

                  >下载模板</el-button

                >

              </div>

            </el-upload>

          </div>

          <div style="margin: 20px 0" v-if="active == 1">

            <el-checkbox v-model="checked">是否导入关联的模型实例</el-checkbox>

          </div>

          <div style="margin-top: 20px">

            <el-button

              v-if="active == 0"

              type="primary"

              :disabled="!currentFile"

              @click="active = 1"

              >下一步</el-button

            >

            <el-button v-if="active == 1" @click="active = 0">上一步</el-button>

            <el-button v-if="active == 1" type="primary" @click="doImportant"

              >开始导入</el-button

            >

            <el-button @click="drawerImportant = false">取消</el-button>

          </div>

        </div>

      </div>

    </el-drawer>

  </div>

</template>

<script>

import { mapGetters, mapMutations } from "vuex";

import tableCell from "./tableCell";

import { unique } from "@/utils/index";

import {

  resourceList,

  deleteResource,

  queryResource,

  findAllModel,

  getAddress,

  exportTemplate,

  uploadResource,

  exportResource,

  exportResourceTemplate,

  addResource,

  batchUpdateField,

  findAll,

  querySelect,

} from "@/api/cmdb/model";

export default {

  data() {

    return {

      inputValue: "",

      select: "",

      valueCade: [],

      selectValue: "",

      drawer: false,

      drawerAdd: false,

      drawerImportant: false,

      checked: false,

      active: 0,

      activeNames: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],

      multipleSelection: [],

      searchList: [],

      modelList: [],

      currentArgs: [],

      formInline: {},

      formLabelAlign: {},

      currentFile: null,

      tableInfo: {

        columns: [],

        list: [],

        total: 0,

      },

      paramsPage: {

        pageNum: 1,

        pageSize: 10,

      },

      dataList: [], // 所有字段数据

      selectFieldList: [],

      transferValue: [], // 右侧数据

      renderFunc(h, option) {

        return (

          <span>

            {/* {option.key} - {option.label} */}

            {option.label}

          </span>

        );

      },

      propsCascader: {

        value: "key",

        label: "value",

        children: "child",

      },

    };

  },

  computed: {

    ...mapGetters(["getCurrentPageTitle", "getActiveModel"]),

  },

  // watch: {

  //   $route: {

  //     handler(to, from) {

  //       this.$set(this.tableInfo, "columns", tableCell[to.params.id]);

  //       this.paramsPage.pageSize = 10;

  //       this.paramsPage.pageNum = 1; //重置页面

  //     },

  //     immediate: true,

  //   },

  // },

  mounted() {

    this.getList();

    this.getSearchList();

    this.getFields();

  },

  methods: {

    ...mapMutations(["setDetailTitle", "setResourceId"]),

    // 当前模型详情查询(新建字段)

    getFields() {

      let params = {

        args: this.getActiveModel.uniqueId,

      };

      findAllModel(params)

        .then((res) => {

          if (res.code == 0) {

            this.modelList = res.data; // 当前模型下包含的分组

            this.modelList.forEach(v1 => {

              v1.infoList.forEach((v2,i2)=> {

                if(v2.typeValue == 'isCascade' || v2.typeValue == 'select') {

                  getAddress(v2.dateTypeValue,{}).then(res2 => {

                    v2[`valueAttribute${i2}`] = res2

                  })

                }

              })

            })

            // 列表字段显示隐藏

            let arr = [];

            res.data.forEach((v) => {

              arr.push(v.infoList);

            });

            this.dataList = arr.flat(); // 二维数组转一维

            // 右侧数据

            this.transferValue = this.dataList.map((v) => {

              if (v.show) {

                return v.name;

              }

            });

          } else {

            res.desc && this.$message.error(res.desc);

          }

        })

        .catch((err) => {

          err.desc && this.$message.error(err.desc);

        });

    },

    getList(id = "id", order = "", args) {

      let params = {

        currPage: this.paramsPage.pageNum,

        pageSize: this.paramsPage.pageSize,

        uniqueId: this.getActiveModel.uniqueId,

        args: args || [],

        sortName: id,

        sortValue: order == "descending" ? false : true, // true = ASC,false = DESC

      };

      resourceList(params)

        .then((res) => {

          if (res.code == 0) {

            this.tableInfo.columns = res.data.headers;

            this.tableInfo.list = res.data.bodyData.list;

            this.tableInfo.total = res.data.bodyData.total;

          } else {

            res.desc && this.$message.error(res.desc);

          }

        })

        .catch((err) => {

          err.desc && this.$message.error(err.desc);

        });

    },

    // 排序

    sortChange({ column, prop, order }) {

      // console.log(column, prop, order );

      this.getList(prop, order, []);

    },

    changeSelect(key) {

      this.currentKey = key;

    },

    // 按条件搜索

    doSearch() {

      // if (!this.currentKey) {

      //   return this.$message.warning("请选择需要查询的字段名称");

      // }

      let args = [

        {

          key: this.currentKey,

          value: this.inputValue,

          select: false, // true为下拉搜索,一般默认都是输入框

        },

      ];

      this.currentArgs = args;

      this.getList("id", "", this.inputValue ? args : []);

    },

    // 查询下拉

    getSearchList() {

      let params = {

        args: this.getActiveModel.uniqueId,

      };

      queryResource(params).then((res) => {

        if (res.code == 0) {

          this.searchList = res.data;

        }

      });

    },

    rowKey(row) {

      return row.id;

    },

    handleSizeChange(val) {

      this.paramsPage.pageSize = val;

      this.getList();

    },

    handleCurrentChange(val) {

      this.paramsPage.pageNum = val;

      this.getList();

    },

    //多选

    handleSelectionChange(val) {

      // console.log(val);

      this.multipleSelection = val;

    },

    doSetting() {

      this.drawer = true;

    },

    // 还原默认

    doRest() {

      this.dataList.forEach((v) => {

        v.createTime && delete v.createTime;

        v.updateTime && delete v.updateTime;

        // 第一次保存的设置true,其他都隐藏false

        if (v.showDefault) {

          v.show = true;

        } else {

          v.show = false;

        }

      });

      batchUpdateField(this.dataList)

        .then((res) => {

          if (res.code == 0) {

            this.drawer = false;

            this.getList();

            this.getFields();

            this.$message.success(res.desc);

          } else {

            this.drawer = false;

            res.desc && this.$message.error(res.desc);

          }

        })

        .catch((err) => {

          this.drawer = false;

          err.desc && this.$message.error(err.desc);

        });

    },

    // 字段显示配置--应用

    doSettingConfirm() {

      let arr = [];

      arr = this.selectFieldList.map((v) => {

        return v.showDefault;

      });

      // 如果包含true,说明保存过一次,如果不包含true,说明第一次保存,为还原默认设置数据

      if (arr.includes(true)) {

        // console.log('保存过一次');

      } else {

        // console.log('第一次保存');

        // 第一次保存-应用,右侧showDefault设为true

        this.selectFieldList.forEach((v1) => {

          this.transferValue.forEach((v2) => {

            if (v2 == v1.name) {

              v1.showDefault = true;

            }

          });

        });

      }

      batchUpdateField(this.selectFieldList)

        .then((res) => {

          if (res.code == 0) {

            this.drawer = false;

            this.getList();

            this.getFields();

            this.$message.success(res.desc);

          } else {

            this.drawer = false;

            res.desc && this.$message.error(res.desc);

          }

        })

        .catch((err) => {

          this.drawer = false;

          err.desc && this.$message.error(err.desc);

        });

    },

    handleChangeCas(val) {},

    handleChange(value, direction, movedKeys) {

      // console.log(value, direction, movedKeys);

      let arr = [];

      // value为右侧数据;左侧dataList为所有数据

      // 默认全部show设为false,右侧是选中的需要show设为true,否则就为false

      this.dataList.forEach((v1) => {

        v1.show = false;

        v1.createTime && delete v1.createTime;

        v1.updateTime && delete v1.updateTime;

      });

      this.dataList.forEach((v1) => {

        value.forEach((v2) => {

          if (v2 == v1.name) {

            v1.show = true;

            arr.push(v1);

          } else {

            arr.push(v1);

          }

        });

      });

      this.selectFieldList = unique(arr, "id"); // 根据id去重

    },

    doClickCell(row) {

      this.setDetailTitle(row.example);

      this.setResourceId(row.id);

      this.$router.push({ path: `/resource/detail` });

    },

    next() {

      this.active = 2;

    },

    deleteRow(id) {

      let that = this;

      let params = {

        uniqueId: this.getActiveModel.uniqueId,

        id: id,

      };

      that

        .$confirm("确认要删除这条数据?", "提示", {

          confirmButtonText: "确定",

          cancelButtonText: "取消",

          type: "warning",

        })

        .then(() => {

          deleteResource(params)

            .then((res) => {

              if (res.code == 0) {

                that.$message.success(res.desc);

                that.getList();

              } else {

                if (res.desc) {

                  that.$message.error(res.desc);

                }

              }

            })

            .catch((err) => {

              err.desc && that.$message.error(err.desc);

            });

        })

        .catch(() => {

          that.$message({

            type: "info",

            message: "已取消删除",

          });

        });

    },

    doAdd() {

      this.drawerAdd = true;

      this.formLabelAlign = {};

    },

    // 新建--提交

    doConfirm() {

      if (

        this.formLabelAlign.example_department &&

        this.formLabelAlign.example_department.length > 0

      ) {

        this.formLabelAlign.example_department =

          this.formLabelAlign.example_department.join();

      }

      let params = {

        uniqueId: this.getActiveModel.uniqueId,

        args: this.formLabelAlign,

      };

      addResource(params)

        .then((res) => {

          if (res.code == 0) {

            this.getList();

            this.drawerAdd = false;

            this.$message.success(res.desc);

          } else {

            res.desc && this.$message.error(res.desc);

          }

        })

        .catch((err) => {

          err.desc && this.$message.error(err.desc);

        });

    },

    getDownload(res) {

      const blob = new Blob([res]);

      // const fileName = res.headers["content-disposition"].split("=")[1];

      const fileName = this.getActiveModel.uniqueId;

      const elink = document.createElement("a");

      elink.download = window.decodeURIComponent(fileName);

      elink.style.display = "none";

      elink.href = URL.createObjectURL(blob);

      elink.setAttribute("download", `${fileName}.xlsx`); // 下载文件的名称及文件类型后缀

      document.body.appendChild(elink);

      elink.click();

      URL.revokeObjectURL(elink.href); // 释放URL 对象

      document.body.removeChild(elink);

    },

    // 下载模板

    downloadTemplate() {

      let params = {

        uniqueId: this.getActiveModel.uniqueId,

      };

      exportTemplate(params).then((res) => {

        this.getDownload(res);

      });

    },

    // 导出

    doExport() {

      let params = {

        uniqueId: this.getActiveModel.uniqueId,

        currPage: this.paramsPage.pageNum,

        pageSize: this.paramsPage.pageSize,

        args: this.currentArgs,

        titleList: this.multipleSelection.map((v) => v.id),

      };

      exportResource(params).then((res) => {

        this.getDownload(res);

      });

    },

    // 导出模板

    doExportTemplate() {

      let params = {

        uniqueId: this.getActiveModel.uniqueId,

      };

      exportResourceTemplate(params).then((res) => {

        this.getDownload(res);

      });

    },

    // 导入--上传

    uploadFiles(files) {

      const _file = files.file;

      this.currentFile = _file;

      // var formData = new FormData();

      // formData.append("file", _file);

      // formData.append("uniqueId", this.getActiveModel.uniqueId);

      // uploadResource(formData)

      //   .then((res) => {

      //     if (res.code == 0) {

      //       this.getList();

      //       this.drawerImportant = false;

      //       this.$message.success(res.desc);

      //     } else {

      //       res.desc && this.$message.error(res.desc);

      //     }

      //   })

      //   .catch((err) => {

      //     err.desc && this.$message.error(err.desc);

      //   });

    },

    // 开始导入

    doImportant() {

      var formData = new FormData();

      formData.append("file", this.currentFile);

      formData.append("uniqueId", this.getActiveModel.uniqueId);

      uploadResource(formData)

        .then((res) => {

          if (res.type == "application/json") {

            this.$message.success("导入成功");

            this.drawerImportant = false;

            this.getList();

          } else {

            this.drawerImportant = false;

            this.$message.error("导入失败");

          }

        })

        .catch((err) => {

          this.drawerImportant = false;

          this.$message.error("导入失败");

        });

    },

  },

};

</script>

<style scoped lang="scss">

.contentTop {

  display: flex;

  justify-content: space-between;

  align-items: center;

}

::v-deep .el-drawer__open .el-drawer.rtl {

  -webkit-animation: rtl-drawer-in 0.3s 1ms;

  animation: rtl-drawer-in 0.3s 1ms;

  width: 38% !important;

}

::v-deep .el-transfer-panel {

  height: 660px !important;

}

::v-deep .el-transfer-panel__list.is-filterable {

  height: 660px !important;

}

::v-deep .el-upload-dragger {

  width: 530px !important;

}

.bottomButton {

  position: sticky;

  bottom: 0;

  left: 0;

  margin-top: 10px;

}

</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/626636.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法】二分查找——二分查找

本节博客详述“二分查找”并且以例子来进行讨论&#xff0c;有需要借鉴即可。 目录 1.二分查找1.1使用前提1.2模板 2.题目3.题解代码示例4.二分查找的一般模板5.总结 1.二分查找 1.1使用前提 使用的条件&#xff1a;数组具有“二段性”&#xff0c;二段性指的是数组可以根据某…

数据库系统概论(个人笔记)(第二部分)

数据库系统概论&#xff08;个人笔记&#xff09; 文章目录 数据库系统概论&#xff08;个人笔记&#xff09;2、关系模型简介2.1 关系数据库的结构2.2 数据库模式2.3 键2.4 模式图2.5 关系查询语言2.6 关系代数 2、关系模型简介 2.1 关系数据库的结构 Structure of Relational…

网络2--MAC地址,IP地址的理解

引入&#xff1a; 每一张主机都会有一张网卡&#xff0c;每一张网卡都有一个48bit位的序列号 当我们的热点被连上&#xff0c;你查看时&#xff0c;就会出现MAC地址&#xff0c;IP地址 那么他们两个是什么呢&#xff1f;&#xff1f;&#xff1f; MAC地址 在同一个局域网中…

【C++】每日一题 17 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 可以使用回溯法来解决这个问题。首先定义一个映射关系将数字与字母对应起来…

在js中table表格中进行渲染轮播图

效果图&#xff1a;示例&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title><script src"js/jquery-3.6.3.js"></script><style>/* 轮播图 */.basko {width: 100%;h…

51单片机小车制造过程记录

首先感谢B站up主好家伙vcc的资料。 这次小车做出来虽然资料挺全的&#xff0c;但中间还是犯了很多不该犯的错误。 第一个&#xff0c;物料这次我们搞错了挺多&#xff0c;最离谱的应该是最小系统板都错了。 资料里用的stm32f103c8t6&#xff0c;我们开始买成了stm32f103c8t6。…

Qt学习笔记1.3.4 QtCore-Qt资源系统

文章目录 资源收集文件(.qrc)外部二进制资源内编译(compiled-in)资源压缩使用应用程序中的资源使用库中的资源 Qt资源系统是一种 独立于平台的机制&#xff0c;用于在应用程序的可执行文件中存储二进制文件。如果您的应用程序总是需要一组特定的文件(图标、翻译文件等)&#x…

信息与未来2017真题笔记

T1. 龟兔赛跑 题目描述 兔子又来找乌龟赛跑啦&#xff01;同样的错误兔子不会犯两次&#xff0c;所以兔子提出赛跑的时候&#xff0c;乌龟就觉得这场比赛很不公平。于是兔子进一步放宽了条件&#xff0c;表示他可以在比赛开始以后先睡 t t t 分钟再开始追乌龟。 乌龟这下没…

java+jsp+sql server 医院住院管理系统论文(二)

⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️ ➡️点击免费下载全套资料:源码、数据库、部署教程、论文、答辩ppt一条龙服务 ➡️有部署问题可私信联系 ⬆️⬆️⬆️​​​​​​​⬆️…

TikTok起号的八大技巧分享

国内的传统生意都是可以在抖音上做&#xff0c;那么也可以在TikTok 上重新做一遍。那该如何才能把握住这片巨大的蓝海&#xff0c;TikTok 账号的运营就成为了主要的关键了&#xff0c;对于TikTok账号运营的八大秘籍&#xff0c;大家一起看看是如何做的&#xff1f; 一、固定节…

机器视觉运动控制一体机在点胶胶路检测上的应用

市场应用背景 点胶通过使用不同类型的粘合剂&#xff0c;实现产品的密封、绝缘、导热和耐腐蚀等作用&#xff0c;广泛应用于各种产品的制造。在点胶加工生产中&#xff0c;通过检测胶水的宽度、点胶位置和胶路连续性等&#xff0c;可确保产品性能的可靠性和稳定性。 在现实生…

骨传导耳机哪个品牌值得入手?盘点5款高人气热门机型推荐!

随着人们对健康生活方式的追求和户外运动的普及&#xff0c;骨传导耳机的需求也日益增长。然而&#xff0c;随着骨传导耳机的热度增加&#xff0c;市场上也开始出现一些低质量的骨传导耳机产品&#xff0c;这些劣质耳机在音质、佩戴舒适度或安全性上存在各种不足&#xff0c;甚…

Dubbo全局处理业务异常 (自定义dubbo异常过滤器)

自定义dubbo异常过滤器 一、前置问题介绍&#xff1a;问题一问题二 二、Dubbo的异常过滤器源码如下&#xff1a;三、实现方案 - 重写Dubbo的Filter异常过滤器至此&#xff0c;Dubbo自定义异常过滤器已完结&#xff01; 一、前置问题介绍&#xff1a; 问题一 在dubbo框架中&am…

多臂老虎机

多臂老虎机 有n根拉杆的的老虎机&#xff0c;每根拉杆获得奖励(值为1)的概率各不相同。 期望奖励更新 Q k 1 k ∑ i 1 k r i 1 k ( r k ∑ i 1 k − 1 r i ) 1 k ( r k k Q k − 1 − Q k − 1 ) Q k − 1 1 k [ r k − Q k − 1 ] Q_k\frac 1k \sum^{k}_{i1}r_i\\…

oracle10g dbca和netca报错

oracle10g dbca和netca报错 [oraclecqnew database]$ netcaOracle Net Services Configuration: Warning: Cannot convert string "-b&h-lucida-medium-r-normal-sans-*-140-*-*-p-*-iso8859-1" to type FontStruct Configuring Listener:LISTENER不影响使用&am…

一键监控多台服务器磁盘使用情况的神奇脚本!

在当今这个数据为王的时代&#xff0c;服务器的磁盘空间使用情况成为了系统管理员日常关注的重要指标之一。磁盘空间不足可能导致服务中断&#xff0c;数据丢失&#xff0c;甚至整个系统崩溃。因此&#xff0c;及时监控磁盘空间&#xff0c;预防潜在风险&#xff0c;成为了每个…

上下左右翻转照片以及标注信息扩充数据集

目录 前言&#xff1a; 示例项目数据结构&#xff1a; 源代码&#xff1a; 运行代码后生成的项目结构&#xff1a; 效果&#xff1a; 前言&#xff1a; 使用yolo训练模型时&#xff0c;遇到数据集很小的情况&#xff08;一两百张&#xff09;&#xff0c;训练出来的模型效…

2024年电工杯数学建模B题思路 中国电机工程学会杯建模思路分析

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

四天学会JS高阶(学好vue的关键)——作用域解构箭头函数(理论+实战)(第一天)

一、作用域 提到作用域&#xff08;作用域又分为局部作用域和全局作用域&#xff09;&#xff0c;就要想到变量。因为作用域规定了变量能够被访问的范围&#xff08;也就是作用域是为变量而服务的&#xff09;&#xff0c;为了避免全局变量污染这一情况&#xff0c;所以需要使…

关闭 Visual Studio Code 项目中 的eslint的语法校验 lintOnSave: false;; 项目运行起来之后 自动打开浏览器 端口

1、在 vue.config.js 配置 一个属性 lintOnSave: false 2、配置两个属性 open: true, // 自动打开浏览器 port: 3000 // 端口 port 端口号根据自己的项目实际开发来 配置