Procházet zdrojové kódy

子表连续扫码功能

yangfan před 2 měsíci
rodič
revize
d7d00d0c14

+ 59 - 0
src/api/wordTep.js

@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+const api = '/api'
+const esApi = '/es-api'
+// 获取分类列表
+export const getWordTepCateList = (data) => {
+  return request({
+    url: api + '/system/template/cate/list',
+    method: 'get',
+    data
+  })
+}
+// 添加分类
+export const getWordTepCateAdd = (params) => {
+  return request({
+    url: api + '/system/template/cate/save',
+    method: 'post',
+    data: params
+  })
+}
+// 删除分类
+export const getWordTepCateDelete = (params) => {
+  return request({
+    url: api + '/system/template/cate/remove',
+    method: 'post',
+    data: params
+  })
+}
+// 获取详细列表
+export const getWordTepCateInfo = (params) => {
+  return request({
+    url: api + '/system/template/list',
+    method: 'get',
+    params
+  })
+}
+// 删除功能
+export const WordTepDelete = (params) => {
+  return request({
+    url: api + '/system/template/remove',
+    method: 'POST',
+    data: params
+  })
+}
+
+// 删除功能
+export const WordTepSave = (params) => {
+  return request({
+    url: api + '/system/template/save',
+    method: 'POST',
+    data: params
+  })
+}
+// 上传ES
+export const WordTepEsSave = (id) => {
+  return request({
+    url: esApi + `/es/init/file/v3/${id}`,
+    method: 'get'
+  })
+}

+ 38 - 7
src/components/ColumnDesign/index.vue

@@ -497,6 +497,28 @@
                   <el-form-item label="开启二维码">
                     <el-switch v-model="columnData.isQrcode" :active-value="1" :inactive-value="0"></el-switch>
                   </el-form-item>
+                  <el-form-item label="word模板">
+                    <div class="">
+                      <el-switch v-model="columnData.word.isWord" :active-value="1" :inactive-value="0"></el-switch>
+                      <template v-if="columnData.word.isWord">
+                        <div class="flex">
+                          <div>
+                            <el-input v-model="columnData.word.wordTitle" placement="导出标签"></el-input>
+                          </div>
+
+                          <div>
+                            <el-button @click="wordShow = true" style="width: 80px">选择模板</el-button>
+                          </div>
+                        </div>
+                        <vxe-modal title="word模板" v-model="wordShow" width="80%" height="70%">
+                          <template #default>
+                            <a href="info.docx" download style="font-size: 12px">下载实例模板</a>
+                            <wordTep style="padding: 10px" :is-compoent="true" @getTep="getTep" />
+                          </template>
+                        </vxe-modal>
+                      </template>
+                    </div>
+                  </el-form-item>
                   <el-divider>分页设置</el-divider>
                   <el-form-item label="列表分页">
                     <el-switch v-model="columnData.hasPage"></el-switch>
@@ -632,7 +654,7 @@ import rowPermission from '@/components/ColumnDesign/rowPermission.vue'
 import Scene from '@/components/ColumnDesign/scene.vue'
 import { getScene, sceneCreate, sceneDelete } from '@/api/onlineDev/visualDev'
 import authGroupSelector from '@/views/dataset/auth-group-selector.vue'
