唐耀东
2022-10-12 901be26b0491501afe8eb145392a8d8c307f0138
新增施工交付其他交付功能
3个文件已修改
3个文件已添加
500 ■■■■■ 已修改文件
src/api/oa/other.js 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/down.js 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basics/template/index.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/construction/constructionList/index.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/construction/other/index.vue 345 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/oa/other.js
New file
@@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询施工交付-其他列表
export function listOther(query) {
  return request({
    url: '/oa/other/list',
    method: 'get',
    params: query
  })
}
// 查询施工交付-其他详细
export function getOther(id) {
  return request({
    url: '/oa/other/' + id,
    method: 'get'
  })
}
// 新增施工交付-其他
export function addOther(data) {
  return request({
    url: '/oa/other',
    method: 'post',
    data: data
  })
}
// 修改施工交付-其他
export function updateOther(data) {
  return request({
    url: '/oa/other',
    method: 'put',
    data: data
  })
}
// 删除施工交付-其他
export function delOther(id) {
  return request({
    url: '/oa/other/' + id,
    method: 'delete'
  })
}
src/main.js
@@ -37,7 +37,8 @@
import DictData from '@/components/DictData'
// 弹出层组件
import Dialog from '@/components/Dialog/index'
//下载附件
import { downFile } from '@/utils/down.js'
// 全局方法挂载
Vue.prototype.getDicts = getDicts
Vue.prototype.getConfigKey = getConfigKey
@@ -48,6 +49,7 @@
Vue.prototype.selectDictLabels = selectDictLabels
Vue.prototype.download = download
Vue.prototype.handleTree = handleTree
Vue.prototype.downFile = downFile
// 全局组件挂载
Vue.component('DictTag', DictTag)
src/utils/down.js
New file
@@ -0,0 +1,74 @@
import axios from 'axios'
import fa from 'element-ui/src/locale/lang/fa'
/**
 * 下载附件
 */
export function downFile(url, fileName) {
  let type = fileType(url);
  console.log(type);
  axios({
    url: url, // 服务器上pdf路径
    method: 'get',
    responseType: 'blob'
  }).then(res => {
    //console.log(res)
    let blob = new Blob([res.data], {
      //type类型后端返回来的数据中会有,根据自己实际进行修改
      // 表格下载为 application/xlsx,压缩包为 application/zip等,
      type: fileType(url),
    });
    if (typeof window.navigator.msSaveBlob !== "undefined") {
      window.navigator.msSaveBlob(blob, fileName);
    } else {
      var blobURL = window.URL.createObjectURL(blob);
      // 创建隐藏<a>标签进行下载
      var tempLink = document.createElement("a");
      tempLink.style.display = "none";
      tempLink.href = blobURL;
      tempLink.setAttribute("download", fileName);
      if (typeof tempLink.download === "undefined") {
        tempLink.setAttribute("target", "_blank");
      }
      document.body.appendChild(tempLink);
      tempLink.click();
      document.body.removeChild(tempLink);
      window.URL.revokeObjectURL(blobURL);
    }
  }).catch(err => {
    //loading.close();
    // eslint-disable-next-line no-undef
    console.log(err)
  })
}
export function fileType(url) {
  let suffix = url.substring(url.lastIndexOf('.')+1)
  let type;
  switch (suffix) {
    case "pdf":
      type = "application/pdf";
      break;
    case "doc":
      type = "application/msword";
      break;
    case "docx":
      type = "application/msword";
      break;
    case "xls":
      type = "application/vnd.ms-excel";
      break;
    case "xlsx":
      type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
      break;
    case "ppt":
      type = "application/vnd.ms-powerpoint";
      break;
    case "pptx":
      type = "application/vnd.ms-powerpoint";
      break;
    default:
      type = "";
      break;
  }
  return type;
}
src/views/basics/template/index.vue
@@ -1,5 +1,9 @@
<template>
  <div class="app-container">
  <div class="app-container"
       v-loading.fullscreen.lock="downLoading"
       element-loading-text="下载中"
       element-loading-spinner="el-icon-loading"
       element-loading-background="rgba(0, 0, 0, 0.8)">
        <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
          <el-form-item label="模板名称" prop="templateName">
            <el-input
@@ -75,7 +79,10 @@
      </el-table-column>
      <el-table-column label="模板" align="left" prop="templateName">
        <template slot-scope="scope">
          <el-link v-if="scope.row.fileUrl" type="primary" :href="scope.row.fileUrl" target="_blank">
<!--          <el-link v-if="scope.row.fileUrl"  type="primary" :href="scope.row.fileUrl" target="_blank">-->
<!--            {{ scope.row.templateName }}-->
<!--          </el-link>-->
          <el-link v-if="scope.row.fileUrl"  type="primary"  @click="uploadFile(scope.row)">
            {{ scope.row.templateName }}
          </el-link>
          <el-link v-else type="primary">{{ scope.row.templateName }}</el-link>
