From 6683722e3ab7e97cec21f7d29a8c7e6b20ab089b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A3=B7=E5=8F=B6?=
 <14103883+leaf-phos@user.noreply.gitee.com>
Date: Wed, 27 Nov 2024 18:25:49 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/utils/wx.js                               | 14 +++++++++
 src/views/dashboard/component/TodoList.vue    | 18 +++++++++--
 src/views/mch/storeStaff/index.vue            |  2 +-
 src/views/ss/realName/index.vue               |  9 +++++-
 src/views/ss/risk/index.vue                   |  3 ++
 .../components/StoreStaffEditDialog.vue       | 16 ++++------
 .../storeStaff/components/StoreStaffTable.vue | 30 ++++++++++++++++---
 7 files changed, 73 insertions(+), 19 deletions(-)

diff --git a/src/utils/wx.js b/src/utils/wx.js
index 79b891f..d0dd0db 100644
--- a/src/utils/wx.js
+++ b/src/utils/wx.js
@@ -17,3 +17,17 @@ export function getWxIndexUrl(query) {
   }
   return url;
 }
+
+// 获取合伙人外链
+export function getStaffUrl(query) {
+  let url = `https://kg.chuangtewl.com/h`;
+  if (query != null ) {
+    if (query instanceof Object) {
+      query = tansParams(query).slice(0, -1);
+    }
+    if (query.length > 0) {
+      url += `?${query}`;
+    }
+  }
+  return url;
+}
diff --git a/src/views/dashboard/component/TodoList.vue b/src/views/dashboard/component/TodoList.vue
index d226557..9a84cad 100644
--- a/src/views/dashboard/component/TodoList.vue
+++ b/src/views/dashboard/component/TodoList.vue
@@ -14,6 +14,13 @@
       </div>
       <div class="unit">条</div>
     </div>
+    <div class="todo-item" @click="$router.push(`/smUser/riskInfo?status=${RiskInfoStatus.WAIT_VERIFY}`)">
+      <div class="label"><svg-icon icon-class="apply"/> 风控审核</div>
+      <div class="value">
+        <count-to :start-val="0" :end-val="data.riskVerifyCount" :duration="3000"/>
+      </div>
+      <div class="unit">条</div>
+    </div>
     <div class="todo-item"  @click="$router.push('/smDevice/device?isArrears=1')">
       <div class="label"><svg-icon icon-class="monitor"/> 到期设备</div>
       <div class="value">
@@ -41,9 +48,15 @@
 <script>
 import CountTo from 'vue-count-to'
 import { getTodoList } from '@/api/system/dashboard'
+import { RiskInfoStatus } from '@/utils/constants'
 
 export default {
   name: 'TodoList',
+  computed: {
+    RiskInfoStatus() {
+      return RiskInfoStatus
+    }
+  },
   components: {
     CountTo
   },
@@ -55,7 +68,8 @@ export default {
         mchApplyCount: 0,
         storeApplyCount: 0,
         abnormalCount: 0,
-        arrearsDeviceCount: 0
+        arrearsDeviceCount: 0,
+        riskVerifyCount: 0, // 风控审核数量
       }
     }
   },
@@ -87,7 +101,7 @@ export default {
   width: 100%;
   display: flex;
   transition: .25s;
-  padding: 0.8em 1em;
+  padding: 0.55em 1em;
   cursor: pointer;
   border-radius: 16px;
   vertical-align: bottom;
diff --git a/src/views/mch/storeStaff/index.vue b/src/views/mch/storeStaff/index.vue
index d707cac..7193e43 100644
--- a/src/views/mch/storeStaff/index.vue
+++ b/src/views/mch/storeStaff/index.vue
@@ -50,7 +50,7 @@
       :employ-id="row.employId"
       @success="getList"
       :init-form="{storeId: query.storeId}"
-      user-input-type="search"
+      :show-user-id="false"
       :update-api="mchUpdateStoreStaff"
       :add-api="mchAddStoreStaff"
       :load-api="mchGetStoreStaff"
diff --git a/src/views/ss/realName/index.vue b/src/views/ss/realName/index.vue
index a26c634..de5203a 100644
--- a/src/views/ss/realName/index.vue
+++ b/src/views/ss/realName/index.vue
@@ -34,7 +34,14 @@
         />
       </el-form-item>
       <el-form-item label="类型" prop="type">
-
+        <el-select v-model="queryParams.type" placeholder="请选择类型" clearable @change="handleQuery">
+          <el-option
+            v-for="dict in dict.type.real_name_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
diff --git a/src/views/ss/risk/index.vue b/src/views/ss/risk/index.vue
index cf00cfd..10793ed 100644
--- a/src/views/ss/risk/index.vue
+++ b/src/views/ss/risk/index.vue
@@ -288,6 +288,9 @@ export default {
         ],
         unsealSelf: [
           { required: true, message: "实名解封不能为空", trigger: "change" }
+        ],
+        submitType: [
+          {type: 'array', required: true, message: "提交材料不能为空", trigger: "change"}
         ]
       }
     };
