ソースを参照

1.新增资产下单时可新增客户联系人
2.VanSinglePicker新增插槽
3.修复大中型待办详情的反馈表单校验无效的问题

GouGengquan 2 週間 前
コミット
60c4e6fbcf

+ 5 - 0
src/api/customerLinkman.js

@@ -3,4 +3,9 @@ import request from '@/utils/request'
 // 获取客户联系人下拉列表
 export function customerLinkmanDrop(params) {
     return request.post(`customerLinkman/simpleAll`, params)
+}
+
+// 新增客户联系人
+export function add(params) {
+    return request.post(`customerLinkman`, params)
 }

+ 21 - 4
src/components/VanSinglePicker/index.vue

@@ -1,8 +1,17 @@
 <template>
   <div>
     <!-- field的作用是回显选择的选项, 所以只读 -->
-    <van-field v-model="text" v-bind="$attrs" readonly is-link :name="name" :label="label" @click="show = !show" :rules="rules" :required="required" />
-    <van-popup :show="show" round position="bottom">
+    <van-field v-model="text" v-bind="$attrs" readonly :name="name" :label="label" @click-input="show = !show" :rules="rules" :required="required">
+      <template #button>
+        <van-icon name="arrow" />
+        <div class="button">
+          <slot name="button"></slot>
+        </div>
+      </template>
+    </van-field>
+    <!-- 指定挂载在body节点下,否则在其他高度受限的容器中调用时布局会被影响 -->
+    <!-- TODO: 后期改成可配置项 -->
+    <van-popup :show="show" round position="bottom" teleport="body">
       <van-search v-if="search" v-model="keyWord" placeholder="请输入搜索关键词" />
       <van-picker v-model="selectedValues" :columns="filterColumns" :column-field-names="customFieldName" show-toolbar :title="label" @cancel="show = false, keyWord = null" @confirm="onConfirm">
         <template #empty>
@@ -90,7 +99,7 @@ export default {
     },
     // 监听搜索关键字的变化
     keyWord(newVal) {
-      const results = []; 
+      const results = [];
       // 筛选下拉选项
       this.columns.forEach((item) => {
         if (item.text.indexOf(newVal) > -1) {
@@ -136,4 +145,12 @@ export default {
     },
   },
 };
-</script>
+</script>
+
+<style scoped>
+.button {
+  display: inline-block;
+  color: #1989fa;
+  margin-left: 10px;
+}
+</style>

+ 67 - 2
src/views/assets/placeOrder.vue

@@ -93,7 +93,11 @@
             :rules="[{ required: true, message: '请选择客户联系人' }]"
             :required="true"
             :search="true"
-          />
+          >
+            <template #button>
+              <div @click="openCreateLinkmanPopup()">新增</div>
+            </template>
+          </VanSinglePicker>
           <van-field name="security" label="是否证券项目" :rules="[{ required: true, message: '请选择是否证券项目' }]" required>
             <template #input>
               <van-radio-group v-model="assets.security" direction="horizontal" icon-size="14px">
@@ -145,15 +149,27 @@
         </div>
       </van-form>
     </div>
+
+    <!-- 新增客户联系人弹窗 -->
+    <van-popup v-model:show="showCreateLinkman" round :style="{ padding: '10px' }">
+      <van-form @submit="saveLinkman()">
+        <van-cell-group inset>
+          <van-field label="联系人姓名" v-model="linkman.name" name="name" placeholder="请输入联系人姓名" :rules="[{ required: true, message: '请输入联系人姓名' }]" required />
+          <van-field label="联系电话" v-model="linkman.mobile" name="mobile" type="tel" placeholder="请输入联系电话" :rules="[{ required: true, message: '请输入联系电话' }]" required />
+          <van-button round block type="primary" native-type="submit">提交</van-button>
+        </van-cell-group>
+      </van-form>
+    </van-popup>
   </div>
 </template>
 
 <script>
+import { showDialog } from 'vant';
 import { mapStores } from 'pinia';
 import { useUserStore } from '@/stores/useUserStore';
 import { showNotify } from 'vant';
 import VanSinglePicker from '@/components/VanSinglePicker/index.vue';
-import { customerLinkmanDrop } from '@/api/customerLinkman';
+import { customerLinkmanDrop, add as addLinkman } from '@/api/customerLinkman';
 import { customerCompanyDrop } from '@/api/customerCompany';
 import { allot } from '@/api/department';
 import { add } from '@/api/assets';
@@ -239,6 +255,9 @@ export default {
         bailorAddress: null,
         remark: null,
       },
+      // 新增联系人弹窗
+      showCreateLinkman: false,
+      linkman: {},
     };
   },
   computed: {
@@ -342,6 +361,52 @@ export default {
         }
       });
     },
+    // 打开新增联系人popup
+    openCreateLinkmanPopup() {
+      this.linkman = {};
+      if (this.assets.clienteleType === '企业') {
+        if (this.assets.clienteleSubId) {
+          this.showCreateLinkman = true;
+          this.linkman.terminal = false;
+          this.linkman.ccId = this.assets.clienteleSubId;
+        } else {
+          showDialog({
+            message: '未选择客户名称与业务来源',
+          });
+        }
+      } else {
+        this.showCreateLinkman = true;
+        this.linkman.terminal = false;
+        this.linkman.ccId = 1;
+      }
+    },
+    // 新增客户联系人
+    saveLinkman() {
+      addLinkman(this.linkman).then((res) => {
+        if (res.code === 200) {
+          showNotify({ type: 'success', message: '新增成功' });
+        }
+        // ccId 不等于1说明新增的企业类型的客户联系人
+        if (this.linkman.ccId !== 1) {
+          this.findCustomerContract();
+        } else {
+          // 个人类型直接获取客户联系人
+          let simpleAll = new Object();
+          simpleAll.ccId = 1;
+          simpleAll.terminal = 0;
+          customerLinkmanDrop(simpleAll).then((res) => {
+            if (res.code === 200) {
+              // 使用 map 方法提取 id 和 name 属性
+              this.customerContractColumns = res.data.map((item) => ({
+                value: String(item.id),
+                text: String(item.name),
+              }));
+            }
+          });
+        }
+        this.showCreateLinkman = false;
+      });
+    },
     // 资产下单
     addAssetsOrder() {
       add(this.assets).then((res) => {

+ 2 - 2
src/views/major/todoDetail.vue

@@ -33,7 +33,7 @@
 
 
     <van-popup v-model:show="feedbackDialog" :style="{ padding: '10px' }" round >
-      <van-form>
+      <van-form @submit="saveFeedback()">
         <van-cell-group inset>
 
           <van-field name="radio" label="产品类型" :rules="[{ required: true, message: '请选择反馈信息' }]" :required="true">
@@ -58,7 +58,7 @@
             </template>
           </van-field>
         </van-cell-group>
-        <van-button round block type="primary" native-type="submit" @click="saveFeedback()">
+        <van-button round block type="primary" native-type="submit">
           提交
         </van-button>
       </van-form>