@@ -167,7 +174,7 @@
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-form-item label="附件">
          <!--          <fileUpload v-model="form.fileUrl" :limit="1" :fileType="[`pdf`]"/>-->
          <minio-upload v-model="form.fileUrl" :limit="1" :fileType="[`pdf`, 'xls', 'xlsx', 'ppt', 'pptx','doc','docx']"></minio-upload>
          <minio-upload v-model="form.fileUrl" :limit="1" :fileType="['xls', 'xlsx', 'ppt', 'pptx','doc','docx']"></minio-upload>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
@@ -182,6 +189,7 @@
import {listTemplate, getTemplate, delTemplate, addTemplate, updateTemplate} from "@/api/oa/template";
import minioUpload from '@/components/FileUpload/minio'
export default {
  name: "Template",
  components: {minioUpload},
@@ -191,6 +199,7 @@
      buttonLoading: false,
      // 遮罩层
      loading: true,
      downLoading: false,
      // 选中数组
      ids: [],
      // 非单个禁用
@@ -358,7 +367,16 @@
        this.uploadFlag = true;
        this.title = "上传附件";
      });
    }
    },
    uploadFile(item){
      console.log(item)
      if (!item) {
        return;
      }
      this.downLoading = true;
      this.downFile(item.fileUrl, item.templateName);
      this.downLoading = false;
    },
  }
};
</script>
src/views/construction/constructionList/index.vue
@@ -30,6 +30,9 @@
          <el-tab-pane label="软件系统" name="eight">
            <system v-if="activeName === 'eight'" :schoolId="schoolId"></system>
          </el-tab-pane>
          <el-tab-pane label="其他" name="nine">
            <other v-if="activeName === 'nine'" :schoolId="schoolId"></other>
          </el-tab-pane>
        </el-tabs>
        <div class="right-view-title-icon">
          <img alt="" title="施工批次" src="@/assets/images/batch-icon.png" @click="batchOpen = true" class="right-view-title-icon-item" />
