hm před 2 měsíci
rodič
revize
5cef67ae95

+ 1 - 1
.env.development

@@ -12,6 +12,6 @@ VUE_CLI_BABEL_TRANSPILE_MODULES = true
 
 # VUE_APP_BASE_API  = 'http://10.1.161.127:8080'
 # VUE_APP_BASE_API  = 'http://10.1.161.183:6661'
-VUE_APP_BASE_API  = 'http://192.168.136.32:6661'
+VUE_APP_BASE_API  = 'http://192.168.136.188:6661'
 
 # VUE_APP_BASE_API  = 'http://10.1.162.158:6661'

+ 34 - 0
src/api/unified-access/access-feedback.js

@@ -0,0 +1,34 @@
+import request from '@/utils/request'
+// 获取接入反馈列表
+export function getTabAccessFeedbackList (query) {
+  return request({
+    url: '/web/tab-access-feedback/getTabAccessFeedbackList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 添加接入基本准备
+export function addFirstStepTabAccessReady (data) {
+  return request({
+    url: '/web/tab-access-ready/insertTabAccessReady',
+    method: 'post',
+    data: data
+  })
+}
+
+export function updateTabAccessReadyById (data) {
+  return request({
+    url: '/web/tab-access-ready/updateTabAccessReadyById',
+    method: 'post',
+    data: data
+  })
+}
+
+
+export function delFirstStepTabAccessReady (id) {
+  return request({
+    url: `/web/tab-access-ready/falseDeleteTabAccessAndReadyById/${id}`,
+    method: 'post',
+  })
+}

+ 28 - 39
src/views/index.vue

@@ -6,12 +6,11 @@
         <div class="module-content">
           <!-- 每个系统卡片 -->
           <el-card class="system-card" v-for="(card, index) in item.childes" :key="card.id"
-          @click.native="systemUrlClick(card.systemUrl)" 
-          :style="{
+            @click.native="systemUrlClick(card.systemUrl)" :style="{
         backgroundImage: `url(${resolveImage('1.png')})`
 
       }">
-            <div class="system-card-content" >
+            <div class="system-card-content">
               <!-- <el-icon :size="24">{{ card.icon }}</el-icon> -->
               <div class="system-title">{{ card.systemName }}</div>
             </div>
@@ -37,20 +36,22 @@
           <div class="announcement-bg">
             公示公告 <img src="../assets/img/装饰.png" alt="" />
           </div>
-          <el-button type="primary" round size="mini">进入公告</el-button>
+          <el-button type="primary" round size="mini" @click="goNotice">进入公告</el-button>
         </div>
         <div class="announcement-list">
-          <div v-for="(item, idx) in announcements" :key="idx" class="announcement-item"
+          <div v-for="(item) in announcements" :key="item.noticeId" class="announcement-item"
             :class="{ highlighted: item.show === true }">
             <div class="announcement-item-header" @click="announcementChange(item)">
-              <el-tooltip class="item" effect="dark" :content="item.title" placement="left-start">
+              <el-tooltip class="item" effect="dark" :content="item.noticeTitle" placement="left-start">
                 <div class="announcement-title" :class="{ highlighted: item.show === true }">
-                  {{ item.title }}
+                  {{ item.noticeTitle }}
                 </div>
               </el-tooltip>
-              <div class="announcement-date">{{ item.date }}</div>
+              <div class="announcement-date">{{ item.updateTime }}</div>
+            </div>
+            <div class="announcement-qs" v-if="item.show">
+              <div v-html="item.noticeContent"> </div>
             </div>
-            <div class="announcement-qs" v-if="item.show">{{ item.qs }}</div>
           </div>
         </div>
       </div>
@@ -59,6 +60,8 @@
 </template>
 
 <script>
+// 公示公告
+import { listNotice } from "@/api/system/notice";
 import { getTabSystemOtherList } from "@/api/index.js";
 export default {
   name: "Index",
@@ -66,34 +69,7 @@ export default {
     return {
       systems: [],
 
-      announcements: [
-        {
-          title: "系统平台已接入,客户端软件登录后下载;",
-          qs: "2024-12-18系统平台已接入,客户端软件登录后下载:系统平台已接入,客户端系统平台已接入客",
-          date: "2024-01-25",
-          show: false,
-        },
-        {
-          title: "资源管理系统",
-          qs: "2024-12-18系统平台已接入,客户端软件登录后下载:系统平台已接入,客户端系统平台已接入客",
-          date: "2024-01-25",
-          show: false,
-        },
-        {
-          title: "邮件系统",
-          qs: "2024-12-18系统平台已接入,客户端软件登录后下载:系统平台已接入,客户端系统平台已接入客",
-          date: "2024-01-25",
-          show: false,
-        },
-        { title: "邮件系统1", date: "2024-01-25", show: false },
-        { title: "邮件系统2", date: "2024-01-25", show: false },
-        { title: "邮件系统3", date: "2024-01-25", show: false },
-        { title: "邮件系统4", date: "2024-01-25", show: false },
-        { title: "邮件系统5", date: "2024-01-25", show: false },
-        { title: "邮件系统6", date: "2024-01-25", show: false },
-        { title: "邮件系统7", date: "2024-01-25", show: false },
-        { title: "邮件系统8", date: "2024-01-25", show: false },
-      ],
+      announcements: [],
     };
   },
   methods: {
@@ -111,7 +87,7 @@ export default {
     },
     announcementChange (item) {
       this.announcements.forEach((element) => {
-        if (element.title === item.title) {
+        if (element.noticeId === item.noticeId) {
           element.show = !element.show;
         }
       });
@@ -122,9 +98,21 @@ export default {
 
     },
     systemUrlClick (url) {
-      console.log(url,'url')
+      console.log(url, 'url')
 
       window.open(url)
+    },
+    getListNotice () {
+      listNotice({ noticeType: 2 }).then(response => {
+        response.rows.forEach(item => {
+          item.show = false
+
+        })
+        this.announcements = response.rows;
+      });
+    },
+    goNotice () {
+      this.$router.push('/system/notice')
     }
   },
 
@@ -132,6 +120,7 @@ export default {
   created () { },
   mounted () {
     this.getList();
+    this.getListNotice();
   },
 };
 </script>

+ 39 - 86
src/views/login.vue

@@ -10,118 +10,59 @@
           <!-- <el-button type="primary" round size="mini">进入公告</el-button> -->
         </div>
         <div class="announcement-list">
-          <div
-            v-for="(item, idx) in announcements"
-            :key="idx"
-            class="announcement-item"
-            :class="{ highlighted: item.show === true }"
-          >
-            <div
-              class="announcement-item-header"
-              @click="announcementChange(item)"
-            >
-              <el-tooltip
-                class="item"
-                effect="dark"
-                :content="item.title"
-                placement="left-start"
-              >
-                <div
-                  class="announcement-title"
-                  :class="{ highlighted: item.show === true }"
-                >
-                  {{ item.title }}
+          <div v-for="item in announcements" :key="item.noticeId" class="announcement-item"
+            :class="{ highlighted: item.show === true }">
+            <div class="announcement-item-header" @click="announcementChange(item)">
+              <el-tooltip class="item" effect="dark" :content="item.noticeTitle" placement="left-start">
+                <div class="announcement-title" :class="{ highlighted: item.show === true }">
+                  {{ item.noticeTitle }}
                 </div>
               </el-tooltip>
-              <div class="announcement-date">{{ item.date }}</div>
+              <div class="announcement-date">{{ item.updateTime }}</div>
+            </div>
+            <div class="announcement-qs" v-if="item.show">
+              <div v-html="item.noticeContent"></div>
             </div>
-            <div class="announcement-qs" v-if="item.show">{{ item.qs }}</div>
           </div>
         </div>
       </div>
-      <el-form
-        ref="loginForm"
-        :model="loginForm"
-        :rules="loginRules"
-        class="login-form"
-      >
+      <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
         <h3 class="title">用户登录</h3>
         <el-form-item prop="username">
-          <el-input
-            v-model="loginForm.username"
-            type="text"
-            auto-complete="off"
-            placeholder="账号"
-          >
-            <svg-icon
-              slot="prefix"
-              icon-class="user"
-              class="el-input__icon input-icon"
-            />
+          <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
+            <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
           </el-input>
         </el-form-item>
         <el-form-item prop="password">
-          <el-input
-            v-model="loginForm.password"
-            type="password"
-            auto-complete="off"
-            placeholder="密码"
-            @keyup.enter.native="handleLogin"
-          >
-            <svg-icon
-              slot="prefix"
-              icon-class="password"
-              class="el-input__icon input-icon"
-            />
+          <el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码"
+            @keyup.enter.native="handleLogin">
+            <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
           </el-input>
         </el-form-item>
         <el-form-item prop="code" v-if="captchaEnabled">
-          <el-input
-            v-model="loginForm.code"
-            auto-complete="off"
-            placeholder="验证码"
-            style="width: 63%"
-            @keyup.enter.native="handleLogin"
-          >
-            <svg-icon
-              slot="prefix"
-              icon-class="validCode"
-              class="el-input__icon input-icon"
-            />
+          <el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 63%"
+            @keyup.enter.native="handleLogin">
+            <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
           </el-input>
           <div class="login-code">
             <img :src="codeUrl" @click="getCode" class="login-code-img" />
           </div>
         </el-form-item>
-        <el-checkbox
-          v-model="loginForm.rememberMe"
-          style="margin: 0px 0px 25px 0px"
-          >记住密码</el-checkbox
-        >
+        <el-checkbox v-model="loginForm.rememberMe" style="margin: 0px 0px 25px 0px">记住密码</el-checkbox>
         <el-form-item style="width: 100%">
-          <el-button
-            round
-            :loading="loading"
-            size="medium"
-            type="primary"
-            style="width: 100%"
-            @click.native.prevent="handleLogin"
-          >
+          <el-button round :loading="loading" size="medium" type="primary" style="width: 100%"
+            @click.native.prevent="handleLogin">
             <span v-if="!loading">登 录</span>
             <span v-else>登 录 中...</span>
           </el-button>
           <div style="float: right" v-if="register">
-            <router-link class="link-type" :to="'/register'"
-              >立即注册</router-link
-            >
+            <router-link class="link-type" :to="'/register'">立即注册</router-link>
           </div>
         </el-form-item>
         <el-form-item prop="">
           <div>
-            <el-button type="text">数字登录证书</el-button
-            ><el-button type="text">短信验证码登录</el-button
-            ><el-button type="text">邮件验证码登录</el-button
-            ><el-button type="text">微信登录</el-button>
+            <el-button type="text">数字登录证书</el-button><el-button type="text">短信验证码登录</el-button><el-button
+              type="text">邮件验证码登录</el-button><el-button type="text">微信登录</el-button>
           </div>
         </el-form-item>
       </el-form>
@@ -130,13 +71,15 @@
     <div class="el-login-footer">
       <p>版权所有 上海市疾病预防控制中心</p>
       <p>地址:上海市中申虹路1509号</p>
-      <p>电话:021-62758710  邮编:200336</p>
+      <p>电话:021-62758710 邮编:200336</p>
       <p>提醒:本系统建议采用IE11或 Google chrome(谷歌)或火狐或奇安信的测览雅</p>
     </div>
   </div>
 </template>
 
 <script>
+// 公示公告
+import { listNotice } from "@/api/system/notice";
 import { getCodeImg } from "@/api/login";
 import Cookies from "js-cookie";
 import { encrypt, decrypt } from "@/utils/jsencrypt";
@@ -209,11 +152,20 @@ export default {
   created() {
     this.getCode();
     this.getCookie();
+    this.getListNotice()
   },
   methods: {
+    getListNotice () {
+      listNotice({ noticeType: 2 }).then(response => {
+        response.rows.forEach(item => {
+          item.show = false
+        })
+        this.announcements = response.rows;
+      });
+    },
     announcementChange(item) {
       this.announcements.forEach((element) => {
-        if (element.title === item.title) {
+        if (element.noticeId === item.noticeId) {
           element.show = !element.show;
         }
       });
@@ -270,6 +222,7 @@ export default {
         }
       });
     },
+    
   },
 };
 </script>

+ 1 - 1
src/views/unified-access/access-feedback/dialog/ETLAndTableTools.vue

@@ -2,7 +2,7 @@
   <el-row >
     <el-col :span="6" style="border-right: 1px solid #000; padding-right: 20px">
       <!-- 顶部工具栏 -->
-      <el-form class="toolbar" :model="headerFormData">
+      <el-form  :model="headerFormData" :label-position="'right'" label-width="auto">
         <el-form-item label="数据集名称">
           <el-input
             v-model="headerFormData.datasetName"

+ 299 - 93
src/views/unified-access/access-feedback/dialog/FeedbackDialog.vue

@@ -12,102 +12,109 @@
             <el-input v-model="formData.persion" placeholder="请输入交换需求联系人">
             </el-input>
           </el-form-item>
-          <el-form-item label="联系方式" prop="contact">
-            <el-input v-model="formData.contact" placeholder="请输入联系方式">
+          <el-form-item label="联系方式" prop="phone">
+            <el-input v-model="formData.phone" placeholder="请输入联系方式">
             </el-input>
           </el-form-item>
         </el-form>
         <!-- 数据提供方所属单位部门 -->
-        <el-table :data="tableData" style="width: 100%" max-height="250">
-          <el-table-column prop="name" label="数据提供方所属单位部门" width="">
+        <el-table :data="firstStep.offers" style="width: 100%" max-height="250">
+          <el-table-column prop="id" label="数据提供方所属单位部门" width="">
             <template slot-scope="scope">
-              <el-select v-model="scope.row.input" placeholder="请选择数据提供方所属单位部门">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+              <el-select v-model="scope.row.accessId" placeholder="请选择数据提供方所属单位部门"
+                @change="deptChange(scope.$index, scope.row.accessId, scope.$index)">
+                <el-option v-for="item in offersOptions" :key="item.id" :label="item.dept" :value="item.id">
                 </el-option>
               </el-select>
             </template>
           </el-table-column>
-          <el-table-column prop="state" label="数据提供方系统名称" width="">
+          <el-table-column prop="system" label="数据提供方系统名称" width="">
+            <template slot-scope="scope">
+              <el-input disabled v-model="scope.row.system" placeholder="请输入数据提供方系统名称"></el-input>
+            </template>
+          </el-table-column>
+          <el-table-column prop="readyIp" label="数据提供方IP" width="">
             <template slot-scope="scope">
-              <el-input v-model="formData.input" placeholder="请输入数据提供方系统名称"></el-input>
+              <el-select v-model="scope.row.readyIp" placeholder="请选择IP"
+                @change="iPChange(scope.$index, scope.row.readyIp, scope.row)">
+                <el-option v-for="item in scope.row.ipOptions" :key="item.ip" :label="item.ip" :value="item.ip">
+                </el-option>
+              </el-select>
             </template>
           </el-table-column>
-          <el-table-column prop="city" label="数据提供方IP/端口" width="">
+          <el-table-column prop="readyPort" label="数据提供方端口" width="">
             <template slot-scope="scope">
-              <el-table :data="tableData" style="width: 100%" max-height="250" :show-header="false">
-                <el-table-column prop="name" label="IP" width="">
-                  <template :slot-scope="{ row }">
-                    <el-input v-model="row.input" placeholder="请输入数据提供方所属单位部门"></el-input>
-                  </template>
-                </el-table-column>
-                <el-table-column prop="state" label="端口" width="">
-                  <template :slot-scope="{ row }">
-                    <el-input v-model="row.input" placeholder="请输入端口"></el-input>
-                  </template>
-                </el-table-column>
-              </el-table>
+              <el-select v-model="scope.row.readyPort" placeholder="请选择端口">
+                <el-option v-for="item in scope.row.portOptions" :key="item.port" :label="item.port" :value="item.port">
+                </el-option>
+              </el-select>
             </template>
           </el-table-column>
 
           <el-table-column fixed="right" label="操作">
             <template #default="scope">
-              <el-button type="primary" size="small" @click.prevent="deleteRow(scope.$index)">
+              <el-button type="primary" size="small" @click.prevent="deleteRow(scope.$index, scope.row)">
                 删除
               </el-button>
             </template>
           </el-table-column>
         </el-table>
         <el-button type="primary" plain class="mt-4" style="width: 100%" icon="el-icon-plus"
-          @click="onAddItem"></el-button>
+          @click="onAddOffersItem"></el-button>
 
         <!-- 数据接收方所属单位部门 -->
-        <el-table :data="tableData" style="width: 100%" max-height="250">
+        <el-table :data="firstStep.access" style="width: 100%" max-height="250">
           <el-table-column prop="name" label="数据接收方所属单位部门" width="">
             <template slot-scope="scope">
-              <el-select v-model="scope.row.input" placeholder="请选择数据接收方所属单位部门">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+              <el-select v-model="scope.row.accessId" @change="
+    accessDeptChange(scope.$index, scope.row.accessId, scope.$index)
+    " placeholder="请选择数据接收方所属单位部门">
+                <el-option v-for="item in offersOptions" :key="item.id" :label="item.dept" :value="item.id">
                 </el-option>
               </el-select>
             </template>
           </el-table-column>
-          <el-table-column prop="state" label="数据接收方系统名称" width="">
+          <el-table-column prop="system" label="数据接收方系统名称" width="">
+            <template slot-scope="scope">
+              <el-input v-model="scope.row.system" disabled placeholder="请输入数据接收方系统名称"></el-input>
+            </template>
+          </el-table-column>
+          <el-table-column prop="readyIp" label="数据接收方IP" width="">
             <template slot-scope="scope">
-              <el-input v-model="scope.row.input" placeholder="请输入数据接收方系统名称"></el-input>
+              <el-select v-model="scope.row.readyIp" placeholder="请选择IP" @change="
+    accessIPChange(scope.$index, scope.row.readyIp, scope.row)
+    ">
+                <el-option v-for="item in scope.row.accessIpOptions" :key="item.ip" :label="item.ip" :value="item.ip">
+                </el-option>
+              </el-select>
             </template>
           </el-table-column>
-          <el-table-column prop="city" label="数据接收方IP/端口" width="">
+          <el-table-column prop="readyPort" label="数据接收方端口" width="">
             <template slot-scope="scope">
-              <el-table :data="tableData" style="width: 100%" max-height="250" :show-header="false">
-                <el-table-column prop="name" label="IP" width="">
-                  <template :slot-scope="{ row, $index }">
-                    <el-input v-model="scope.row.input" placeholder="请输入数据提供方所属单位部门"></el-input>
-                  </template>
-                </el-table-column>
-                <el-table-column prop="state" label="端口" width="">
-                  <template :slot-scope="{ row }">
-                    <el-input v-model="row.input" placeholder="请输入端口"></el-input>
-                  </template>
-                </el-table-column>
-              </el-table>
+              <el-select v-model="scope.row.readyPort" placeholder="请选择端口">
+                <el-option v-for="item in scope.row.accessPortOptions" :key="item.port" :label="item.port"
+                  :value="item.port">
+                </el-option>
+              </el-select>
             </template>
           </el-table-column>
 
           <el-table-column fixed="right" label="操作">
             <template #default="scope">
-              <el-button type="primary" size="small" @click.prevent="deleteRow(scope.$index)">
+              <el-button type="primary" size="small" @click.prevent="deleteAccessRow(scope.$index, scope.row)">
                 删除
               </el-button>
             </template>
           </el-table-column>
         </el-table>
         <el-button type="primary" plain class="mt-4" style="width: 100%" icon="el-icon-plus"
-          @click="onAddItem"></el-button>
+          @click="onAccessAddItem"></el-button>
 
         <div class="titel">统一接入方式</div>
         <el-form :label-position="'left'" :model="formData" label-width="auto" style="width: 100%">
-          <el-form-item label="数据提供方式" class="textarea-row" prop="offerType">
+          <el-form-item label="数据提供方式" class="textarea-row" prop="dataOfferType">
             <div style="display: flex; align-items: center">
-              <el-radio-group v-model="formData.offerType">
+              <el-radio-group v-model="formData.dataOfferType">
                 <!-- <el-radio :label="1">库表接口工具</el-radio>
                 <el-radio :label="2">六统一API</el-radio>
                 <el-radio :label="3">六统一KAFKA</el-radio>
@@ -120,9 +127,9 @@
                 style="width: 220px; margin-left: 30px"></el-input>
             </div>
           </el-form-item>
-          <el-form-item label="数据接收方式" prop="accessType">
+          <el-form-item label="数据接收方式" prop="dataAccessType">
             <div style="display: flex; align-items: center">
-              <el-radio-group v-model="formData.accessType">
+              <el-radio-group v-model="formData.dataAccessType">
                 <!-- <el-radio :label="1">库表接口工具</el-radio>
                 <el-radio :label="2">六统一API</el-radio>
                 <el-radio :label="3">六统一KAFKA</el-radio>
@@ -135,20 +142,20 @@
                 style="width: 220px; margin-left: 30px"></el-input>
             </div>
           </el-form-item>
-          <el-form-item label="审核意见" prop="maxRunTime">
-            <el-input type="textarea" :rows="4" v-model="formData.maxRunTime" placeholder="请输入审核意见">
+          <el-form-item label="审核意见" prop="auditDetail">
+            <el-input type="textarea" :rows="4" v-model="formData.auditDetail" placeholder="请输入审核意见">
             </el-input>
           </el-form-item>
           <el-row>
             <el-col :span="12">
-              <el-form-item label="审核人" prop="maxRunTime">
-                <el-input v-model="formData.maxRunTime" placeholder="请输入审核人">
+              <el-form-item label="审核人" prop="auditName">
+                <el-input v-model="formData.auditName" placeholder="请输入审核人">
                 </el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="审核时间" prop="maxRunTime">
-                <el-date-picker style="width: 100%" v-model="formData.value1" type="datetime" placeholder="请选择日期时间"
+              <el-form-item label="审核时间" prop="auditTime">
+                <el-date-picker style="width: 100%" v-model="formData.auditTime" type="datetime" placeholder="请选择日期时间"
                   format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss">
                 </el-date-picker>
               </el-form-item>
@@ -157,123 +164,126 @@
         </el-form>
       </el-tab-pane>
       <el-tab-pane label="02/4 数据基本表" :name="2">
-        <el-table :data="tableData" border style="width: 100%">
+        <el-table :data="secondStep" border style="width: 100%">
           <!-- 基本属性 -->
           <el-table-column label="基本属性" align="center">
-            <el-table-column prop="identifier" label="" align="center">
+            <el-table-column prop="check" label="" align="center">
               <template slot-scope="scope">
-                <el-checkbox v-model="scope.row.identifier"></el-checkbox>
+                <el-checkbox v-model="scope.row.check"></el-checkbox>
               </template>
             </el-table-column>
-            <el-table-column prop="identifier" label="序号/标识符" align="center" width="150">
+            <el-table-column prop="code" label="序号/标识符" align="center" width="150">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.code" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
-            <el-table-column prop="name" label="数据资源名称" align="center" width="150">
+            <el-table-column prop="dataMane" label="数据资源名称" align="center" width="150">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.dataMane" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
             <el-table-column prop="publishDate" label="发布日期" align="center" width="120">
               <template slot-scope="scope">
-                <el-date-picker v-model="scope.row.value1" type="date" placeholder="选择日期">
+                <el-date-picker v-model="scope.row.publishDate" type="date" placeholder="选择日期">
                 </el-date-picker>
               </template>
             </el-table-column>
             <el-table-column prop="formatType" label="格式类型" align="center" width="120">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.formatType" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
-            <el-table-column prop="dataSource" label="资源来源" align="center" width="120">
+            <el-table-column prop="resourceSource" label="资源来源" align="center" width="120">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.resourceSource" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
-            <el-table-column prop="dataSource" label="数据资源摘要" align="center" width="120">
+            <el-table-column prop="resourceAbstract" label="数据资源摘要" align="center" width="120">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.resourceAbstract" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
-            <el-table-column prop="dataSource" label="更新模式数据量" align="center" width="120">
+            <el-table-column prop="updateMode" label="更新模式数据量" align="center" width="120">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.updateMode" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
-            <el-table-column prop="dataSource" label="批次号频率" align="center" width="120">
+            <el-table-column prop="batch" label="批次号频率" align="center" width="120">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.batch" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
           </el-table-column>
 
           <!-- 数据源 -->
           <el-table-column label="数据源(数据提供方) 属性" align="center">
-            <el-table-column prop="sourceName" label="数据源上传方名称" align="center" width="200">
+            <el-table-column prop="offerDept" label="数据源上传方名称" align="center" width="200">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.offerDept" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
-            <el-table-column prop="sourceCode" label="上传方代码" align="center" width="120">
+            <el-table-column prop="offerDept" label="上传方代码" align="center" width="120">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.offerDept" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
-            <el-table-column prop="address" label="上传方地址" align="center" width="150">
+            <el-table-column prop="offerDept" label="上传方地址" align="center" width="150">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.offerDept" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
             <el-table-column prop="property" label="频率、统一接入时间配置" align="center" width="150">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.property" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
             <el-table-column prop="property" label="所属系统编号" align="center" width="150">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
-
+                <el-input v-model="scope.row.property" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
             <el-table-column prop="property" label="所属系统名称" align="center" width="150">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.property" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
           </el-table-column>
 
           <!-- 数据接收 -->
           <el-table-column label="数据接收(输出) 属性" align="center">
-            <el-table-column prop="outputCode" label="输出方名称" align="center" width="120">
+            <el-table-column prop="accessDept" label="输出方名称" align="center" width="120">
+              <template slot-scope="scope">
+                <el-input v-model="scope.row.accessDept" placeholder="请输入内容"></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column prop="outputFormat" label="输出方代码" align="center" width="120">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.outputFormat" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
-            <el-table-column prop="outputFormat" label="输出方代码" align="center" width="120"></el-table-column>
             <el-table-column prop="outputType" label="输出精度、统一接入时间配置" align="center" width="120">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.outputType" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
             <el-table-column prop="receiverName" label="输出方式" align="center" width="200">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.receiverName" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
             <el-table-column prop="receiverName" label="其它" align="center" width="200">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.receiverName" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
             <el-table-column prop="receiverName" label="所属系统编号" align="center" width="200">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.receiverName" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
             <el-table-column prop="receiverName" label="所属系统名称" align="center" width="200">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.input" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.receiverName" placeholder="请输入内容"></el-input>
               </template>
             </el-table-column>
           </el-table-column>
@@ -281,7 +291,6 @@
           <!-- 操作 -->
           <el-table-column label="操作" align="center" fixed="right" width="120">
             <template slot-scope="scope">
-
               <el-button type="text" size="small" @click="handleDelete(scope.row)">删除</el-button>
             </template>
           </el-table-column>
@@ -324,11 +333,11 @@
 
     <div slot="footer" class="dialog-footer">
       <el-button type="primary" @click="handleBackStep" v-if="activeName > 1">上一步</el-button>
-      <el-button type="primary" @click="handleNextStep" v-if="activeName < 5">下一步</el-button>
+      <el-button type="primary" @click="handleNextStep" v-if="activeName < 4">下一步</el-button>
 
       <el-button @click="handleCancel">取 消</el-button>
       <el-button type="primary" @click="handleConfirm">暂 存</el-button>
-      <el-button type="primary" @click="handleConfirm">确 定</el-button>
+      <el-button type="primary" @click="handleConfirm" v-if="activeName === 4">确 定</el-button>
     </div>
   </el-dialog>
 
@@ -362,6 +371,11 @@
 </template>
 
 <script>
+import {
+  addFirstStepTabAccessReady,
+  delFirstStepTabAccessReady,
+} from "@/api/unified-access/access-feedback.js";
+import { getTabAccessList } from "@/api/unified-access/access-party-maintenance.js";
 import MyTable from "@/components/MyTable";
 import MyForm from "@/components/MyForm";
 import ETLAndTableTools from "./ETLAndTableTools.vue";
@@ -392,9 +406,28 @@ export default {
       default: "90%",
     },
   },
-  dicts: ['access_method',],
+  dicts: ["access_method"],
   data () {
     return {
+      accessPortOptions: [],
+      accessIpOptions: [],
+      firstStep: {
+        code: "", //标识符
+        persion: "", //交换需求联系人
+        phone: "", //联系方式
+        offers: [], // 数据提供方
+        access: [], //数据接收方
+        auditDetail: "", //审核意见
+        auditName: "", //审核人
+        auditTime: "", //审核时间
+      },
+      secondStep: [],
+      thirdStep: [],
+      fourthStep: [],
+      offersOptions: [],
+      ipOptions: [],
+      portOptions: [],
+      basicDataTable: [], //数据基本表
       pagination: {
         currentPage: 1,
         pageSize: 10,
@@ -464,14 +497,187 @@ export default {
     },
   },
   mounted () {
+    this.getList();
   },
   methods: {
+    deleteAccessRow (index, row) {
+      if (row.accessId) {
+        this.firstStep.access.splice(index, 1);
+        delFirstStepTabAccessReady(row.accessId).then((res) => {
+          if (+res.code === 200) {
+            this.$message({
+              message: res.msg,
+              type: "success",
+            });
+          } else {
+            this.$message.error(res.msg);
+          }
+        });
+      } else {
+        this.firstStep.access.splice(index, 1);
+      }
+    },
+    deleteRow (index, row) {
+      if (row.accessId) {
+        this.firstStep.offers.splice(index, 1);
+        delFirstStepTabAccessReady(row.accessId).then((res) => {
+          if (+res.code === 200) {
+            this.$message({
+              message: res.msg,
+              type: "success",
+            });
+          } else {
+            this.$message.error(res.msg);
+          }
+        });
+      } else {
+        this.firstStep.offers.splice(index, 1);
+      }
+    },
+    onAddOffersItem () {
+      const newItem = {
+        accessId: "",
+        system: "",
+        readyIp: "",
+        readyPort: "",
+        ipOptions: [],
+        portOptions: []
+      };
+      this.firstStep.offers.push(newItem);
+      // this.firstStep.offers.push({});
+
+    },
+    deptChange (index, id, row) {
+      this.ipOptions = [];
+      this.offersOptions.forEach((item) => {
+        if (item.id === id) {
+          this.ipOptions = item.ip.map((item, index) => {
+            return {
+              id: index,
+              ip: item.ip,
+            };
+          });
+
+          this.ipOptions = this.ipOptions.filter(
+            (value, index, self) =>
+              index === self.findIndex((t) => t.ip === value.ip)
+          );
+
+          this.firstStep.offers[index].system = item.name;
+          this.firstStep.offers[index].dept = item.dept;
+
+        }
+      });
+      this.firstStep.offers[index].ipOptions = [...this.ipOptions];
+
+      this.firstStep.offers[index].readyIp = "";
+      this.firstStep.offers[index].readyPort = "";
+    },
+    iPChange (index, ip, row) {
+      this.portOptions = []
+      this.offersOptions.forEach((item) => {
+        if (item.id === row.accessId) {
+          this.portOptions = item.ip
+            .filter((item) => item.ip === row.readyIp)
+            .map((item, index) => {
+              return {
+                id: index,
+                port: item.port,
+              };
+            });
+        }
+      });
+      this.firstStep.offers[index].portOptions = this.portOptions;
+      this.firstStep.offers[index].readyPort = "";
+    },
+    onAccessAddItem () {
+      const newItem = {
+        accessId: "",
+        system: "",
+        readyIp: "",
+        readyPort: "",
+        ipOptions: [],
+        portOptions: []
+      };
+      this.firstStep.access.push(newItem);
+    },
+    accessDeptChange (index, id, row) {
+      this.ipOptions = [];
+      this.offersOptions.forEach((item) => {
+        if (item.id === id) {
+          this.ipOptions = item.ip.map((item, index) => {
+            return {
+              id: index,
+              ip: item.ip,
+            };
+          });
+          this.ipOptions = this.ipOptions.filter(
+            (value, index, self) =>
+              index === self.findIndex((t) => t.ip === value.ip)
+          );
+
+          this.firstStep.access[index].system = item.name;
+          this.firstStep.access[index].dept = item.dept;
+
+        }
+      });
+      this.firstStep.access[index].accessIpOptions = [...this.ipOptions];
+      this.firstStep.access[index].readyIp = "";
+      this.firstStep.access[index].readyPort = "";
+    },
+    accessIPChange (index, ip, row) {
+      this.portOptions = []
+      this.offersOptions.forEach((item) => {
+        if (item.id === row.accessId) {
+          this.portOptions = item.ip
+            .filter((item) => item.ip === row.readyIp)
+            .map((item, index) => {
+              return {
+                id: index,
+                port: item.port,
+              };
+            });
+        }
+      });
+      this.firstStep.access[index].accessPortOptions = this.portOptions;
+      this.firstStep.access[index].readyPort = "";
+    },
+    // 数据接入放管理列表
+    getList () {
+      getTabAccessList({}).then((res) => {
+        if (+res.code === 200) {
+          res.rows.forEach((item) => {
+            item.ip = JSON.parse(item.ip);
+          });
+          this.offersOptions = res.rows;
+        }
+      });
+    },
+
     onAddItem () { },
     handleClick (tab, event) {
       console.log(tab, event);
     },
     handleNextStep () {
-      this.activeName++;
+      if (this.title==='新增') {
+        if (this.activeName === 1) {
+          addFirstStepTabAccessReady({ ...this.firstStep }).then((res) => {
+            if (+res.code === 200) {
+              this.secondStep = res.data
+              this.activeName++;
+
+            }
+          });
+        }
+      } else if (this.title === '编辑') {
+        updateTabAccessReadyById({ ...this.firstStep }).then((res) => {
+          if (+res.code === 200) {
+            // this.secondStep = res.data
+            this.activeName++;
+          }
+        });
+      }
+    
     },
     handleBackStep () {
       this.activeName--;

+ 131 - 35
src/views/unified-access/access-feedback/index.vue

@@ -1,31 +1,86 @@
 <template>
   <el-container>
     <el-header height="60px" class="content-header">
-      <MyHeader :title="'统一接入反馈表'" :formData="headerFormData" @submit="handleHeaderFormSubmit"></MyHeader>
+      <MyHeader
+        :title="'统一接入反馈表'"
+        :formData="headerFormData"
+        @submit="handleHeaderFormSubmit"
+      ></MyHeader>
     </el-header>
     <el-container>
       <el-main>
-        <MyTableHeader :title="tableHeaderTitle" :tabs="tabs" :buttons="buttons" @tabClick="handleTabClick"
-          @buttonClick="handleButtonClick"></MyTableHeader>
+        <MyTableHeader
+          :title="tableHeaderTitle"
+          :tabs="tabs"
+          :buttons="buttons"
+          @tabClick="handleTabClick"
+          @buttonClick="handleButtonClick"
+        ></MyTableHeader>
 
         <MyTable :tableData="tableData" :formData="formData" :minWidth="400">
           <!-- 自定义操作按钮,传递 row 和 index -->
           <template #operation="{ row, index }">
-            <el-button size="mini" @click="handleView(row, index)" type="primary">查看</el-button>
-            <el-button size="mini" @click="handleEdit(row, index)" type="primary">编辑</el-button>
-            <el-button size="mini" @click="handleSubmit(row, index)" type="primary">提交</el-button>
-            <el-button size="mini" @click="handleRevoke(row, index)" type="primary">撤回</el-button>
-            <el-button size="mini" @click="handleCatalog(row, index)" type="primary">编目</el-button>
-            <el-button size="mini" @click="handleUpperChain(row, index)" type="primary">上链</el-button>
-            <el-button size="mini" @click="handleDelete(index)" type="primary">删除</el-button>
+            <el-button
+              size="mini"
+              @click="handleView(row, index)"
+              type="primary"
+              >查看</el-button
+            >
+            <el-button
+              size="mini"
+              @click="handleEdit(row, index)"
+              type="primary"
+              >编辑</el-button
+            >
+            <el-button
+              size="mini"
+              @click="handleSubmit(row, index)"
+              type="primary"
+              v-if="activeTabLable !== 2"
+              >提交</el-button
+            >
+            <el-button
+              size="mini"
+              @click="handleRevoke(row, index)"
+              type="primary"
+              v-if="activeTabLable !== 2"
+              >撤回</el-button
+            >
+            <el-button
+              size="mini"
+              @click="handleCatalog(row, index)"
+              type="primary"
+              >编目</el-button
+            >
+            <el-button
+              size="mini"
+              @click="handleUpperChain(row, index)"
+              type="primary"
+              v-if="activeTabLable !== 1"
+              >上链</el-button
+            >
+            <el-button size="mini" @click="handleDelete(index)" type="primary"
+              >删除</el-button
+            >
           </template>
         </MyTable>
-        <MyPagination :total="tableTotal" :page-size="pageSize" :current-page="currentPage"
-          @pageChange="pagi_changePage" @sizeChange="pagi_changeSize"></MyPagination>
+        <MyPagination
+          :total="tableTotal"
+          :page-size="pageSize"
+          :current-page="currentPage"
+          @pageChange="pagi_changePage"
+          @sizeChange="pagi_changeSize"
+        ></MyPagination>
       </el-main>
     </el-container>
     <div v-if="showDialog">
-      <FeedbackDialog v-model="showDialog" :title="title" :rowObj="rowObj" @confirm="getList" @before-close="">
+      <FeedbackDialog
+        v-model="showDialog"
+        :title="title"
+        :rowObj="rowObj"
+        @confirm="getList"
+        @before-close=""
+      >
       </FeedbackDialog>
     </div>
   </el-container>
@@ -45,8 +100,10 @@ export default {
     MyPagination,
     FeedbackDialog,
   },
-  data () {
+  data() {
     return {
+      rowObj: {},
+      title: "",
       uploadUrl: process.env.VUE_APP_BASE_API + "/web/tab-file-info/upload",
       showDialog: false,
       searchForm: {},
@@ -166,14 +223,15 @@ export default {
       currentPage: 1,
       treeSearchVal: "",
       tableHeaderTitle: "项目列表",
+      activeTabLable: "全部",
       tabs: [
-        { label: "全部", name: "全部", active: true },
+        { label: "全部", value: 1, active: true },
         {
           label: "正式运行",
-          name: "正式运行",
+          value: 2,
           active: false,
         },
-        { label: "申请反馈", name: "申请反馈", active: false },
+        { label: "申请反馈", value: 3, active: false },
       ],
       buttons: [
         {
@@ -216,8 +274,8 @@ export default {
 
       headerFormData: [
         {
-          label: "用户分类",
-          fieldName: "username",
+          label: "数据资源名称",
+          fieldName: "dataMane",
           type: "input",
           value: "",
           placeholder: "请输入用户分类",
@@ -256,12 +314,12 @@ export default {
   },
   methods: {
     // 头部搜索框
-    handleHeaderFormSubmit (form) {
+    handleHeaderFormSubmit(form) {
       this.searchForm = form;
       this.getList();
     },
     // 列表头部功能按钮
-    handleButtonClick (methodName) {
+    handleButtonClick(methodName) {
       console.log(methodName, "methodName");
 
       switch (methodName) {
@@ -296,8 +354,8 @@ export default {
               type: "warning",
               center: true,
             })
-              .then(() => { })
-              .catch(() => { });
+              .then(() => {})
+              .catch(() => {});
           }
           break;
 
@@ -306,18 +364,18 @@ export default {
       }
     },
     // 树结构点击
-    handleNodeClick () { },
+    handleNodeClick() {},
     // 列表头部
-    handleTabClick (tab) {
+    handleTabClick(tab) {
       this.tabs.forEach((item) => {
         if (item.label === tab.label) {
           item.active = true;
-          if (item.label==='正式运行') {
-            this.formData.forEach(item => {
+          this.activeTabLable = tab.value;
+          if (item.label === "正式运行") {
+            this.formData.forEach((item) => {
               // if (item.label==='正式运行时间') {
-                
               // }
-            })
+            });
           }
         } else {
           item.active = false;
@@ -325,7 +383,7 @@ export default {
       });
     },
 
-    getList () {
+    getList() {
       // getFileList({
       //   pageNumber: this.currentPage,
       //   pageSize: this.pageSize,
@@ -338,18 +396,56 @@ export default {
       // })
     },
     // 列表分页
-    pagi_changePage (page) {
+    pagi_changePage(page) {
       this.currentPage = page;
       this.getList();
     },
-    pagi_changeSize (size) {
+    pagi_changeSize(size) {
       this.pageSize = size;
       this.getList();
     },
+
+    handleView(row) {
+      this.rowObj = row;
+      this.title = "查看";
+      this.showDialog = true;
+    },
+    handleEdit(row) {
+      console.log(row, "row");
+      this.rowObj = row;
+      this.title = "编辑";
+      this.showDialog = true;
+    },
+    handleDelete(row) {
+      this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        center: true,
+        type: "warning",
+      })
+        .then(() => {
+          delTabAccessList({ ids: [row.id] }).then((res) => {
+            if (+res.code === 200) {
+              this.$message({
+                message: res.msg,
+                type: "success",
+              });
+              this.getList();
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除",
+          });
+        });
+    },
   },
-  created () { },
-  mounted () {
-   },
+  created() {},
+  mounted() {},
 };
 </script>
 <style lang="scss" scoped>

+ 1 - 1
vue.config.js

@@ -36,7 +36,7 @@ module.exports = {
       [process.env.VUE_APP_BASE_API]: {
         // target: `http://10.1.161.127:8080`,
         // target: `http://10.1.161.183:6661`,
-        target: `192.168.136.32: 6661`,
+        target: `http://192.168.136.188:6661`,
         // target: `http://10.1.162.158:6661`,
 
         changeOrigin: true,