Browse Source

+ 施工项目坐标配置

chen.cheng 5 months ago
parent
commit
8d294c6ec7
5 changed files with 376 additions and 23 deletions
  1. 7 0
      src/api/cons/consUnitInfo.js
  2. 5 0
      src/i18n/en.js
  3. 5 0
      src/i18n/zh.js
  4. 35 23
      src/utils/request.js
  5. 324 0
      src/views/cons/consUnit/index.vue

+ 7 - 0
src/api/cons/consUnitInfo.js

@@ -9,6 +9,13 @@ export function listConsUnitInfo(query) {
   })
 }
 
+export function listAllConsUnitExcludeChild(id) {
+  return request({
+    url: `/cons/consUnitInfo/list/exclude/${id}`,
+    method: 'get'
+  })
+}
+
 // 查询施工单元详细
 export function getConsUnitInfo(id) {
   return request({

+ 5 - 0
src/i18n/en.js

@@ -15,6 +15,11 @@ export default {
     importModeMsg: "Drag your file here or Click.",
     export: "Export"
   },
+  session:{
+    invalid: "Invalid session, or session has expired, please log in again.",
+    repeatSubmit: "The data is processing, please do not submit again.",
+    outTime: "Your login status has expired. You can continue to stay on this page or log in again."
+  },
   menus: {
     首页: "Home",
     用户管理: "User manage"

+ 5 - 0
src/i18n/zh.js

@@ -15,6 +15,11 @@ export default {
     importModeMsg: "将文件拖到此处,或点击上传。",
     export: "导出"
   },
+  session: {
+    invalid: "无效的会话,或者会话已过期,请重新登录。",
+    repeatSubmit: "数据正在处理,请不要重复提交。",
+    outTime: "登录状态已过期,您可以继续留在该页面,或者重新登录。"
+  },
   menus: {
     首页: "home page",
     用户管理: "user manage"

+ 35 - 23
src/utils/request.js

@@ -1,15 +1,16 @@
 import axios from 'axios'
-import { Notification, MessageBox, Message, Loading } from 'element-ui'
+import {Loading, Message, MessageBox, Notification} from 'element-ui'
 import store from '@/store'
-import { getToken } from '@/utils/auth'
+import {getToken} from '@/utils/auth'
 import errorCode from '@/utils/errorCode'
-import { tansParams, blobValidate } from "@/utils/ruoyi";
+import {blobValidate, tansParams} from "@/utils/ruoyi";
 import cache from '@/plugins/cache'
-import { saveAs } from 'file-saver'
+import {saveAs} from 'file-saver'
+import i18n from '@/i18n'
 
 let downloadLoadingInstance;
 // 是否显示重新登录
-export let isRelogin = { show: false };
+export let isRelogin = {show: false};
 
 axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
 // 创建axios实例
@@ -20,6 +21,7 @@ const service = axios.create({
   timeout: 10000
 })
 
+console.log(i18n.t("session.outTime"))
 // request拦截器
 service.interceptors.request.use(config => {
   // 是否需要设置 token
@@ -57,7 +59,7 @@ service.interceptors.request.use(config => {
       const s_time = sessionObj.time;                // 请求时间
       const interval = 1000;                         // 间隔时间(ms),小于此时间视为重复提交
       if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
-        const message = '数据正在处理,请勿重复提交';
+        const message = i18n.t("session.repeatSubmit");
         console.warn(`[${s_url}]: ` + message)
         return Promise.reject(new Error(message))
       } else {
@@ -67,8 +69,8 @@ service.interceptors.request.use(config => {
   }
   return config
 }, error => {
-    console.log(error)
-    Promise.reject(error)
+  console.log(error)
+  Promise.reject(error)
 })
 
 // 响应拦截器
@@ -78,30 +80,34 @@ service.interceptors.response.use(res => {
     // 获取错误信息
     const msg = errorCode[code] || res.data.msg || errorCode['default']
     // 二进制数据则直接返回
-    if (res.request.responseType ===  'blob' || res.request.responseType ===  'arraybuffer') {
+    if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
       return res.data
     }
     if (code === 401) {
       if (!isRelogin.show) {
         isRelogin.show = true;
-        MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
+        MessageBox.confirm(i18n.t("session.outTime"), '系统提示', {
+          confirmButtonText: '重新登录',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
           isRelogin.show = false;
           store.dispatch('LogOut').then(() => {
             location.href = '/index';
           })
-      }).catch(() => {
-        isRelogin.show = false;
-      });
-    }
-      return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
+        }).catch(() => {
+          isRelogin.show = false;
+        });
+      }
+      return Promise.reject(i18n.t("session.invalid"))
     } else if (code === 500) {
-      Message({ message: msg, type: 'error' })
+      Message({message: msg, type: 'error'})
       return Promise.reject(new Error(msg))
     } else if (code === 601) {
-      Message({ message: msg, type: 'warning' })
+      Message({message: msg, type: 'warning'})
       return Promise.reject('error')
     } else if (code !== 200) {
-      Notification.error({ title: msg })
+      Notification.error({title: msg})
       return Promise.reject('error')
     } else {
       return res.data
@@ -109,7 +115,7 @@ service.interceptors.response.use(res => {
   },
   error => {
     console.log('err' + error)
-    let { message } = error;
+    let {message} = error;
     if (message == "Network Error") {
       message = "后端接口连接异常";
     } else if (message.includes("timeout")) {
@@ -117,17 +123,23 @@ service.interceptors.response.use(res => {
     } else if (message.includes("Request failed with status code")) {
       message = "系统接口" + message.substr(message.length - 3) + "异常";
     }
-    Message({ message: message, type: 'error', duration: 5 * 1000 })
+    Message({message: message, type: 'error', duration: 5 * 1000})
     return Promise.reject(error)
   }
 )
 
 // 通用下载方法
 export function download(url, params, filename, config) {
-  downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
+  downloadLoadingInstance = Loading.service({
+    text: "正在下载数据,请稍候",
+    spinner: "el-icon-loading",
+    background: "rgba(0, 0, 0, 0.7)",
+  })
   return service.post(url, params, {
-    transformRequest: [(params) => { return tansParams(params) }],
-    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+    transformRequest: [(params) => {
+      return tansParams(params)
+    }],
+    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
     responseType: 'blob',
     ...config
   }).then(async (data) => {

+ 324 - 0
src/views/cons/consUnit/index.vue

@@ -0,0 +1,324 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
+      <el-form-item label="单元名称" prop="deptName">
+        <el-input
+            v-model="queryParams.deptName"
+            placeholder="请输入单元名称"
+            clearable
+            @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <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>
+      </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="['system:dept:add']"
+        >新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="info"
+            plain
+            icon="el-icon-sort"
+            size="mini"
+            @click="toggleExpandAll"
+        >展开/折叠
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table
+        v-if="refreshTable"
+        v-loading="loading"
+        :data="consUnitInfoList"
+        row-key="id"
+        :default-expand-all="isExpandAll"
+        :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+    >
+      <el-table-column label="施工单元名称" width="200" prop="name"/>
+      <el-table-column label="强夯类型" prop="penningType"/>
+      <el-table-column label="类型" prop="type"/>
+      <el-table-column label="父节点" prop="parentId"/>
+      <el-table-column label="创建类型" prop="createType"/>
+      <el-table-column label="设计文件类型" prop="classifyType"/>
+      <el-table-column label="修改时间" align="center" prop="updateTime" width="200">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.updateTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建时间" align="center" prop="createTime" width="200">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" 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="['system:dept:edit']"
+          >修改
+          </el-button>
+          <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-plus"
+              @click="handleAdd(scope.row)"
+              v-hasPermi="['system:dept:add']"
+          >新增
+          </el-button>
+          <el-button
+              v-if="scope.row.parentId != 0"
+              size="mini"
+              type="text"
+              icon="el-icon-delete"
+              @click="handleDelete(scope.row)"
+              v-hasPermi="['system:dept:remove']"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 添加或修改部门对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <el-row>
+          <el-col :span="24" v-if="form.parentId !== 0">
+            <el-form-item label="上级施工单元" prop="parentId">
+              <treeselect v-model="form.parentId" :options="consUnitOptions" :normalizer="normalizer"
+                          placeholder="选择上级施工单元"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="施工单元名称" prop="name">
+              <el-input v-model="form.name" placeholder="请输入施工单元名称"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="创建类型" prop="createType">
+              <el-input v-model="form.createType" placeholder="请输入创建类型"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="强夯类型" prop="penningType">
+              <el-input v-model="form.penningType" placeholder="请输入强夯类型"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="类型" prop="type">
+              <el-input v-model="form.type" placeholder="请输入类型"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="设计文件类型" prop="classifyType">
+              <el-input v-model="form.classifyType" placeholder="请输入设计文件类型"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {
+  addConsUnitInfo,
+  delConsUnitInfo,
+  getConsUnitInfo,
+  listAllConsUnitExcludeChild,
+  listConsUnitInfo,
+  updateConsUnitInfo
+} from "@/api/cons/consUnitInfo";
+
+export default {
+  name: "cons-unit",
+  dicts: ['sys_normal_disable'],
+  components: {Treeselect},
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 施工单元表格数据
+      consUnitInfoList: [],
+      // 表格树数据
+      deptList: [],
+      // 部门树选项
+      deptOptions: [],
+
+      consUnitOptions: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 是否展开,默认全部展开
+      isExpandAll: true,
+      // 重新渲染表格状态
+      refreshTable: true,
+      // 查询参数
+      queryParams: {
+        name: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        parentId: [
+          {required: true, message: "上级部门不能为空", trigger: "blur"}
+        ],
+        name: [
+          {required: true, message: "施工单元名称不能为空", trigger: "blur"}
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询部门列表 */
+    getList() {
+      this.loading = true;
+      listConsUnitInfo(this.queryParams).then(response => {
+        this.consUnitInfoList = this.handleTree(response.rows, "id");
+        this.loading = false;
+      });
+    },
+    /** 转换部门数据结构 */
+    normalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children;
+      }
+      return {
+        id: node.id,
+        label: node.name,
+        children: node.children
+      };
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        penningType: null,
+        type: null,
+        parentId: null,
+        createType: null,
+        classifyType: null,
+        name: null,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 新增按钮操作 */
+    handleAdd(row) {
+      this.reset();
+      if (row != undefined) {
+        this.form.parentId = row.id;
+      }
+      this.open = true;
+      this.title = "添加施工单元";
+      listConsUnitInfo().then(response => {
+        this.consUnitOptions = this.handleTree(response.rows, "id");
+      });
+    },
+    /** 展开/折叠操作 */
+    toggleExpandAll() {
+      this.refreshTable = false;
+      this.isExpandAll = !this.isExpandAll;
+      this.$nextTick(() => {
+        this.refreshTable = true;
+      });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      getConsUnitInfo(row.id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改施工单元";
+        listAllConsUnitExcludeChild(row.id).then(response => {
+          this.consUnitOptions = this.handleTree(response.data, "id");
+          if (this.consUnitOptions.length == 0) {
+            const noResultsOptions = {id: this.form.parentId, name: this.form.parentName, children: []};
+            this.consUnitOptions.push(noResultsOptions);
+          }
+        });
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function () {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id) {
+            updateConsUnitInfo(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addConsUnitInfo(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      this.$modal.confirm('是否确认删除名称为"' + row.name + '"的数据项?').then(function () {
+        return delConsUnitInfo(row.id);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    }
+  }
+};
+</script>