@@ -58,6 +61,7 @@
import exchange from '../exchange'
import server from '../server'
import system from '../system'
import other from '../other'
export default {
  name: "constructionList",
@@ -71,7 +75,8 @@
    ai,
    exchange,
    server,
    system
    system,
    other
  },
  data() {
    return {
src/views/construction/other/index.vue
New file
@@ -0,0 +1,345 @@
<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
      <el-form-item label="名称" prop="name">
        <el-input
          v-model="queryParams.name"
          placeholder="请输入名称"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="部署位置" prop="buildingId">
        <building v-model="queryParams.buildingId" :schoolId="schoolId"></building>
      </el-form-item>
      <el-form-item label="施工批次" prop="constructionBatchId">
        <construction-batch v-model="queryParams.constructionBatchId" :schoolId="schoolId"></construction-batch>
      </el-form-item>
      <template v-if="showMoreCondition">
        <el-form-item label="生产厂商" prop="manufacturerId">
          <manufacturer v-model="queryParams.manufacturerId"></manufacturer>
        </el-form-item>
      </template>
      <el-form-item>
        <div class="show-more-search">
          <ShowMore :showMoreCondition.sync="showMoreCondition"></ShowMore>
          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
        </div>
      </el-form-item>
    </el-form>
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-plus"
          size="mini"
          @click="handleAdd"
          v-hasPermi="['oa:other:add']"
        >新增</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="success"
          plain
          icon="el-icon-edit"
          size="mini"
          :disabled="single"
          @click="handleUpdate"
          v-hasPermi="['oa:other:edit']"
        >修改</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="handleDelete"
          v-hasPermi="['oa:other:remove']"
        >删除</el-button>
      </el-col>
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="warning"-->
<!--          plain-->
<!--          icon="el-icon-download"-->
<!--          size="mini"-->
<!--          @click="handleExport"-->
<!--          v-hasPermi="['oa:other:export']"-->
<!--        >导出</el-button>-->
<!--      </el-col>-->
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
    <el-table v-loading="loading" :data="otherList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />
<!--      <el-table-column label="" align="center" prop="id" v-if="true"/>-->
      <el-table-column label="序号" type="index" align="center" show-overflow-tooltip>
        <template slot-scope="scope">
          <span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span>
        </template>
      </el-table-column>
<!--      <el-table-column label="高校ID" align="center" prop="schoolId" />-->
      <el-table-column label="名称" min-width="300" align="center" prop="name" show-overflow-tooltip/>
      <el-table-column label="部署位置" min-width="220" align="center" prop="buildingId_dictText" show-overflow-tooltip/>
      <el-table-column label="施工批次" align="center" prop="constructionBatchId_dictText" show-overflow-tooltip/>
      <el-table-column label="生产厂商" min-width="220" align="center" prop="manufacturerId_dictText" show-overflow-tooltip/>
      <el-table-column label="型号" min-width="200" align="center" prop="model" show-overflow-tooltip/>
      <el-table-column label="操作" align="center" fixed="right" width="220" class-name="small-padding fixed-width">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleUpdate(scope.row)"
            v-hasPermi="['oa:other:edit']"
          >修改</el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            v-hasPermi="['oa:other:remove']"
          >删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <pagination
      v-show="total>0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />
    <!-- 添加或修改施工交付-其他对话框 -->
    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<!--        <el-form-item label="高校ID" prop="schoolId">-->
<!--          <el-input v-model="form.schoolId" placeholder="请输入高校ID" />-->
<!--        </el-form-item>-->
        <el-form-item label="名称" prop="name">
          <el-input v-model="form.name" placeholder="请输入名称" />
        </el-form-item>
        <el-form-item label="部署位置" prop="buildingId">
          <building v-if="open" v-model="form.buildingId" :schoolId="schoolId"></building>
        </el-form-item>
        <el-form-item label="施工批次" prop="constructionBatchId">
          <constructionBatch v-if="open" v-model="form.constructionBatchId" :schoolId="schoolId"></constructionBatch>
        </el-form-item>
        <el-form-item label="生产厂商" prop="manufacturerId">
          <manufacturer v-model="form.manufacturerId"></manufacturer>
        </el-form-item>
        <el-form-item label="型号" prop="model">
          <el-input v-model="form.model" placeholder="请输入型号" />
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import { listOther, getOther, delOther, addOther, updateOther } from "@/api/oa/other";
import building from "../../components/building";
import constructionBatch from "../../components/constructionBatch";
import manufacturer from "../../components/manufacturer";
import ShowMore from "@/views/components/showMore";
export default {
  name: "Other",
  components:{
    building,
    constructionBatch,
    manufacturer,
    ShowMore
  },
  props: {
    schoolId: {
      type: Number,
      default: undefined
    }
  },
  data() {
    return {
      // 按钮loading
      buttonLoading: false,
      // 遮罩层
      loading: true,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 施工交付-其他表格数据
      otherList: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        schoolId: this.schoolId,
        name: undefined,
        buildingId: undefined,
        constructionBatchId: undefined,
        manufacturerId: undefined,
      },
      // 表单参数
      form: {},
      // 表单校验
      rules: {
        name: [
          { required: true, message: "名称不能为空", trigger: "blur" }
        ],
        buildingId: [
          { required: true, message: "部署位置不能为空", trigger: "blur" }
        ],
        constructionBatchId: [
          { required: true, message: "施工批次不能为空", trigger: "blur" }
        ],
        manufacturerId: [
          { required: true, message: "生产厂商不能为空", trigger: "blur" }
        ],
        model: [
          { required: true, message: "型号不能为空", trigger: "blur" }
        ],
      },
      showMoreCondition: false
    };
  },
  created() {
    this.getList();
  },
  methods: {
    /** 查询施工交付-其他列表 */
    getList() {
      this.loading = true;
      listOther(this.queryParams).then(response => {
        this.otherList = response.rows;
        console.log(this.otherList);
        this.total = response.total;
        this.loading = false;
      });
    },
    // 取消按钮
    cancel() {
      this.open = false;
      this.reset();
    },
    // 表单重置
    reset() {
      this.form = {
        id: undefined,
        schoolId: undefined,
        name: undefined,
        buildingId: undefined,
        constructionBatchId: undefined,
        manufacturerId: undefined,
        model: undefined,
        createBy: undefined,
        createTime: undefined,
        updateBy: undefined,
        updateTime: undefined,
        delFlag: undefined
      };
      this.resetForm("form");
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm");
      this.handleQuery();
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.id)
      this.single = selection.length!==1
      this.multiple = !selection.length
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.reset();
      this.open = true;
      this.title = "添加施工交付-其他";
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.loading = true;
      this.reset();
      const id = row.id || this.ids
      getOther(id).then(response => {
        this.loading = false;
        this.form = response.data;
        this.open = true;
        this.title = "修改施工交付-其他";
      });
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          this.buttonLoading = true;
          this.form.schoolId = this.schoolId;
          if (this.form.id != null) {
            updateOther(this.form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            }).finally(() => {
              this.buttonLoading = false;
            });
          } else {
            addOther(this.form).then(response => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            }).finally(() => {
              this.buttonLoading = false;
            });
          }
        }
      });
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      const ids = row.id || this.ids;
      this.$modal.confirm('是否确认删除施工交付-其他编号为"' + ids + '"的数据项?').then(() => {
        this.loading = true;
        return delOther(ids);
      }).then(() => {
        this.loading = false;
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).finally(() => {
        this.loading = false;
      });
    },
    /** 导出按钮操作 */
    handleExport() {
      this.download('oa/other/export', {
        ...this.queryParams
      }, `other_${new Date().getTime()}.xlsx`)
    }
  }
};
</script>