Jelajahi Sumber

接口联调

htc 1 Minggu lalu
induk
melakukan
64397cdec4

+ 276 - 0
src/utils/ruoyi.js

@@ -0,0 +1,276 @@
+
+
+/**
+ * 通用js方法封装处理
+ * Copyright (c) 2019 ruoyi
+ */
+
+// 日期格式化
+export function parseTime(time, pattern) {
+  if (arguments.length === 0 || !time) {
+    return null
+  }
+  const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
+  let date
+  if (typeof time === 'object') {
+    date = time
+  } else {
+    if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
+      time = parseInt(time)
+    } else if (typeof time === 'string') {
+      time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '');
+    }
+    if ((typeof time === 'number') && (time.toString().length === 10)) {
+      time = time * 1000
+    }
+    date = new Date(time)
+  }
+  const formatObj = {
+    y: date.getFullYear(),
+    m: date.getMonth() + 1,
+    d: date.getDate(),
+    h: date.getHours(),
+    i: date.getMinutes(),
+    s: date.getSeconds(),
+    a: date.getDay()
+  }
+  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+    let value = formatObj[key]
+    // Note: getDay() returns 0 on Sunday
+    if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
+    if (result.length > 0 && value < 10) {
+      value = '0' + value
+    }
+    return value || 0
+  })
+  return time_str
+}
+
+// 表单重置
+export function resetForm(refName) {
+  if (this.$refs[refName]) {
+    this.$refs[refName].resetFields();
+  }
+}
+
+// 添加日期范围
+export function addDateRange(params, dateRange, propName) {
+  let search = params;
+  search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
+  dateRange = Array.isArray(dateRange) ? dateRange : [];
+  if (typeof (propName) === 'undefined') {
+    search.params['beginTime'] = dateRange[0];
+    search.params['endTime'] = dateRange[1];
+  } else {
+    search.params['begin' + propName] = dateRange[0];
+    search.params['end' + propName] = dateRange[1];
+  }
+  return search;
+}
+
+// 回显数据字典
+export function selectDictLabel(datas, value) {
+  if (value === undefined) {
+    return "";
+  }
+  var actions = [];
+  Object.keys(datas).some((key) => {
+    if (datas[key].value == ('' + value)) {
+      actions.push(datas[key].label);
+      return true;
+    }
+  })
+  if (actions.length === 0) {
+    actions.push(value);
+  }
+  return actions.join('');
+}
+
+// 回显数据字典(字符串数组)
+export function selectDictLabels(datas, value, separator) {
+  if (value === undefined || value.length ===0) {
+    return "";
+  }
+  if (Array.isArray(value)) {
+    value = value.join(",");
+  }
+  var actions = [];
+  var currentSeparator = undefined === separator ? "," : separator;
+  var temp = value.split(currentSeparator);
+  Object.keys(value.split(currentSeparator)).some((val) => {
+    var match = false;
+    Object.keys(datas).some((key) => {
+      if (datas[key].value == ('' + temp[val])) {
+        actions.push(datas[key].label + currentSeparator);
+        match = true;
+      }
+    })
+    if (!match) {
+      actions.push(temp[val] + currentSeparator);
+    }
+  })
+  return actions.join('').substring(0, actions.join('').length - 1);
+}
+
+// 字符串格式化(%s )
+export function sprintf(str) {
+  var args = arguments, flag = true, i = 1;
+  str = str.replace(/%s/g, function () {
+    var arg = args[i++];
+    if (typeof arg === 'undefined') {
+      flag = false;
+      return '';
+    }
+    return arg;
+  });
+  return flag ? str : '';
+}
+
+// 转换字符串,undefined,null等转化为""
+export function parseStrEmpty(str) {
+  if (!str || str == "undefined" || str == "null") {
+    return "";
+  }
+  return str;
+}
+
+// 数据合并
+export function mergeRecursive(source, target) {
+  for (var p in target) {
+    try {
+      if (target[p].constructor == Object) {
+        source[p] = mergeRecursive(source[p], target[p]);
+      } else {
+        source[p] = target[p];
+      }
+    } catch (e) {
+      source[p] = target[p];
+    }
+  }
+  return source;
+};
+
+/**
+ * 构造树型结构数据
+ * @param {*} data 数据源
+ * @param {*} id id字段 默认 'id'
+ * @param {*} parentId 父节点字段 默认 'parentId'
+ * @param {*} children 孩子节点字段 默认 'children'
+ */
+export function handleTree(data, id, parentId, children) {
+  let config = {
+    id: id || 'id',
+    parentId: parentId || 'parentId',
+    childrenList: children || 'children'
+  };
+
+  var childrenListMap = {};
+  var nodeIds = {};
+  var tree = [];
+
+  for (let d of data) {
+    let parentId = d[config.parentId];
+    if (childrenListMap[parentId] == null) {
+      childrenListMap[parentId] = [];
+    }
+    nodeIds[d[config.id]] = d;
+    childrenListMap[parentId].push(d);
+  }
+
+  for (let d of data) {
+    let parentId = d[config.parentId];
+    if (nodeIds[parentId] == null) {
+      tree.push(d);
+    }
+  }
+
+  for (let t of tree) {
+    adaptToChildrenList(t);
+  }
+
+  function adaptToChildrenList(o) {
+    if (childrenListMap[o[config.id]] !== null) {
+      o[config.childrenList] = childrenListMap[o[config.id]];
+    }
+    if (o[config.childrenList]) {
+      for (let c of o[config.childrenList]) {
+        adaptToChildrenList(c);
+      }
+    }
+  }
+  return tree;
+}
+
+/**
+* 参数处理
+* @param {*} params  参数
+*/
+export function tansParams(params) {
+  let result = ''
+  for (const propName of Object.keys(params)) {
+    const value = params[propName];
+    var part = encodeURIComponent(propName) + "=";
+    if (value !== null && value !== "" && typeof (value) !== "undefined") {
+      if (typeof value === 'object') {
+        for (const key of Object.keys(value)) {
+          if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
+            let params = propName + '[' + key + ']';
+            var subPart = encodeURIComponent(params) + "=";
+            result += subPart + encodeURIComponent(value[key]) + "&";
+          }
+        }
+      } else {
+        result += part + encodeURIComponent(value) + "&";
+      }
+    }
+  }
+  return result
+}
+
+
+// 返回项目路径
+export function getNormalPath(p) {
+  if (p.length === 0 || !p || p == 'undefined') {
+    return p
+  };
+  let res = p.replace('//', '/')
+  if (res[res.length - 1] === '/') {
+    return res.slice(0, res.length - 1)
+  }
+  return res;
+}
+
+// 验证是否为blob格式
+export function blobValidate(data) {
+  return data.type !== 'application/json'
+}
+
+export function numSub(num1, num2) {
+  let baseNum1;
+  let baseNum2;
+  try {
+    baseNum1 = num1.toString().split(".")[1].length;
+  } catch (e) {
+    baseNum1 = 0;
+  }
+  try {
+    baseNum2 = num2.toString().split(".")[1].length;
+  } catch (e) {
+    baseNum2 = 0;
+  }
+  const baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
+  const precision = baseNum1 >= baseNum2 ? baseNum1 : baseNum2;
+  return Number(((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision));
+}
+
+export function generateNo() {
+  // 获取当前日期
+  const now = new Date();
+  // 获取月和日
+  const month = String(now.getMonth() + 1).padStart(2, '0'); // getMonth() 返回的是0-11,所以需要加1
+  const day = String(now.getDate()).padStart(2, '0'); // getDate() 返回的是1-31
+  // 生成 0 到 9999 之间的随机整数
+  const randomNum = Math.floor(Math.random() * 10000);
+  // 返回
+  return month + '' + day + '' + String(randomNum).padStart(4, '0');
+}

+ 21 - 7
src/views/emergency/faultdevice-add-or-update.vue

@@ -8,13 +8,26 @@
         <el-input v-model="dataForm.faultReason" placeholder="故障原因描述"></el-input>
       </el-form-item>
           <el-form-item label="故障发生时间" prop="faultTime">
-        <el-input v-model="dataForm.faultTime" placeholder="故障发生时间"></el-input>
+        <el-date-picker style="width:100%;"
+          v-model="dataForm.faultTime"
+          type="datetime"
+          placeholder="故障发生时间"
+          format="YYYY-MM-DD HH:mm:ss"
+        />
       </el-form-item>
           <el-form-item label="维修完成时间" prop="repairCompleteTime">
-        <el-input v-model="dataForm.repairCompleteTime" placeholder="维修完成时间"></el-input>
+        <el-date-picker style="width:100%;"
+          v-model="dataForm.repairCompleteTime"
+          type="datetime"
+          placeholder="维修完成时间"
+          format="YYYY-MM-DD HH:mm:ss"
+        />
       </el-form-item>
-          <el-form-item label="0-待确认 1-已确认" prop="status">
-        <el-input v-model="dataForm.status" placeholder="0-待确认 1-已确认"></el-input>
+          <el-form-item label="状态" prop="status">
+        <el-select v-model="dataForm.status" placeholder="状态">
+          <el-option label="待确认" :value="0"></el-option>
+          <el-option label="已确认" :value="1"></el-option>
+        </el-select>
       </el-form-item>
                   <el-form-item label="备注" prop="remark">
         <el-input v-model="dataForm.remark" placeholder="备注"></el-input>
@@ -28,6 +41,7 @@
 </template>
 
 <script lang="ts" setup>
+import { parseTime } from '@/utils/ruoyi'
 import { reactive, ref } from "vue";
 import baseService from "@/service/baseService";
 import { ElMessage } from "element-plus";
@@ -54,9 +68,6 @@ const rules = ref({
     ],
           status: [
       { required: true, message: '必填项不能为空', trigger: 'blur' }
-    ],
-                  remark: [
-      { required: true, message: '必填项不能为空', trigger: 'blur' }
     ]
   });
 
