Explorar o código

Merge branch 'dev' of http://110.41.163.243:9980/kd-aiot/kd-aiot-frontend-eom into dev

xieyong hai 1 semana
pai
achega
2d5d227e4e

+ 4 - 1
AGENTS.md

@@ -6,4 +6,7 @@
 - 客户抽屉内打开客户历史版本详情时,详情 `ele-modal` 必须设置 `append-to-body`,避免弹窗遮罩受抽屉层叠上下文影响而覆盖弹窗内容。
 - 客户与供应商共用 `saleManage/contact/components/addContactDialog.vue` 的新建并提交入口;保存主档后必须等待新建证照的 `saveOrEdit` 请求全部成功,再开启 `contact_approve` 提交弹窗。证照保存失败须提示并停止提交,避免服务端按已持久化证照校验时误判。
 - `saleManage/contact` 的“我的”、员工公海、管理员公海三个列表都有独立的单行删除入口;删除链接需要权限与状态控制,点击时直接调用确认框并在确认后请求 `/eom/contact/delete`,避免表格行刷新后 `el-popconfirm` 的引用节点失效。若服务端返回“数据已被其他业务关联”,先核对该客户实际 `if_relation` 与关联业务记录;客户修改本身不调用 `updateRelationStatus`,不得直接清除关联标记或放宽后端删除保护。
-- 客户编辑弹窗读取 `/eom/contact/getById/{id}` 后,银行信息表格数据必须保持数组;详情缺少 `bankList` 或返回空值时初始化为 `[]`,否则“添加”调用 `push` 会报错。提交时沿用该数组作为 `bankList`。
+- 客户编辑弹窗读取 `/eom/contact/getById/{id}` 后,银行信息表格数据必须保持数组;详情缺少 `bankList` 或返回空值时初始化为 `[]`,否则“添加”操作会报错。提交时沿用该数组作为 `bankList`。
+- 客户银行和联系人信息的编辑弹窗、详情抽屉使用 Vue 2,`data` 中的列定义使用普通字段名(如 `bankColumnsDef`、`linkColumnsDef`),不能用 `_`、`$` 开头的字段再通过 `this` 读取:Vue 2 不代理这些字段,会使计算列为 `undefined`,即使添加方法已增加数据,表格也没有输入列。回归需用真实 Vue 实例验证新增后的渲染,不能只直接调用方法检查数组长度。详情抽屉银行户名来自 `base.name`,保存后重新读取详情版本;已指派客户的保存限制沿用服务端规则。
+- 2026-10-21 本地页面回归:客户 `KH20261021001` 的编辑弹窗、详情抽屉两个银行信息入口均完成“添加→输入→删除”验证,输入框数量均为 `4→8→4`,新增户名正确带出客户名称;未提交保存,此证据仅覆盖页面交互,不代表保存接口回归通过。
+- 2026-10-21 本地页面回归:客户 `KH20261021001` 的详情抽屉联系人信息完成“添加→输入→删除”验证;未提交保存,此证据仅覆盖页面交互,不代表保存接口回归通过。

+ 18 - 12
src/views/saleManage/contact/components/darwerComponents/bankInfo.vue

@@ -59,7 +59,7 @@
 </template>
 
 <script>
-import { contactUpdate } from '@/api/saleManage/contact';
+import { contactDetail, contactUpdate } from '@/api/saleManage/contact';
 
 import dictMixins from '@/mixins/dictMixins';
 import tabMixins from '@/mixins/tableColumnsMixin';
@@ -125,12 +125,12 @@ export default {
   methods: {
     async init(row) {
       this.form = row;
-      this.tableBankData = row.bankList;
+      this.tableBankData = (row.bankList || []).map((item) => ({ ...item }));
     },
 
     addBank() {
       this.tableBankData.push({
-        accountName: this.form.name,
+        accountName: this.form.base.name,
         accountNo: '',
         bankName: '',
         interbankNo: ''
@@ -139,16 +139,22 @@ export default {
     handleBankDel(row, index) {
       this.tableBankData.splice(index, 1);
     },
-    save() {
-      this.form.bankList = this.tableBankData;
-      contactUpdate(this.form)
-        .then((res) => {
-          this.$message.success('修改成功');
-         
-        })
-        .catch((e) => {
-          //this.loading = false;
+    async save() {
+      try {
+        await contactUpdate({
+          base: this.form.base,
+          other: this.form.other,
+          bankList: this.tableBankData,
+          linkList: this.form.linkList,
+          productList: this.form.productList
         });
+        this.$message.success('修改成功');
+        const data = await contactDetail(this.form.base.id);
+        await this.init(data);
+        this.$emit('updated', data);
+      } catch (e) {
+        // 请求层会展示服务端错误,保留表格内容供用户继续编辑。
+      }
     }
   }
 };

+ 5 - 1
src/views/saleManage/contact/components/drawer.vue

@@ -62,7 +62,7 @@
             <contactInfo ref="contactInfoRef"></contactInfo>
           </el-tab-pane>
           <el-tab-pane label="银行信息" name="银行信息">
-            <bankInfo ref="bankInfoRef"></bankInfo>
+            <bankInfo ref="bankInfoRef" @updated="onBankUpdated"></bankInfo>
           </el-tab-pane>
           <el-tab-pane label="联系人信息" name="联系人信息">
             <linkInfo ref="linkInfoREf"></linkInfo
@@ -335,6 +335,10 @@
       ...mapGetters(['user'])
     },
     methods: {
+      onBankUpdated(data) {
+        this.row.base.version = data.base.version;
+        this.row.bankList = data.bankList;
+      },
       async open(row, pageName) {
         console.log(row, pageName);
         this.activeName = '详细信息';

+ 3 - 3
vue.config.js

@@ -2,7 +2,7 @@
  * @Author: mlchen 374826075@qq.com
  * @Date: 2026-07-22 15:43:30
  * @LastEditors: mlchen 374826075@qq.com
- * @LastEditTime: 2026-10-13 10:07:46
+ * @LastEditTime: 2026-10-21 14:15:42
  * @FilePath: /kd-aiot-frontend-eom/vue.config.js
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -44,8 +44,8 @@ module.exports = {
     proxy: {
       // 当我们的本地的请求 有/api的时候,就会代理我们的请求地址向另外一个服务器发出请求
       '/api': {
-        // target: 'http://192.168.1.251:18086', //开发
-        target: 'http://localhost:18086', //开发
+        target: 'http://192.168.1.251:18086', //开发
+        // target: 'http://localhost:18086', //开发
         // target: 'http://192.168.1.251:18186', //测试
         // target: 'http://192.168.1.15:18086',//罗
         // target: 'http://192.168.1.144:18086',//付