-
+import WordTep from '@/components/wordTep.vue'
 const getSearchType = (item) => {
   const jnpfKey = item.__config__.jnpfKey
   // 等于-1  模糊-2  范围-3
@@ -686,6 +708,11 @@ const defaultColumnData = {
     headerFontSize: 12,
     bodyFontSize: 12
   },
+  word: {
+    isWord: false,
+    wordPath: '',
+    wordTitle: '导出标签'
+  },
   gridInfoStyle: {
     width: 30
   }, // 左侧表格 右侧详情配置
@@ -735,7 +762,7 @@ const defaultColumnData = {
 }
 export default {
   name: 'columnDesign',
-  components: { authGroupSelector, Scene, AmisSdk, WebDesign, Dataset, JsonEditor, CardTemplate, rowPermission },
+  components: { authGroupSelector, Scene, AmisSdk, WebDesign, Dataset, JsonEditor, CardTemplate, rowPermission, WordTep },
   props: {
     conf: {
       type: Object,
@@ -961,7 +988,8 @@ export default {
       styleShow: false,
       classJson: {},
       classType: '',
-      previewImgShow: false
+      previewImgShow: false,
+      wordShow: false
     }
   },
   filters: {
@@ -1215,10 +1243,10 @@ export default {
         this.$set(this.columnData, 'searchList', this.searchOptions)
       }
       // else {
-        // this.columnData.searchList = this.searchOptions.map((aItem) => {
-        //   const correspondingBItem = this.columnData.searchList.find((bItem) => bItem.__vModel__ === aItem.propId)
-        //   return correspondingBItem ? { ...aItem, ...correspondingBItem } : aItem
-        // })
+      // this.columnData.searchList = this.searchOptions.map((aItem) => {
+      //   const correspondingBItem = this.columnData.searchList.find((bItem) => bItem.__vModel__ === aItem.propId)
+      //   return correspondingBItem ? { ...aItem, ...correspondingBItem } : aItem
+      // })
       // }
       if (!this.columnData.columnList.length) {
         this.$set(this.columnData, 'columnList', this.columnOptions)
@@ -1555,6 +1583,9 @@ export default {
           this.scenes.splice(index, 1)
         })
         .catch(() => {})
+    },
+    getTep(e) {
+      this.columnData.word.wordPath = e.path
     }
   }
 }

+ 12 - 4
src/components/Generator/components/NewInput/index.vue

@@ -1,8 +1,9 @@
 <template>
   <div class="JNPFInput">
     <div class="JNPFInput-input">
-      <el-input style="width: 99% !important" v-model="innerValue" v-bind="$attrs" v-on="$listeners" @change="getChange"></el-input>
+      <el-input style="width: 99% !important" v-model="innerValue" :debounce="2000" v-bind="$attrs" @change="getChange"></el-input>
     </div>
+    {{ $attrs.isScan }}
     <div v-if="$attrs.isScan" class="JNPFInput-scan">
       <svg data-v-217a6391="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="rgba(24,144,255,1)">
         <path data-v-217a6391="" d="M15 3H21V8H19V5H15V3ZM9 3V5H5V8H3V3H9ZM15 21V19H19V16H21V21H15ZM9 21H3V16H5V19H9V21ZM3 11H21V13H3V11Z"></path>
@@ -33,11 +34,18 @@ export default {
       this.innerValue = val
     }
   },
