瀏覽代碼

4.0.39 修复身份源编辑的界面。

YangZhiJie 2 年之前
父節點
當前提交
b931723449
共有 6 個文件被更改,包括 148 次插入40 次删除
  1. 1 1
      package.json
  2. 4 4
      src/client/Login.vue
  3. 4 2
      src/identity/AccountAssociation.vue
  4. 94 21
      src/identity/CreateIdentity.vue
  5. 33 0
      src/identity/configData.js
  6. 12 12
      webpack.dev.js

+ 1 - 1
package.json

@@ -1,7 +1,7 @@
 {
   "name": "client-base-v4",
   "description": "Leanwo Prodog Client",
-  "version": "4.0.38",
+  "version": "4.0.39",
   "author": "yangzhijie1488 <yangzhijie1488@163.com>",
   "scripts": {
     "dev": "cross-env webpack serve --config ./webpack.dev.js",

+ 4 - 4
src/client/Login.vue

@@ -190,7 +190,7 @@
                         :key="item.id"
                         v-tooltip.top="`${item.authType}-${item.name}`"
                         class="login-third-item"
-                        @click="existsSAML(item.id)"
+                        @click="existsSAML(item.no)"
                       >
                         <img :src="getImageSrc(item.className, item.logo)" />
                       </span>
@@ -362,17 +362,17 @@ export default {
       });
     },
     // 判断SAML服务器是否存在
