threethousanddream 2 mēneši atpakaļ
vecāks
revīzija
08e4a5a695

+ 10 - 10
public/config.js

@@ -25,28 +25,28 @@
 window._CONFIG = {
   CURRENT_URL: "",
   TITLE: '几何BI',
-  SENSORS_HOST: 'https://bireport-openresty-test.9n1m.com',
+  PREFIX_URL:'/bi/',
+  VUE_APP_RESOURCE:[],
+  SENSORS_HOST: 'https://bireport-openresty-pre.9n1m.com',
   //多用户端的业务网关对外域名
-  SHARE_HOST: 'https://bireport-test.9n1m.com',
+  SHARE_HOST: 'https://bireport-pre.9n1m.com',
   // iam相关
   //接口地址
-  APIHead: 'https://iam-gw-abut.9n1m.com/bireport',
+  APIHead: 'https://iam-gw-pre.9n1m.com/bireport',
   //应用编码
   APP_CODING: 'bireport',
   //iam组件base_urls
   VUE_APP_BASE_URLS: {
-    "inst": "https://iam-gw-abut.9n1m.com",// 租户端的鉴权网关域名
-    "inst-web": "https://iam-abut.9n1m.com",// 租户端的登录域名
-    "mgmt": "https://iam-gw-mg-abut.9n1m.com",// 平台端的鉴权网关域名
-    "mgmt-web": "https://iam-mg-abut.9n1m.com",// 平台端的登录域名
+    "inst": "https://iam-gw-pre.9n1m.com/iam/api",// 租户端的鉴权网关域名
+    "inst-web": "https://iam-pre.9n1m.com",// 租户端的登录域名
+    "mgmt": "https://iam-gw-mg-pre.9n1m.com",// 平台端的鉴权网关域名
+    "mgmt-web": "https://iam-mg-pre.9n1m.com",// 平台端的登录域名
   },
   //iam组件env  管理端mgmt  用户端inst
   VUE_APP_ENV: 'inst',
   // 租户端   平台端 /iam/api
   // 在管理端查看租户端或平台端的访问路径,这样的设置以后iam鉴权请求就会带上这个路径
-  API_PREFIX: "/iam/api",
+  API_PREFIX: "",
   // 跳转登录的path,点击跳转登录
   loginPath: '/account#/login',
-  VUE_APP_RESOURCE: [],
-  PREFIX_URL: '/bi/',
 }

+ 9 - 8
src/assets/style/yanxiang.scss

@@ -1,9 +1,8 @@
-.my-top{
-  .el-form-item__label{
+.my-top {
+  .el-form-item__label {
     font-weight: 700;
   }
 }
-
 .el-table .el-table__header .el-table__cell {
   background-color: #f5f5f5 !important;
   font-weight: 600 !important;
@@ -20,7 +19,6 @@
     margin-left: 0;
   }
 }
-
 .el-button.el-button--text.el-button--small {
   padding: 8px 0;
 }
@@ -46,7 +44,6 @@
     color: var(--color-primary) !important;
   }
 }
-
 .status-box {
   display: flex;
   align-items: center;
@@ -57,7 +54,6 @@
     margin-right: 5px;
   }
 }
-
 .el-select-dropdown__item.hover, .el-select-dropdown__item:hover {
   background-color: var(--color-primary-hover) !important;
 }
@@ -67,7 +63,6 @@
 .el-tree-node__content:hover {
   background-color: var(--color-primary-hover) !important;
 }
-
 .el-overlay-dialog {
   display: flex;
   justify-content: center;
@@ -76,7 +71,6 @@
     margin: 0 auto !important;
   }
 }
-
 // 下拉弹窗
 .el-popover.my-popper {
   margin-top: -10px;
@@ -107,4 +101,11 @@
       text-align: center;
     }
   }
+}
+.instance-err-dialog {
+  height: 80% !important;
+  .el-dialog__body {
+    height: calc(100% - 64px) !important;
+    overflow-y: auto;
+  }
 }

+ 65 - 0
src/components/batchCategory/add.vue