-  mounted() {},
+  mounted() {
+    document.onkeydown = (e) => {
+      if (e.keyCode === 13 && this.$attrs.isScan) {
+        console.log('扫码枪事件回车')
+        this.$emit('change', val)
+      }
+    }
+  },
   methods: {
     getChange(val) {
-      console.log(this.$attrs)
-      if (this.$attrs.propsUrl) {
+      console.log(this.$attrs.isScan)
+      if (this.$attrs.propsUrl && val && !this.$attrs.isScan) {
         this.$emit('change', val)
       }
     }

+ 7 - 2
src/components/Generator/parser/Parser.vue

@@ -393,6 +393,11 @@ function setOptions(i, itemConfig, formConfCopy) {
     })
   } else {
     getAPIData(i.__slot__, itemConfig.propsUrl, itemConfig.ApiParams, formConfCopy.fields, '', itemConfig.apiProps).then((res) => {
+      if (res.length < 1) {
+        this.$message.warning('未匹配到扫码数据')
+        return
+      }
+      this.$message.success('匹配到扫码数据')
       if (i.__config__.jnpfKey == 'comInput' && res.length > 0) {
         // this.$set(i.__slot__, 'options', res)
         const data = res[0]
@@ -713,8 +718,8 @@ export default {
       const rowData = rowRes.data.data
       // 获取当前表格信息
       const rowDetailData = await detail(this.modelId, rowData.dbLinkId)
-      localStorage.setItem("BROWSER_associationData", JSON.stringify(rowDetailData.associationData));
-      localStorage.setItem("BROWSER_associationColumnDict", JSON.stringify(rowDetailData.associationColumnDict));
+      localStorage.setItem('BROWSER_associationData', JSON.stringify(rowDetailData.associationData))
+      localStorage.setItem('BROWSER_associationColumnDict', JSON.stringify(rowDetailData.associationColumnDict))
 
       function isEmptyObject(obj) {
         return Object.keys(obj).length === 0

+ 510 - 0
src/components/wordTep.vue

@@ -0,0 +1,510 @@
+<template>
+  <div class="dataset-list">
+    <div class="category-list">
+      <div class="btns">
+        <el-button size="small" type="primary" icon="el-icon-edit" @click="showCategory = true">编辑分类</el-button>
+        <el-button size="small" type="success" icon="el-icon-plus" @click="onEditCategory(null)">添加分类</el-button>
+      </div>
+      <!--      <el-input-->
+      <!--        v-model="categoryKey" size="small" style="margin-bottom: 20px" @input="onSearchCategory" placeholder="搜索分类"-->
+      <!--      ></el-input>-->
+      <el-menu :default-active="nowCategoryId" @select="onSelectCategory">
+        <el-menu-item :index="0">
+          <div class="name" style="flex: 1">全部分类</div>
+        </el-menu-item>
+        <template v-for="category in categoryList">
+          <el-menu-item :key="category.id" :index="category.id">
+            <div class="name" style="flex: 1">{{ category.name }}</div>
+          </el-menu-item>
+        </template>
+      </el-menu>
+    </div>
+    <div class="JNPF-common-layout-center">
+      <div class="my-menu flex flex-between" style="margin-bottom: 10px">
+        <div style="display: flex">
+          <el-input size="mini" v-model="keyword" placeholder="请输入关键词查询" clearable />
+          <el-button style="margin-left: 10px" size="mini" type="primary" icon="el-icon-search" @click="initData()"> 查询 </el-button>
+          <el-button style="margin-left: 10px" size="mini" icon="el-icon-refresh-right" @click="reset()"> 重置 </el-button>
+        </div>
+        <el-button type="success" size="mini" @click="onEditWordTmp(null)">新增</el-button>
+        <!--        <el-button type="success" size="mini" @click="addOrUpdateHandle('',2)">新增</el-button>-->
+      </div>
+      <div class="JNPF-common-layout-main JNPF-flex-main">
+        <el-table
+          :data="flowEngineList"
+          ref="JNPFTable"
+          class="JNPF-common-table"
+          :border="true"
+          size="small"
+          height="calc(100% - 55px)"
+          row-key="id"
+          :tree-props="{ children: 'children', hasChildren: '' }"
+          default-expand-all
+          element-loading-text="加载中"
+        >
+          <el-table-column type="index" width="50" label="序号" align="center" />
+          <el-table-column prop="name" label="模版名称" show-overflow-tooltip min-width="200"></el-table-column>
+          <el-table-column prop="cateName" label="所属分类" width="200" />
+          <el-table-column prop="path" label="模版文件" width="200">
+            <template slot-scope="scope">
+              <span @click="imgOpenClick(scope.row.path)">{{ scope.row.path }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="trans2es" label="Es状态" width="120">
+            <template slot-scope="scope">
+              <span v-if="scope.row.trans2es == 1">正常文件</span>
+              <span v-else-if="scope.row.trans2es == 2">url==null</span>
+              <span v-else-if="scope.row.trans2es == 3">不能解压的压缩文件</span>
+              <span v-else-if="scope.row.trans2es == 4">localOssProcessor文件不存在</span>
+              <span v-else-if="scope.row.trans2es == 5">tika解析异常</span>
+              <span v-else-if="scope.row.trans2es == 6">压缩包文件</span>
+              <span v-else>文件待入库</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="createUser" label="创建人" width="120" />
+          <el-table-column prop="createTime" label="创建时间" width="120" />
+          <el-table-column prop="updateUser" label="修改人" width="120" />
+          <el-table-column prop="updateTime" label="最后修改时间" width="120" />
+          <el-table-column label="操作" fixed="right" width="250">
+            <template slot-scope="scope" v-if="!scope.row.top">
+              <template v-if="isCompoent">
+                <el-button size="mini" type="primary" plain @click="setTep(scope.row)">使用</el-button>
+              </template>
+              <template v-else>
+                <el-button size="mini" type="primary" plain @click="getEsWordTmp(scope.row.id)">上传到ES</el-button>
+              </template>
+
+              <el-button size="mini" type="primary" plain @click="onEditWordTmp(scope.row)">编辑</el-button>
+              <el-button size="mini" type="warning" plain class="JNPF-table-delBtn" @click="handleDel(scope.row.id)" :disabled="false"> 删除 </el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <el-pagination
+          style="text-align: right; margin-top: 10px"
+          @size-change="settlementSizeChange"
+          @current-change="settlementCurrentChange"
+          :current-page="page"
+          :page-sizes="[3, 5, 10, 20, 30, 40, 50]"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total"
+          :page-size="limit"
+        ></el-pagination>
+      </div>
+    </div>
+    <el-dialog :visible.sync="showEditCategory" title="编辑分类" append-to-body width="400px">
+      <el-form size="mini" label-width="80px">
+        <el-form-item label="分类名">
+          <el-input v-model="addName"></el-input>
+        </el-form-item>
+      </el-form>
+      <el-button size="mini" type="primary" @click="onEditCategoryConfirm" style="width: 100px; margin: 30px auto 0; display: block"> 保存 </el-button>
+    </el-dialog>
+    <el-dialog :visible.sync="showCategory" title="分类列表" append-to-body>
+      <el-table size="mini" :data="categoryList" border row-key="id" default-expand-all :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
+        <el-table-column label="分类名" prop="name"></el-table-column>
+        <el-table-column label="分类id" prop="id"></el-table-column>
+        <el-table-column label="操作" width="200px">
+          <template slot-scope="scope">
+            <el-button size="mini" type="primary" plain @click="onEditCategory(scope.row)">编辑</el-button>
+            <el-button size="mini" type="danger" plain @click="onDelCategory(scope.row)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
+    <el-dialog :visible.sync="addVisible" :title="wordForm.id ? '编辑模版' : '添加模版'" append-to-body width="400px">
+      <el-form :model="wordForm" label-position="left" :rules="rules" label-width="100px" ref="addForm" size="mini">
+        <el-form-item label="模版名称" prop="name">
+          <el-input v-model="wordForm.name" placeholder="模版名称"></el-input>
+        </el-form-item>
+        <el-form-item label="所属分类" prop="cateId">
+          <el-select v-model="wordForm.cateId" @change="onChangeCategory(wordForm.cateId)" clearable filterable placeholder="请选择所属分类">
+            <el-option v-for="item in categoryList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="模版文件" prop="path">
+          <el-upload
+            :action="API_UPLOADURL + '/file/uploadFile'"
+            :headers="uploadHeaders"
+            :file-list="wordForm.fileList"
+            :on-success="handleSuccess"
+            :show-file-list="false"
+            :before-upload="beforeUpload"
+            :on-exceed="handleExceed"
+            :limit="1"
+          >
+            <el-button size="small" icon="el-icon-upload">点击上传</el-button>
+          </el-upload>
+          <template v-if="wordForm.fileList.length">
+            <transition-group class="el-upload-list el-upload-list el-upload-list--text" tag="ul" name="el-list">
+              <li class="el-upload-list__item is-success" v-for="(file, index) in wordForm.fileList" :key="file.fileId">
+                <a class="el-upload-list__item-name">
+                  <i class="el-icon-document"></i>
+                  {{ file.name }}
+                </a>
+                <label class="el-upload-list__item-status-label">
+                  <i class="el-icon-upload-success el-icon-circle-check"></i>
+                </label>
+                <i class="el-icon-close" @click="handleRemove(file, index)"></i>
+              </li>
+            </transition-group>
+          </template>
+        </el-form-item>
+      </el-form>
+      <el-button size="mini" type="primary" @click="onEditWordTepSub" style="width: 100px; margin: 30px auto 0; display: block"> 保存 </el-button>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getWordTepCateAdd, getWordTepCateDelete, getWordTepCateInfo, getWordTepCateList, WordTepDelete, WordTepEsSave, WordTepSave } from '@/api/wordTep'
+import { getToken } from '@/utils/auth'
+
+export default {
+  name: 'webDesign',
+  props: {
+    isCompoent: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      API_UPLOADURL: APP_CONFIG.API_UPLOADURL,
+      page: 1,
+      limit: 10,
+      total: 10,
+      flowEngineList: [],
+      categoryList: [],
+      keyword: '',
+      type: 1,
+      listLoading: false,
+      formVisible: false,
+      addVisible: false,
+      nowCategoryId: 0,
+      cateId: '',
+      addName: '',
+      addId: '',
+      categoryKey: '',
+      showEditCategory: false,
+      showCategory: false,
+      originHost: null,
+      wordForm: {
+        id: '',
+        name: '',
+        path: '',
+        cateId: '',
+        cateName: '',
+        fileList: []
+      },
+      uploadHeaders: { 'Blade-Auth': 'bearer ' + getToken() },
+      rules: {
+        name: [{ required: true, message: '请输入模版名称', trigger: 'blur' }],
+        cateId: [{ required: true, message: '请选择所属分类', trigger: 'change' }],
+        path: [{ required: true, message: '请上传模版文件', trigger: 'change' }]
+      }
+    }
+  },
+  created() {
+    this.initData()
+    this.originHost = document.location.origin
+  },
+  methods: {
+    initData() {
+      this.listLoading = true
+      getWordTepCateList().then((res) => {
+        this.categoryList = res.data.data.records
+      })
+      this.getListPage()
+    },
+    getListPage() {
+      let query = {
+        cateId: this.cateId,
+        current: this.page,
+        size: this.limit,
+        name: this.keyword
+      }
+      getWordTepCateInfo(query).then((res) => {
+        this.flowEngineList = res.data.data.records
+        this.page = res.data.data.current
+        this.limit = res.data.data.size
+        this.total = res.data.data.total
+        this.listLoading = false
+      })
+    },
+    // 每页数量
+    settlementSizeChange(val) {
+      this.page = 1
+      this.limit = val
+      this.getListPage()
+    },
+    // 当前页
+    settlementCurrentChange(val) {
+      this.page = val
+      this.getListPage()
+    },
+    reset() {
+      this.keyword = ''
+      this.initData()
+    },
+    handleDel(id) {
+      this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
+        type: 'warning'
+      })
+        .then(async () => {
+          const res = await WordTepDelete([id])
+          if (res.data.code === 200) {
+            this.$message({ type: 'success', message: res.data.msg })
+            this.initData()
+          }
+        })
+        .catch(() => {})
+    },
+    //分类切换
+    onSelectCategory(index) {
+      this.cateId = index === 0 ? '' : index
+      this.getListPage()
+    },
+    //添加分类
+    onEditCategory(category) {
+      if (!category) {
+        this.addName = ''
+        this.addId = ''
+      } else {
+        this.addName = category.name
+        this.addId = category.id
+      }
+      this.showEditCategory = true
+    },
+    //提交修改或添加
+    async onEditCategoryConfirm() {
+      if (!this.addName) return this.$message({ type: 'warning', message: '请填写分类名' })
+      const param = {
+        name: this.addName,
+        id: this.addId
+      }
+      const res = await getWordTepCateAdd(param)
+      if (res.data.code === 200) {
+        this.$message({ type: 'success', message: '保存成功' })
+        this.initData()
+        this.showEditCategory = false
+      }
+    },
+    //删除
+    onDelCategory(row) {
+      this.$confirm('确定删除此分类?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        getWordTepCateDelete([row.id])
+          .then((res) => {
+            this.$message({ type: 'success', message: '删除成功' })
+            this.initData()
+          })
+          .catch(() => {})
+      })
+    },
+    //分类搜索
+    onSearchCategory(k) {
+      this.categoryList = this.categoryList.filter((i) => i.fullName.includes(k))
+    },
+    //添加分类
+    onEditWordTmp(category) {
+      if (!category) {
+        this.wordForm = {
+          id: '',
+          name: '',
+          path: '',
+          cateId: '',
+          cateName: '',
+          fileList: []
+        }
+      } else {
+        this.wordForm = {
+          id: category.id,
+          name: category.name,
+          path: category.path,
+          cateId: category.cateId,
+          cateName: category.cateName,
+          fileList: [{ name: category.path, fileId: category.path, url: category.path }]
+        }
+      }
+      this.$nextTick(() => {
+        this.addVisible = true
+      })
+    },
+    beforeUpload(file) {
+      const unitNum = 1024 * 1024 * 500
+      let isRightSize = file.size < unitNum
+      if (!isRightSize) {
+        this.$message.error(`文件大小超过500MB`)
+      }
+      return isRightSize
+    },
+    handleSuccess(res, file, fileList) {
+      // 如果数组类型
+      if (res.code === 200) {
+        this.wordForm.fileList.push({ name: file.name, fileId: res.msg, url: res.msg })
+        this.wordForm.path = res.msg
+      } else {
+        fileList.filter((o) => o.uid != file.uid)
+        this.wordForm.fileList = []
+        this.$message({ message: '上传失败', type: 'error', duration: 1500 })
+      }
+    },
+    handleExceed(files, fileList) {
+      this.$message.warning(`当前限制最多可以上传1个文件`)
+    },
+    handleRemove(file, index) {
+      this.wordForm.fileList.splice(index, 1)
+      this.wordForm.path = ''
+    },
+    onChangeCategory(id) {
+      this.wordForm.cateName = this.categoryList.filter((i) => i.id === id)[0].name
+    },
+    onEditWordTepSub() {
+      const param = {
+        id: this.wordForm.id,
+        name: this.wordForm.name,
+        path: this.wordForm.path,
+        cateId: this.wordForm.cateId,
+        cateName: this.wordForm.cateName
+      }
+      this.$refs['addForm'].validate((valid) => {
+        if (valid) {
+          WordTepSave(param).then((res) => {
+            this.$message({ type: 'success', message: '操作成功' })
+            this.initData()
+            this.addVisible = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    getEsWordTmp(id) {
+      if (!id) return
+      WordTepEsSave(id).then((res) => {
+        if (res.data.code === 200) {
+          this.$message({ type: 'success', message: '操作成功' })
+          this.initData()
+        }
+      })
+    },
+    imgOpenClick(url) {
+      let Base64 = require('js-base64').Base64
+      let upUrl = Base64.encode(document.location.origin + '/' + url)
+      let str = `https://bi.platomix.net/fileview/onlinePreviewPublic?url=${upUrl}`
+      window.open(str, '_blank')
+    },
+    setTep(row) {
+      this.$emit('getTep', row)
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.dataset-list {
+  display: flex;
+  overflow: hidden;
+  height: 100%;
+  padding: 10px;
+  .btns {
+    margin: 10px 0;
+    display: flex;
+    justify-content: space-between;
+    .el-button {
+      width: 125px;
+    }
+  }
+  .category-list {
+    flex: 0 0 260px;
+    padding-top: 10px;
+    padding-right: 10px;
+    border-right: 1px solid #ccc;
+    overflow: hidden;
+    display: flex;
+    flex-direction: column;
+    .el-menu {
+      flex: 1;
+      overflow-y: auto;
+      .el-menu-item {
+        padding: 0 5px 0 10px;
+        display: flex;
+        align-items: center;
+        height: 50px;
+        line-height: 50px;
+        .name {
+          overflow: hidden;
+          white-space: nowrap;
+          text-overflow: ellipsis;
+        }
+      }
+    }
+  }
+  .main-wrapper {
+    flex: 1;
+    padding: 10px 10px 0;
+    overflow-y: auto;
+  }
+}
+.JNPF-flex-main {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+  -ms-flex-direction: column;
+  flex-direction: column;
+}
+.JNPF-common-layout-center {
+  padding-left: 10px;
+  -webkit-box-flex: 1;
+  -ms-flex: 1;
+  flex: 1;
+  height: 90%;
+  overflow: hidden;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+  -ms-flex-direction: column;
+  flex-direction: column;
+}
+.JNPF-common-search-box {
+  background: #fff;
+  -ms-flex-negative: 0;
+  flex-shrink: 0;
+  margin-bottom: 10px;
+  padding: 15px 10px 0;
+  position: relative;
+}
+.JNPF-common-search-box .el-form-item {
+  width: 100%;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  margin-bottom: 14px !important;
+}
+::v-deep .JNPF-common-search-box .el-form-item .el-form-item__content {
+  -webkit-box-flex: 1;
+  -ms-flex: 1;
+  flex: 1;
+}
+
+.JNPF-common-layout-center .JNPF-common-layout-main {
+  -webkit-box-flex: 1;
+  -ms-flex: 1;
+  flex: 1;
+  padding: 0 0 10px;
+  background-color: #fff;
+  height: 100%;
+  overflow: hidden;
+}
+
+:deep(.el-menu-item.is-active) {
+  color: #fff;
+}
+</style>

+ 2 - 2
src/utils/define.js

@@ -3,9 +3,9 @@
 // JAVA Cloud对应网关地址
 // const APIURl = 'http://192.168.0.103:8181'
 
-const url = 'https://windata.platomix.net' // 测试环境
+// const url = 'https://windata.platomix.net' // 测试环境
 // const url = 'https://api.bi.platomix.net' // 测试环境
-// const url = 'https://bi.platomix.net' // BI环境
+const url = 'https://bi.platomix.net' // BI环境
 // const url = 'http://60.190.98.244:8070' // 巨一环境
 // const url = 'https://miniapp.zhangmushiye.com/' // 樟木环境
 // const url = 'http://hr.cscec8st.com.cn:50021/' // 中建环境

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2 - 2
src/utils/request.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1583 - 1628
src/views/basic/dynamicModel/list/index.vue