diff --git a/src/views/ss/storeStaff/components/StoreStaffEditDialog.vue b/src/views/ss/storeStaff/components/StoreStaffEditDialog.vue
index 7a960db..01e8f88 100644
--- a/src/views/ss/storeStaff/components/StoreStaffEditDialog.vue
+++ b/src/views/ss/storeStaff/components/StoreStaffEditDialog.vue
@@ -4,12 +4,9 @@
       <el-form-item label="店铺" prop="storeId">
         <store-input v-model="form.storeId" :disabled="hasView([views.store, views.mchStore])"/>
       </el-form-item>
-      <el-form-item label="用户" prop="userId" v-if="userInputType === 'dialog'">
+      <el-form-item label="用户" prop="userId" v-if="showUserId">
         <user-input v-model="form.userId"/>
       </el-form-item>
-      <el-form-item label="用户" prop="userId" v-else-if="userInputType === 'search'">
-        <user-search-input v-if="open && !loading" v-model="form.userId" :init-options="initUserSearchOptions"/>
-      </el-form-item>
       <el-form-item label="备注名" prop="remark">
         <el-input v-model="form.remark" placeholder="请输入备注名" maxlength="200" show-word-limit/>
       </el-form-item>
@@ -81,10 +78,10 @@ export default {
       type: Object,
       default: () => ({})
     },
-    // 用户的输入方式:dialog 弹窗选择,search 搜索选择
-    userInputType: {
-      type: String,
-      default: "dialog"
+    // 是否展示用户ID
+    showUserId: {
+      type: Boolean,
+      default: true,
     },
     // 更新API
     updateApi: {
@@ -113,9 +110,6 @@ export default {
         storeId: [
           { required: true, message: "店铺不能为空", trigger: "change" }
         ],
-        userId: [
-          { required: true, message: "用户不能为空", trigger: "change" }
-        ],
         point: [
           { required: true, message: "分成比例不能为空", trigger: "change" }
         ],
diff --git a/src/views/ss/storeStaff/components/StoreStaffTable.vue b/src/views/ss/storeStaff/components/StoreStaffTable.vue
index 3a8a6a2..de7995e 100644
--- a/src/views/ss/storeStaff/components/StoreStaffTable.vue
+++ b/src/views/ss/storeStaff/components/StoreStaffTable.vue
@@ -83,8 +83,20 @@
             <template v-else-if="column.key === 'point'">
               {{d.row.point | money | defaultValue}} %
             </template>
-            <template v-else-if="column.key === 'userName'">
-              <user-link :id="d.row.userId" :name="d.row.userName"/>
+            <template v-else-if="column.key === 'userId'">
+              <user-link v-if="d.row.userId != null" :id="d.row.userId" :name="d.row.userName"/>
+              <template v-else>
+                <el-popover
+                  placement="top"
+                  width="180"
+                  trigger="hover">
+                  <div class="qr-code-box">
+                    <qr-code :text="qrCodeText(d.row)" :width="150" :height="150" />
+                    <p style="text-align: center">扫描二维码绑定用户</p>
+                  </div>
+                  <el-button slot="reference" type="text" icon="el-icon-picture">绑定二维码</el-button>
+                </el-popover>
+              </template>
             </template>
             <template v-else-if="column.key === 'storeName'">
               <store-link :id="d.row.storeId" :name="d.row.storeName"/>
@@ -120,6 +132,8 @@ import UserInput from '@/components/Business/SmUser/UserInput.vue'
 import StoreInput from '@/components/Business/Store/StoreInput.vue'
 import { $showColumns, $view } from '@/utils/mixins'
 import { listStoreStaff } from '@/api/ss/storeStaff'
+import QrCode from '@/components/QrCode/index.vue'
+import { getStaffUrl, getWxIndexUrl } from '@/utils/wx'
 
 
 // 默认排序字段
@@ -130,7 +144,7 @@ const defaultSort = {
 
 export default {
   name: "StoreStaffTable",
-  components: { StoreLink, UserLink, UserInput, StoreInput, BooleanTag },
+  components: { QrCode, StoreLink, UserLink, UserInput, StoreInput, BooleanTag },
   mixins: [$showColumns, $view],
   dicts: ['store_staff_permissions', 'store_staff_role'],
   props: {
@@ -151,7 +165,7 @@ export default {
       columns: [
         {key: 'employId', visible: false, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
         {key: 'storeName', visible: true, label: '店铺', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
-        {key: 'userName', visible: true, label: '用户', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
+        {key: 'userId', visible: true, label: '用户', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
         {key: 'remark', visible: true, label: '备注名', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
         {key: 'role', visible: true, label: '角色', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
         {key: 'point', visible: true, label: '分成比例', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
@@ -198,6 +212,14 @@ export default {
       },
     };
   },
+  computed: {
+    // 二维码文本
+    qrCodeText() {
+      return (row) => {
+        return getStaffUrl({ i: row.employId});
+      }
+    },
+  },
   created() {
     this.queryParams = {
       ...this.queryParams,