@@ -0,0 +1,65 @@
+<template>
+  <el-dialog
+    v-model="props.modelValue" append-to-body title="编辑分类" width="400px" @close="onCancel"
+  >
+    <el-form label-width="80px" size="default" ref="form" :rules="state.rules" :model="state.categoryForm">
+      <el-form-item label="分类名" prop="cateName">
+        <el-input v-model="state.categoryForm.cateName"></el-input>
+      </el-form-item>
+      <el-form-item label="父级分类">
+        <el-cascader
+          v-model="state.categoryForm.parentId"
+          :options="batchCateParents"
+          :props="{ emitPath: false, value: 'id', label: 'cateName', checkStrictly: true }"
+          style="width: 100%"
+        ></el-cascader>
+      </el-form-item>
+      <el-form-item label="排序值" prop="sortNum">
+        <el-input type="number" v-model="state.categoryForm.sortNum" show-word-limit
+                  :max="10000" :maxlength="10000" :step="1"></el-input>
+      </el-form-item>
+    </el-form>
+    <div class="pt-10" style="text-align: right">
+      <el-button size="small" @click="onCancel">取消</el-button>
+      <el-button size="small" type="primary" @click="onEditCategoryConfirm">确定</el-button>
+    </div>
+  </el-dialog>
+</template>
+<script setup>
+import {computed, reactive, ref, watch} from "vue";
+import {categoryRules} from "@/util";
+import store from "@/store";
+import {categoryUpdate} from '@/api/batch';
+import {ElMessage} from "element-plus";
+const props = defineProps(['modelValue'])
+const emit = defineEmits(['update:modelValue'])
+const form = ref(null)
+const batchCateParents = computed(() => store.getters.batchCateParents)
+const state = reactive({
+  categoryForm: {},
+  rules: categoryRules('cateName', 'sortNum'),
+})
+watch(() => props.modelValue, val => {
+  if (val) {
+    state.categoryForm = {sortNum: 0, cateName: '', parentId: 0};
+  }
+})
+const getCategory = () => {
+  store.dispatch('getBatchCate');
+}
+const onCancel = () => {
+  emit('update:modelValue', false)
+}
+const onEditCategoryConfirm = () => {
+  form.value.validate(val => {
+    if (!val) return;
+    categoryUpdate(state.categoryForm).then(res => {
+      ElMessage({type: 'success', message: '保存成功'});
+      emit('update:modelValue', false)
+      getCategory();
+    });
+  });
+}
+</script>
+<style lang="scss">
+</style>

+ 65 - 0
src/components/jobCategory/add.vue

@@ -0,0 +1,65 @@
+<template>
+  <el-dialog
+    v-model="props.modelValue" append-to-body title="编辑分类" width="400px" @close="onCancel"
+  >
+    <el-form label-width="80px" size="default" ref="form" :rules="state.rules" :model="state.categoryForm">
+      <el-form-item label="分类名" prop="cateName">
+        <el-input v-model="state.categoryForm.cateName"></el-input>
+      </el-form-item>
+      <el-form-item label="父级分类">
+        <el-cascader
+          v-model="state.categoryForm.parentId"
+          :options="jobCateParents"
+          :props="{ emitPath: false, value: 'id', label: 'cateName', checkStrictly: true }"
+          style="width: 100%"
+        ></el-cascader>
+      </el-form-item>
+      <el-form-item label="排序值" prop="sortNum">
+        <el-input type="number" v-model="state.categoryForm.sortNum" show-word-limit
+                  :max="10000" :maxlength="10000" :step="1"></el-input>
+      </el-form-item>
+    </el-form>
+    <div class="pt-10" style="text-align: right">
+      <el-button size="small" @click="onCancel">取消</el-button>
+      <el-button size="small" type="primary" @click="onEditCategoryConfirm">确定</el-button>
+    </div>
+  </el-dialog>
+</template>
+<script setup>
+import {computed, reactive, ref, watch} from "vue";
+import {categoryRules} from "@/util";
+import store from "@/store";
+import {categoryUpdate} from "@/api/job";
+import {ElMessage} from "element-plus";
+const props = defineProps(['modelValue'])
+const emit = defineEmits(['update:modelValue'])
+const form = ref(null)
+const jobCateParents = computed(() => store.getters.jobCateParents)
+const state = reactive({
+  categoryForm: {},
+  rules: categoryRules('cateName', 'sortNum'),
+})
+watch(() => props.modelValue, val => {
+  if (val) {
+    state.categoryForm = {sortNum: 0, cateName: '', parentId: 0};
+  }
+})
+const getCategory = () => {
+  store.dispatch('getJobCate');
+}
+const onCancel = () => {
+  emit('update:modelValue', false)
+}
+const onEditCategoryConfirm = () => {
+  form.value.validate(val => {
+    if (!val) return;
+    categoryUpdate(state.categoryForm).then(res => {
+      ElMessage({type: 'success', message: '保存成功'});
+      emit('update:modelValue', false)
+      getCategory();
+    });
+  });
+}
+</script>
+<style lang="scss">
+</style>

+ 2 - 3
src/etlNodes/SOURCE_KAFKA/option.vue

@@ -118,7 +118,6 @@ import {ElMessage} from "element-plus";
 import {kafkaOffset} from "@/util/checkData";
 import {dataTypes} from "@/util/dict";
 import {setNextNode} from "@/util/nodeUtil";