-    existsSAML: function (id) {
+    existsSAML: function (no) {
       $.ajax({
         url: Common.getApiURL(
-          'SamlLogin/samlServiceProviderCheck?authSettingId=' + id,
+          'SamlLogin/samlServiceProviderCheck?authSettingNo=' + no,
         ),
         type: 'get',
         contentType: 'application/json',
         dataType: 'json',
         success: function (response) {
           if (response.errorCode === 0) {
-            let url = '/api/SamlLogin/index?authSettingId=' + id;
+            let url = '/api/SamlLogin/index?authSettingNo=' + no;
             window.location.href = url;
           } else {
             Notify.error('错误', response.errorMessage);

+ 4 - 2
src/identity/AccountAssociation.vue

@@ -168,6 +168,7 @@ const createIdentity = () => {
   formData.append('attribute', jsonStr);
   formData.append('id', prevDatas.value.id);
   formData.append('name', prevDatas.value.name);
+  formData.append('no', prevDatas.value.no);
   formData.append('logo', prevDatas.value.file);
   formData.append('active', prevDatas.value.active);
   formData.append('authType', prevDatas.value.authType);
@@ -204,9 +205,10 @@ let validateService = async (_rule, value) => {
   if (!value) {
     return Promise.reject('请输入 Prodog 断言解析地址');
   }
-  if (!value.endsWith('/api/saml/sso/${id}')) {
+  let no = prevDatas.value.no;
+  if (!value.endsWith('/api/saml/sso/' + no)) {
     service.value = true;
-    return Promise.reject('断言解析地址必须以/api/saml/sso/${ id }结束');
+    return Promise.reject('断言解析地址必须以/api/saml/sso/' + no + '结束');
   } else {
     service.value = false;
   }

+ 94 - 21
src/identity/CreateIdentity.vue

@@ -40,30 +40,30 @@
       </div>
       <div v-else-if="steps[current].contentTemplate === 'Second'">
         <a-form
+          ref="formRef2"
           :model="identityInfo"
           :label-col="{ style: { width: '120px' } }"
           :wrapper-col="{
             span: 8,
           }"
+          :rules="rulesForStep2"
           autocomplete="off"
         >
-          <a-form-item
-            has-feedback
-            label="认证源名称"
-            name="name"
-            :rules="[{ required: true, message: '请输入认证源名称!' }]"
-          >
+          <a-form-item has-feedback label="认证源名称" name="name">
             <a-input
               v-model:value="identityInfo.name"
               placeholder="必填,请输入认证源名称"
             />
           </a-form-item>
 
-          <a-form-item
-            label="认证源LOGO"
-            name="logo"
-            :rules="[{ required: true, message: '请选择LOGO!' }]"
-          >
+          <a-form-item has-feedback label="认证源标识" name="no">
+            <a-input
+              v-model:value="identityInfo.no"
+              placeholder="必填,请输入认证源标识"
+            />
+          </a-form-item>
+
+          <a-form-item label="认证源LOGO" name="logo">
             <div v-tooltip.top="'点击查看大图'">
               <a-image :width="48" :src="logoUrl" />
             </div>
@@ -122,12 +122,7 @@
         v-if="current === 1"
         type="primary"
         style="margin-left: 8px"
-        :disabled="
-          !identityInfo.name ||
-            logoUrl === '/static/assets/client-base-v4/image/logo.png'
-            ? true
-            : false
-        "
+        
         @click="next"
       >
         下一步
@@ -149,8 +144,11 @@ import {
   imageToBase64,
   base64toFile,
   queryById,
+  isNoExist,
 } from './configData.js';
 
+
+const formRef2 = ref();
 const route = useRoute();
 const current = ref(0); // 当前步骤
 const logoName = ref(''); // logo 名称
@@ -185,7 +183,7 @@ const identitySetting = ref({
   roleTemplateNo: '003',
   clientId: '',
   spEntityID: 'com.leanwo.prodog.sp',
-  spAssertionConsumeService: 'http://xxxx:xx/api/saml/sso/${id}',
+  spAssertionConsumeService: 'http://xxxx:xx/api/saml/sso/${no}',
   spAssertionConsumeSuccessRedirectService:
     'http://xxxx:xx/index.html#/samlLogin',
 });
@@ -200,7 +198,7 @@ onMounted(() => {
   const { identityId } = route.query;
   if (identityId) {
     isEdit.value = true;
-    identityInfo.id = identityId;
+    identityInfo.id = Number(identityId);
     queryAuthById(identityId);
   } else {
     isEdit.value = false;
@@ -222,11 +220,13 @@ const queryAuthById = id => {
           description,
           logo,
           name,
+          no,
         } = success.data;
         logoUrl.value = getImageSrc(className, logo);
         imgToBase64();
         logoName.value = logo;
         identityInfo.name = name;
+        identityInfo.no = no;
         identityInfo.active = active;
         logoClassName.value = className;
         identityInfo.description = description;
@@ -248,6 +248,33 @@ const queryAuthById = id => {
     },
   );
 };
+
+// check is no exist
+const validateIsNoExist = (no, excludeId) => {
+  const params = new FormData();
+  params.append('no', no);
+  params.append('excludeId', excludeId);
+  return new Promise((resolve, reject) => {
+    isNoExist(params).then(
+      success => {
+        if (success.errorCode === 0) {
+          if(success.data === false){
+            resolve();
+          }else{
+            reject('认证源标识已经存在');
+          }
+          
+        } else {
+          reject(success.errorMessage);
+        }
+      },
+      error => {
+        reject(error);
+      },
+    );
+  });
+};
+
 // 图片转file
 const imgToBase64 = () => {
   var image = new Image();
@@ -261,7 +288,7 @@ const imgToBase64 = () => {
 
 // 获取logo文件
 const logoFileChange = async e => {
-  if(!isImage.value){
+  if (!isImage.value) {
     message.warning('请上传图片类型的logo!');
     return;
   }
@@ -308,6 +335,42 @@ const steps = ref([
   },
 ]);
 
+const noValidator = async (_rule, value) => {
+  if (value === '') {
+    return Promise.reject('请输入认证源标识!');
+  } else {
+    return validateIsNoExist(value, identityInfo.id);
+  }
+};
+
+const rulesForStep2 = {
+  name: [
+    {
+      required: true,
+      message: '请输入认证源名称!',
+      trigger: 'change',
+    },
+  ],
+  no: [
+    {
+      required: true,
+      message: '请输入认证源标识!',
+      trigger: 'change',
+    },
+    {
+      validator: noValidator,
+      trigger: 'change',
+    },
+  ],
+  logo: [
+    {
+      required: true,
+      message: '请选择LOGO!',
+      trigger: 'change',
+    },
+  ],
+};
+
 // 选择认证源数据
 const selectedItem = ref([
   {
@@ -324,8 +387,18 @@ const selectedItem = ref([
 
 // 下一步
 const next = () => {
-  current.value++;
+  if (current.value === 1) {
+    // TODO
+    formRef2.value.validate().then(success => {
+      current.value++;
+    });
+  }else{
+    current.value++;
+  }
 };
+
+const validateNo = () => {};
+
 // 上一步
 const prev = () => {
   current.value--;

+ 33 - 0
src/identity/configData.js

@@ -7,6 +7,12 @@ export const tableColumns = [
     dataIndex: 'name',
     width: 260,
   },
+  {
+    title: '认证源标识',
+    key: 'no',
+    dataIndex: 'no',
+    width: 100,
+  },
   {
     title: '认证源类型',
     key: 'authType',
@@ -118,6 +124,33 @@ export const saveUpdateAuth = datas => {
   });
 };
 
+
+
+// 编号唯一性校验
+export const isNoExist = datas => {
+  var requestUrl = 'AuthSettingResource/isNoExist';
+  return new Promise((resolve, reject) => {
+    $.ajax({
+      url: Common.getApiURL(requestUrl),
+      type: 'post',
+      contentType: false,
+      processData: false,
+      data: datas,
+      beforeSend: function (request) {
+        Common.addTokenToRequest(request);
+      },
+      success: function (data) {
+        resolve(data);
+      },
+      error: function (XMLHttpRequest, textStatus, errorThrown) {
+        reject(XMLHttpRequest);
+      },
+    });
+  });
+};
+
+
+
 // 删除认证源
 export const deleteAuth = datas => {
   var requestUrl = 'AuthSettingResource/deleteAuthSetting';

+ 12 - 12
webpack.dev.js

@@ -62,71 +62,71 @@ module.exports = WebpackMerge.merge(baseConfig, {
     
     proxy: {
       '/api': {
-        target: 'http://wuzhixin.vip:10022/',
+        target: 'http://127.0.0.1:10022/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/static': {
-        target: 'http://wuzhixin.vip:10022/',
+        target: 'http://127.0.0.1:10022/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/content': {
-        target: 'http://wuzhixin.vip:10022/',
+        target: 'http://127.0.0.1:10022/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/dashboard': {
-        target: 'http://wuzhixin.vip:10022/',
+        target: 'http://127.0.0.1:10022/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/assets': {
-        target: 'http://wuzhixin.vip:10022/',
+        target: 'http://127.0.0.1:10022/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/mock': {
-        target: 'http://wuzhixin.vip:10022/',
+        target: 'http://127.0.0.1:10022/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/authApi': {
-        target: 'http://wuzhixin.vip:10022/',
+        target: 'http://127.0.0.1:10022/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/Dictionary': {
-        target: 'http://wuzhixin.vip:10022/',
+        target: 'http://127.0.0.1:10022/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/Files': {
-        target: 'http://wuzhixin.vip:10022/',
+        target: 'http://127.0.0.1:10022/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/WebSocket': {
-        target: 'http://wuzhixin.vip:10022/',
+        target: 'http://127.0.0.1:10022/',
         ws: true,
         changeOrigin: true,
       },
       '/TrainVideo': {
-        target: 'http://wuzhixin.vip:10022/',
+        target: 'http://127.0.0.1:10022/',
         ws: true,
         changeOrigin: true,
       },
       '/gateway-api': {
-        target: 'http://wuzhixin.vip:10022/',
+        target: 'http://127.0.0.1:10022/',
         ws: true,
         changeOrigin: true,
         secure:true,