@@ -87,6 +98,9 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
+    dataForm.faultTime = dataForm.faultTime ? parseTime(new Date(dataForm.faultTime), '{yy}-{mm}-{dd} {hh}:{ii}:{ss}') : null;
+    dataForm.repairCompleteTime = dataForm.repairCompleteTime ? parseTime(new Date(dataForm.repairCompleteTime), '{yy}-{mm}-{dd} {hh}:{ii}:{ss}') : null;
+    console.log(dataForm);
     (!dataForm.id ? baseService.post : baseService.put)("/emergency/faultdevice", dataForm).then((res) => {
       ElMessage.success({
         message: '成功',

+ 57 - 2
src/views/emergency/faultdevice.vue

@@ -1,12 +1,25 @@
 <template>
   <div class="mod-demo__faultdevice">
     <el-form :inline="true" :model="state.dataForm" @keyup.enter="state.getDataList()">
+      <el-form-item>
+        <el-input v-model="state.dataForm.deviceName" placeholder="设备名称" clearable></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="state.getDataList()">查询</el-button>
+      </el-form-item>
       <el-form-item>
         <el-button v-if="state.hasPermission('emergency:faultdevice:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
       </el-form-item>
       <el-form-item>
         <el-button v-if="state.hasPermission('emergency:faultdevice:delete')" type="danger" @click="state.deleteHandle()">删除</el-button>
       </el-form-item>
+      <!-- 审阅 -->
+       <el-form-item>
+        <el-button v-if="state.hasPermission('emergency:faultdevice:review')" type="danger" @click="reviewHandle()">审阅</el-button>
+      </el-form-item>
+      <el-form-item>
+        <el-button v-if="state.hasPermission('emergency:faultdevice:export')" type="info" @click="state.exportHandle()">导出</el-button>
+      </el-form-item>
     </el-form>
     <el-table v-loading="state.dataListLoading" :data="state.dataList" border @selection-change="state.dataListSelectionChangeHandle" style="width: 100%">
       <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
@@ -15,16 +28,21 @@
               <el-table-column prop="faultReason" label="故障原因描述" header-align="center" align="center"></el-table-column>
               <el-table-column prop="faultTime" label="故障发生时间" header-align="center" align="center"></el-table-column>
               <el-table-column prop="repairCompleteTime" label="维修完成时间" header-align="center" align="center"></el-table-column>
-              <el-table-column prop="status" label="0-待确认 1-已确认" header-align="center" align="center"></el-table-column>
+              <el-table-column prop="status" label="状态" header-align="center" align="center">
+                <template v-slot="scope">
+                  {{ scope.row.status===0?'待确认':scope.row.status===1?'已确认':'-' }}
+                </template>
+              </el-table-column>
               <el-table-column prop="creator" label="创建人" header-align="center" align="center"></el-table-column>
               <el-table-column prop="createDate" label="创建时间" header-align="center" align="center"></el-table-column>
               <el-table-column prop="updater" label="更新人" header-align="center" align="center"></el-table-column>
               <el-table-column prop="updateDate" label="更新时间" header-align="center" align="center"></el-table-column>
               <el-table-column prop="remark" label="备注" header-align="center" align="center"></el-table-column>
-            <el-table-column label="操作" fixed="right" header-align="center" align="center" width="150">
+            <el-table-column label="操作" fixed="right" header-align="center" align="center" width="180">
         <template v-slot="scope">
           <el-button v-if="state.hasPermission('emergency:faultdevice:update')" type="primary" link @click="addOrUpdateHandle(scope.row.id)">修改</el-button>
           <el-button v-if="state.hasPermission('emergency:faultdevice:delete')" type="primary" link @click="state.deleteHandle(scope.row.id)">删除</el-button>
+          <el-button v-if="state.hasPermission('emergency:schedule:review')" type="primary" link @click="reviewHandle(scope.row.id)">审阅</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -37,6 +55,8 @@
 <script lang="ts" setup>
 import useView from "@/hooks/useView";
 import { reactive, ref, toRefs } from "vue";
+import baseService from "@/service/baseService";
+import { ElMessage, ElMessageBox } from "element-plus";
 import AddOrUpdate from "./faultdevice-add-or-update.vue";
 
 const view = reactive({
@@ -53,4 +73,39 @@ const addOrUpdateRef = ref();
 const addOrUpdateHandle = (id?: number) => {
   addOrUpdateRef.value.init(id);
 };
+
+
+// 审阅
+const reviewHandle = (id?: string) => {
+  if (!id && state.dataListSelections && state.dataListSelections.length <= 0) {
+    return ElMessage({
+      message: "请选择操作项",
+      type: "warning",
+      duration: 500
+    });
+  }
+  const reviewData = id 
+    ? { id: Number(id)} 
+    : (state.dataListSelections || []).map((item: IObject) => {return { id: item.id};});
+
+  ElMessageBox.confirm("确定进行[审阅]操作?", "提示", {
+    confirmButtonText: "确定",
+    cancelButtonText: "取消",
+    type: "warning"
+  })
+  .then(() => {
+      baseService.put("/emergency/schedule/review", reviewData).then((res) => {
+        ElMessage.success({
+          message: "审阅成功",
+          duration: 500,
+          onClose: () => {
+            state.getDataList();
+          }
+        });
+      });
+    })
+    .catch(() => {
+      //
+    });
+};
 </script>