-
 const labelText = {
   kafkaServers: "Kafka服务器地址",
   offsetMode: "偏移量模式",
@@ -227,9 +226,9 @@ export default {
       return new Promise((resolve, reject) => {
         // 校验 lableText Key值对应的 node.configJson 中的值是否为空
         // 如果消息类型是JSON 则不需要校验分隔符
-        let filter = [];
+        let filter = ["delimiter"];
         if (node.configJson.format == "json") {
-          filter = ["delimiter"];
+          filter = [];
         }
         let offsetKeys = Object.keys(node.configJson.offsets)
         // 字段名和值皆为空的数据

+ 1 - 1
src/util/auth.js

@@ -23,7 +23,7 @@ export function getCookie(key) {
 export function getToken() {
   if (process.env.NODE_ENV === "development") {
     // return 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJza3k5MTEiLCJpbnN0SWQiOiIxNzM5OTMxNjQxMjY4MjYwODY5Iiwia2lkIjoibXhrX2F1dGhfandrIiwiaXNzIjoiaHR0cHM6Ly9xZXZvYy5jb20vIiwic3R5bGUiOiJ3ZWIiLCJleHAiOjE3MzIyMzI2OTcsImlhdCI6MTcyODYzMjY5NywidXNlcklkIjoiMTczOTkyNzcxNDEyMDQ1NDIzNyIsImp0aSI6IjEwNDIxNDI4MDk2MjYyNDcxNjgifQ.HiKLCVWE4-jaP8CCPhp35GiFjW1eIs2Nu6X4bfY6rBwAh5UtQ7KzmzggqwLy829zEMKScyQreKPOEFAzPfbXpA'
-    return 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJzc3MxMjMiLCJpbnN0SWQiOiIxODA1NDMyNTkwMjY2NjAxNTQzIiwia2lkIjoibXhrX2F1dGhfandrIiwiaXNzIjoiaHR0cHM6Ly9xZXZvYy5jb20vIiwic3R5bGUiOiJ3ZWIiLCJleHAiOjE3MzIxNjgzMjUsImlhdCI6MTczMTMwNDMyNSwidXNlcklkIjoiMTgwNTQzMjU5MDA2MTA4MDY1NyIsImp0aSI6IjEwNTMzNDg1MzEyNDQzNjc4NzIifQ.rETYSX4OckmH64m3Lj6bJ_X12XuE3oCggEq3_c9-PfsLRl8JnZigtH1ZK4T9eMcvdY7ANw3S8Ri6qiz099cImw'
+    return 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJtMTgwMDAwMzc1MDEiLCJpbnN0SWQiOiIxNzM4MDA5MzAwMTc0NTMzNjI3Iiwia2lkIjoibXhrX2F1dGhfandrIiwiaXNzIjoiaHR0cHM6Ly9xZXZvYy5jb20vIiwic3R5bGUiOiJ3ZWIiLCJleHAiOjE3MzUxMDM2MzcsImlhdCI6MTczMTUwMzYzNywidXNlcklkIjoiMTc4MzQxNDQxNzAxOTQwODQwOCIsImp0aSI6IjEwNTQxODQ1MDYzMTI4ODQyMjQifQ.TFWH8QV34_fDr07Bv2fMJ0UNd5dxsHKkCOkCn-Xwjs30Oacsnfr_VZMiVx0M5ULh4dGVLFuZgrBORubzf2mtZQ'
   } else {
     return getCookie('congress')
   }

+ 13 - 8
src/views/batchInstance/list.vue

@@ -120,8 +120,8 @@
             </el-select>
           </el-form-item>
         </el-form>
-        <el-button type="primary" :icon="Search" @click="getDetail" style="margin-left: 10px">搜索</el-button>
-        <el-button type="success" :icon="Search" @click="getDetail" style="margin-left: 10px">刷新</el-button>
+        <el-button @click="getDetail" style="margin-left: 10px">搜索</el-button>
+        <el-button @click="onResetDetail" style="margin-left: 10px">重置</el-button>
         <div style="flex: 1"></div>
       </div>
       <div class="stat-panel">
@@ -302,6 +302,17 @@ const checkDetail = row => {
   getDetail()
   state.detailShow = true
 }
+const onResetDetail = () => {
+  state.detailParams.sourceTableName = ''
+  state.detailParams.targetTableName = ''
+  state.detailParams.instanceStatus = ''
+  let date = new Date()
+  state.time[1] = moment(date).format('YYYY-MM-DD')
+  date.setDate(date.getDate() - 10)
+  state.time[0] = moment(date).format('YYYY-MM-DD')
+  state.detailTime = [...state.time]
+  getDetail()
+}
 const getDetail = () => {
   let {current, size,} = state.detailPage
   let {sourceTableName, targetTableName, instanceStatus} = state.detailParams
@@ -483,12 +494,6 @@ function changeCron(val) {
 <style lang="scss">
 .page-instance-list {
 }
-.instance-err-dialog {
-  .el-dialog__body {
-    max-height: 640px;
-    padding: 20px 10px;
-  }
-}
 .batch-instance-detail {
   .el-dialog__body {
     max-height: 860px;

+ 7 - 1
src/views/batchTask/edit.vue

@@ -37,9 +37,11 @@
               </el-form-item>
               <el-form-item label="任务分类" prop="categoryId">
                 <el-cascader
-                  v-model="state.form.categoryId" :options="categoryList" filterable
+                  v-model="state.form.categoryId" :options="categoryList" filterable style="width: 130px"
                   :props="{label:'cateName',value:'id',emitPath:false,checkStrictly: true}"
                 ></el-cascader>
+                <el-button size="small" :icon="Plus" title="添加分类" @click="state.showAddCate=true"
+                           style="margin-left: 5px;"></el-button>
               </el-form-item>
             </el-form>
           </div>
@@ -517,6 +519,7 @@
       </el-button>
     </div>
   </el-dialog>
+  <cateAdd v-model="state.showAddCate"></cateAdd>
 </template>
 <script setup>
 import {computed, onMounted, reactive, ref, watch} from "vue";
@@ -532,7 +535,10 @@ import {VAceEditor} from "vue3-ace-editor"
 import {jobSave, jobDetail} from "@/api/batch";
 import {getMineAuthGroup} from '@/api/system'
 import CustomHeader from "@/components/customHeader.vue";
+import cateAdd from '@/components/batchCategory/add.vue'
+import {Plus} from "@element-plus/icons-vue";
 const state = reactive({
+  showAddCate: false,
   form: {
     jobName: '',
     jobDesc: '',

+ 0 - 6
src/views/instance/list.vue

@@ -460,12 +460,6 @@ const addDrawer = (val) => {
     }
   }
 }
-.instance-err-dialog {
-  .el-dialog__body {
-    max-height: 600px;
-    padding: 20px 10px;
-  }
-}
 :deep(.el-collapse-item__header) {
   line-height: unset !important;
 }

+ 11 - 3
src/views/job/edit.vue

@@ -9,8 +9,9 @@
           <el-form-item label="流程分类" required>
             <el-cascader
               v-model="jobForm.categoryId" :show-all-levels="false" :options="jobCateTree" filterable
-              :props="{emitPath:false,value:'id',label:'cateName',checkStrictly: true}" style="width: 100%"
+              :props="{emitPath:false,value:'id',label:'cateName',checkStrictly: true}"
             />
+            <el-button :icon="Plus" title="添加分类" @click="showAddCate=true" style="margin-left: 5px;"></el-button>
           </el-form-item>
         </el-form>
         <div style="flex: 1"></div>
@@ -197,6 +198,7 @@
         </el-button>
       </div>
     </el-dialog>
+    <cateAdd v-model="showAddCate"></cateAdd>
   </div>
 </template>
 <script>
@@ -213,10 +215,15 @@ import nodeError from "@/components/nodeError/index.vue";
 import {getMineAuthGroup} from '@/api/system'
 import router from "@/router";
 import CustomHeader from "@/components/customHeader.vue";
+import cateAdd from '@/components/jobCategory/add.vue'
+import {Plus} from "@element-plus/icons-vue";
 const TeleportContainer = getTeleport();
 export default defineComponent({
   name: "projectEdit",
   computed: {
+    Plus() {
+      return Plus
+    },
     jobCateTree() {
       return store.getters.jobCateTree
     },
@@ -224,7 +231,7 @@ export default defineComponent({
       return store.state.nodeError.nodeError
     }
   },
-  components: {CustomHeader, TeleportContainer, nodeError},
+  components: {CustomHeader, TeleportContainer, nodeError, cateAdd},
   provide() {
     return {
       onSelectNode: this.onSelectNode,
@@ -236,6 +243,7 @@ export default defineComponent({
   },
   data() {
     return {
+      showAddCate: false,
       nodeLib: nodeLib.map(i => ({...i, show: true})),
       allNodes: nodeLib.reduce((r, i) => r.concat(i.nodes), []), // 所有节点配置
       graph: null,
@@ -246,7 +254,7 @@ export default defineComponent({
       nodeList: [], // 节点配置列表
       jobForm: {
         jobName: '',
-        categoryId: 0,
+        categoryId: '',
         jobStatus: 'OFFLINE',
         publicStatus: 0,
       },

+ 0 - 6
src/views/sqlInstance/list.vue

@@ -340,12 +340,6 @@ const onCheckError = instance => {
 <style lang="scss">
 .page-instance-list {
 }
-.instance-err-dialog {
-  .el-dialog__body {
-    max-height: 600px;
-    padding: 20px 10px;
-  }
-}
 .sql-instance-detail {
   .el-dialog__body {
     max-height: 860px;