30 Commity e3bcda3228 ... 1104ae9e6b

Autor SHA1 Wiadomość Data
  yanym 1104ae9e6b Merge branch '外墙设计设计风格文字显示优化' into uat 1 tydzień temu
  yanym 5979548a8f 重新生成回到设计页面自动切换对应服务商 1 tydzień temu
  yanym d75252eabf Merge branch '外墙设计设计风格文字显示优化' into uat 1 tydzień temu
  yanym b9ae57bf47 重新生成回到设计页面自动切换对应服务商 1 tydzień temu
  yanym 440731d075 Merge branch '外墙设计设计风格文字显示优化' into uat 1 tydzień temu
  yanym ea30235286 重新生成回到设计页面也获取积分 1 tydzień temu
  yanym 7c40d5b69b Merge branch '外墙设计设计风格文字显示优化' into uat 1 tydzień temu
  yanym 120236e51e 服务商切换修改 1 tydzień temu
  yanym fd5f11b754 Merge branch '外墙设计设计风格文字显示优化' into uat 1 tydzień temu
  yanym e5013b4fe6 服务商切换修改 1 tydzień temu
  yanym 1c6dd96132 Merge branch '历史记录内墙样式与外墙同步' into uat 1 tydzień temu
  yanym 68e3b91e4a 历史生成,内墙样式与外墙同步 1 tydzień temu
  yanym 5ef52e0ac3 Merge branch '外墙设计设计风格文字显示优化' into uat 1 tydzień temu
  yanym 54fb86b62a 外墙设计增加服务商切换功能 1 tydzień temu
  yanym f21a3d8c0a Merge branch '外墙设计设计风格文字显示优化' into uat 1 tydzień temu
  yanym 05ea6f11bb 外墙设计增加服务商切换功能 1 tydzień temu
  yanym 8c214bb3c8 外墙设计增加服务商切换功能 1 tydzień temu
  yanym 87cb6574f3 Merge branch '外墙设计设计风格文字显示优化' into uat 1 tydzień temu
  yanym 95482e8b3a 外墙设计增加服务商切换功能 1 tydzień temu
  yanym 6054fb00df Merge branch '内墙设计增加墙顶一色选择开关' into uat 1 tydzień temu
  yanym ec4d5ff220 内墙设计墙顶一色选项样式修改 1 tydzień temu
  yanym 522e1116a2 Merge branch '内墙设计增加墙顶一色选择开关' into uat 1 tydzień temu
  yanym 2a887a566b 内墙设计添加墙顶一色选项 1 tydzień temu
  yanym 6a3fb008e9 接口错误信息430'无权限访问'改为'请用企微扫码体验',(临时调整) 2 tygodni temu
  yanym 188df48d53 Merge branch '外墙设计墙面分割线显示判断修改' into uat 2 tygodni temu
  yanym 6e799d4eb9 外墙设计选项卡回显逻辑修改,已更改删除的默认选第一项 2 tygodni temu
  yanym ea63a8fb97 Merge branch '一键诊断选择图片按钮样式修改' into uat 2 tygodni temu
  yanym 8c25299e30 一键诊断图片取值字段修改 2 tygodni temu
  yanym 57d96c5abb Merge branch '外墙设计墙面分割线显示判断修改' into uat 2 tygodni temu
  yanym 0f54427f53 重新生成回显墙面分割值增加判断处理 2 tygodni temu

+ 3 - 2
src/api/indexAI.js

@@ -335,10 +335,11 @@ export function GetProductInfo(query) {
 }
 
 // 获取生成图片剩余积分
-export function GetPoints() {
+export function GetPoints(query) {
     return request({
         url: '/aidesign/outside/GetPoints',
-        method: 'post'
+        method: 'post',
+        data:query
     })
 }
 

+ 4 - 2
src/main.ts

@@ -85,7 +85,8 @@ import {
   ActionSheet,
   Search,
   Overlay,
-  Lazyload
+    Switch,
+    Lazyload
 } from "vant";
 
 [
@@ -123,7 +124,8 @@ import {
   ActionSheet,
   Search,
   Overlay,
-  Lazyload
+    Switch,
+    Lazyload
 ].forEach(x => Vue.use(x));
 
 Vue.config.productionTip = false;

+ 1 - 1
src/utils/errorCode.js

@@ -2,6 +2,6 @@ export default {
   '401': '认证失败,无法访问系统资源',
   '403': '当前操作没有权限',
   '404': '访问资源不存在',
-  '430': '无权限访问',
+  '430': '请用企微扫码体验',
   'default': '系统未知错误,请反馈给管理员'
 }

+ 224 - 53
src/views/AIDesign/design.vue

@@ -18,11 +18,17 @@
       </div>
       <!-- 关联项目 -->
       <div class="image-selection padded-lr-20" v-show="projectBoxShow">
-        <div class="project-placeholder">
+        <div class="project-box">
+          <div class="project-overlay" v-show="overlayShow"></div>
           <div class="project-add-box">
-            <span style="font-weight: 700;"><span style="color: red;margin-right: 5px;">*</span>关联项目</span>
+            <div class="fws-change-box" @click="overlayShow = !overlayShow">
+              <span class="fws-code">{{fwsCode}}</span>
+              <span class="change-txt">切换</span>
+              <van-icon v-show="!overlayShow" name="arrow-down" color="#0057BA" />
+              <van-icon v-show="overlayShow" name="arrow-up" color="#0057BA" />
+            </div>
             <van-popover placement="bottom-end" :offset="[17, 4]" v-model="showProjectPopover" theme="dark"
-              trigger="click">
+                         trigger="click">
               <div role="menu" class="van-popover__content">
                 <div role="menuitem" class="van-popover__action van-popover__action--with-icon" @click="toProjectLink">
                   <img width="30px" :src="require('@/assets/AIDesign/projectIcon.png')" alt="">
@@ -34,31 +40,51 @@
               </template>
             </van-popover>
           </div>
-          <div class="point-box">已有积分:<span>{{projectPoint}}</span></div>
-          <div class="list-item-checked" v-if="checkedProject != null">
-            <div class="title-item" v-show="checkedProject.fulladdress">
-              <span class="title" style="text-align: left;">{{ checkedProject.fulladdress }}</span>
-              <span class="status">已报备</span>
-            </div>
-            <div class="user-item" v-show="checkedProject.contact">
-              <van-icon name="user-o" />
-              <span class="txt">{{ checkedProject.contact }}</span>
-            </div>
-            <div class="user-item" v-show="checkedProject.tel">
-              <van-icon name="phone-o" />
-              <span class="txt">{{ checkedProject.tel }}</span>
+          <div class="check-list-box" v-show="overlayShow">
+            <van-radio-group v-model="fwsRadioValue">
+              <van-cell-group>
+                <van-cell clickable v-for="(item,index) in fwsList" :key="index" @click="radioClick(item.shop_code,item.shop_name)">
+                  <template #icon>
+                    <van-radio :name="item.shop_code" />
+                  </template>
+                  <template #title>
+                    <div :class="fwsRadioValue == item.shop_code ? 'list-label-checked' : 'list-label'">
+                      <span class="code">{{item.shop_code}}</span>
+                      <span class="value">{{item.shop_name}}</span>
+                    </div>
+                  </template>
+                </van-cell>
+              </van-cell-group>
+            </van-radio-group>
+          </div>
+          <div class="project-placeholder">
+            <div style="font-weight: 700;width: 100%;text-align: left;margin-bottom: 10px;"><span style="color: red;margin-right: 5px;">*</span>关联项目</div>
+            <div class="point-box">已有积分:<span>{{projectPoint}}</span></div>
+            <div class="list-item-checked" v-if="checkedProject != null">
+              <div class="title-item" v-show="checkedProject.fulladdress">
+                <span class="title" style="text-align: left;">{{ checkedProject.fulladdress }}</span>
+                <span class="status">已报备</span>
+              </div>
+              <div class="user-item" v-show="checkedProject.contact">
+                <van-icon name="user-o" />
+                <span class="txt">{{ checkedProject.contact }}</span>
+              </div>
+              <div class="user-item" v-show="checkedProject.tel">
+                <van-icon name="phone-o" />
+                <span class="txt">{{ checkedProject.tel }}</span>
+              </div>
+              <div class="user-item">
+                <van-icon name="info-o" color="#D43030" />
+                <span class="txt" style="color: #D43030;">已生成套数:{{ checkedProject.DesignCount }}</span>
+              </div>
             </div>
-            <div class="user-item">
-              <van-icon name="info-o" color="#D43030" />
-              <span class="txt" style="color: #D43030;">已生成套数:{{ checkedProject.DesignCount }}</span>
+            <div class="placeholder" style="width: 100%">
+              <p v-if="checkedProject == null" class="placeholder-text">当前暂无已关联的项目,请选择已报备项目</p>
+              <van-button type="primary" color="#2484F2" block @click="chooseProject" :loading="showChooseProject"
+                          :disabled="showChooseProject" loading-type="spinner" loading-text="选择项目"
+                          style="width: 80%;margin-left: 10%;">选择项目</van-button>
             </div>
           </div>
-          <div class="placeholder" style="width: 100%">
-            <p v-if="checkedProject == null" class="placeholder-text">当前暂无已关联的项目,请选择已报备项目</p>
-            <van-button type="primary" color="#2484F2" block @click="chooseProject" :loading="showChooseProject"
-              :disabled="showChooseProject" loading-type="spinner" loading-text="选择项目"
-              style="width: 80%;margin-left: 10%;">选择项目</van-button>
-          </div>
         </div>
       </div>
       <!-- 图片选择 -->
@@ -541,6 +567,11 @@ export default class extends Vue {
     private projectPoint = '';
     private pointDialogShow1 = false;
     private pointDialogShow2 = false;
+    private fwsCode = '';
+    private fwsName = '';
+    private fwsList = [];
+    private fwsRadioValue = '';
+    private overlayShow = false;
 
     created() {
     // 图片头
@@ -588,6 +619,7 @@ export default class extends Vue {
     this.startIndex = 0;
     this.currentIndex = 0;
     this.currentTitle = null;
+    this.overlayShow = false;
     this.activeName = "外墙质感";// tab选中的项
     this.color_selItem = null;//选中的外墙平涂
     this.color_options = [];//外墙平涂列表
@@ -613,7 +645,9 @@ export default class extends Vue {
   private getServiceCode() {
     let that = this;
     const userInfo: any = JSON.parse(window.localStorage.getItem("userInfoV1")!);
-    let serviceCodeArray = [];
+      const checkedFwsInfo: any = JSON.parse(window.localStorage.getItem("pageDesignfwsRadioValue")!);
+      let serviceCodeArray = [];
+      let serviceObjArray = [];
     // if (userInfo && userInfo.loginTypeList && userInfo.loginTypeList.length > 0) {
     //   userInfo.loginTypeList.forEach(item => {
     //     if (item.shopType == 'stoneLikePaint') {
@@ -625,8 +659,24 @@ export default class extends Vue {
     // }
     if (userInfo && userInfo.ServiceCode) {
       serviceCodeArray = userInfo.ServiceCode.split(',').map(item => item.trim()).filter(item => item !== '');
+        userInfo.ServiceCode.split(',').forEach((item,index)=>{
+            let obj = {};
+            obj.shop_code = item;
+            obj.shop_name = userInfo.ServiceName.split(',')[index];
+            serviceObjArray.push(obj);
+        })
     }
+    that.fwsList = serviceObjArray;
     that.serviceCodeArray = serviceCodeArray;
+    if (checkedFwsInfo){
+        that.fwsCode = checkedFwsInfo.shop_code;
+        that.fwsName = checkedFwsInfo.shop_name;
+        that.fwsRadioValue = checkedFwsInfo.shop_code;
+    } else {
+        that.fwsCode = serviceObjArray[0].shop_code;
+        that.fwsName = serviceObjArray[0].shop_name;
+        that.fwsRadioValue = serviceObjArray[0].shop_code;
+    }
   }
   // 处理文件选择(对应 beforeRead + afterRead)
   handleFileChange(e) {
@@ -704,6 +754,24 @@ export default class extends Vue {
     ImagePreview([url]);
   }
 
+    radioClick(code,value,isClearCheckedProject = true){
+        let that = this;
+        that.fwsName = value;
+        that.fwsCode = code;
+        that.fwsRadioValue = code;
+        let overviewRadioValue = {
+            shop_code:code,
+            shop_name:value
+        }
+        that.GetPointsFn();
+        if (isClearCheckedProject){
+            that.checkedProject = null;
+            that.checkedProjectId = null;
+        }
+        window.localStorage.setItem("pageDesignfwsRadioValue", JSON.stringify(overviewRadioValue));
+        that.overlayShow = false;
+    }
+
   // 处理罗马柱
   openComponentPreview(initIndex: number, list) {
     if (list.length > 0) {
@@ -726,7 +794,9 @@ export default class extends Vue {
 
     GetPointsFn(){
       let that = this;
-        GetPoints().then(response => {
+        const formData = new FormData();
+        formData.append('serviceCode', that.fwsCode);
+        GetPoints(formData).then(response => {
             if (response.StatusCode == 200) {
                 that.projectPoint = response.Data.point;
             }
@@ -771,23 +841,33 @@ export default class extends Vue {
           if (response.Data.F_Color) {
             this.DesignStyle = this.designStyles[0].value;
           } else {
-            this.DesignStyle = response.Data.F_DesignStyle || this.designStyles[0].value;
+              this.DesignStyle = this.cardValueFindIndex(response.Data.F_DesignStyle,this.designStyles) == -1 ? this.designStyles[0].value : response.Data.F_DesignStyle;
+            // this.DesignStyle = response.Data.F_DesignStyle || this.designStyles[0].value;
           }
-          this.ColorCard = response.Data.F_ColorCard || this.stoneColors[0].value;
-          this.selectedProcess = response.Data.F_DeepGrooveTech || this.deepSlotProcesses[0].value;
+            this.ColorCard = this.cardValueFindIndex(response.Data.F_ColorCard,this.stoneColors) == -1 ? this.stoneColors[0].value : response.Data.F_ColorCard;
+          // this.ColorCard = response.Data.F_ColorCard || this.stoneColors[0].value;
+            this.selectedProcess = this.cardValueFindIndex(response.Data.F_DeepGrooveTech,this.deepSlotProcesses) == -1 ? this.deepSlotProcesses[0].value : response.Data.F_DeepGrooveTech;
+            // this.selectedProcess = response.Data.F_DeepGrooveTech || this.deepSlotProcesses[0].value;
           // 有墙面工艺
-          if (this.selectedProcess) {
-            const selectedProcessSelctIndex = this.deepSlotProcesses.findIndex(item => item.value === this.selectedProcess);
-            // 墙面分割线选项
-            this.splitWays = this.deepSlotProcesses[selectedProcessSelctIndex].subitems;
-          }
-          this.selectedSplit = response.Data.F_DivisionMethod || this.splitWays[0].value;
-          this.selectedWindowFrame = response.Data.F_WindowsColor || this.windowFrames[0].value;
-          this.selectedRailing = response.Data.F_CastRailing || this.railings[0].value;
-          this.selectedTile = response.Data.F_GlazedTile || this.tiles[0].value;//新琉璃瓦
-          this.selectedSkirtType = response.Data.F_SkirtType || this.skirtTypes[0].value;//墙裙
-          this.selectedReliefType = response.Data.F_carvingType || this.outsideRelief[0].value;//浮雕
-          this.selectedWindowStyle = response.Data.F_WindowsStyle || this.WindowStyle[0].value;//窗套样式
+            if (this.selectedProcess && this.selectedProcess != '平涂') {
+                const selectedProcessSelctIndex = this.deepSlotProcesses.findIndex(item => item.value === this.selectedProcess);
+                // 墙面分割线选项
+                this.splitWays = this.deepSlotProcesses[selectedProcessSelctIndex].subitems;
+                this.selectedSplit = this.cardValueFindIndex(response.Data.F_DivisionMethod,this.splitWays) == -1 ? this.splitWays[0].value : response.Data.F_DivisionMethod;
+                // this.selectedSplit = response.Data.F_DivisionMethod || this.splitWays[0].value;
+            }
+            this.selectedWindowFrame = this.cardValueFindIndex(response.Data.F_WindowsColor,this.windowFrames) == -1 ? this.windowFrames[0].value : response.Data.F_WindowsColor;
+            // this.selectedWindowFrame = response.Data.F_WindowsColor || this.windowFrames[0].value;
+            this.selectedRailing = this.cardValueFindIndex(response.Data.F_CastRailing,this.railings) == -1 ? this.railings[0].value : response.Data.F_CastRailing;
+            // this.selectedRailing = response.Data.F_CastRailing || this.railings[0].value;
+            this.selectedTile = this.cardValueFindIndex(response.Data.F_GlazedTile,this.tiles) == -1 ? this.tiles[0].value : response.Data.F_GlazedTile;
+            // this.selectedTile = response.Data.F_GlazedTile || this.tiles[0].value;//新琉璃瓦
+            this.selectedSkirtType = this.cardValueFindIndex(response.Data.F_SkirtType,this.skirtTypes) == -1 ? this.skirtTypes[0].value : response.Data.F_SkirtType;
+            // this.selectedSkirtType = response.Data.F_SkirtType || this.skirtTypes[0].value;//墙裙
+            this.selectedReliefType = this.cardValueFindIndex(response.Data.F_carvingType,this.outsideRelief) == -1 ? this.outsideRelief[0].value : response.Data.F_carvingType;
+            // this.selectedReliefType = response.Data.F_carvingType || this.outsideRelief[0].value;//浮雕
+            this.selectedWindowStyle = this.cardValueFindIndex(response.Data.F_WindowsStyle,this.WindowStyle) == -1 ? this.WindowStyle[0].value : response.Data.F_WindowsStyle;
+            // this.selectedWindowStyle = response.Data.F_WindowsStyle || this.WindowStyle[0].value;//窗套样式
           this.oldf_id = response.Data.F_ID;
           this.color_selValue = response.Data.F_Color || null;// 外墙平涂选中的值
           if (this.color_selValue) {
@@ -835,12 +915,19 @@ export default class extends Vue {
               this.ColumnTypes = [];
             }
           }
-          this.selectedColumnType = F_ColumnType;//罗马柱
+            this.selectedColumnType = this.cardValueFindIndex(F_ColumnType,this.ColumnTypes) == -1 ? this.ColumnTypes[0].value : F_ColumnType;
+          // this.selectedColumnType = F_ColumnType;//罗马柱
         }
       }
     })
   }
 
+  //判断选项卡初始化值是否还存在
+    cardValueFindIndex(value,array){
+        const index = array.findIndex(item => item.value === value);
+        return index;
+    }
+
   // 添加一个新的辅助方法用于将图片URL转换为File对象
   private async urlToFile(url: string, filename: string): Promise<File> {
     try {
@@ -1022,7 +1109,9 @@ export default class extends Vue {
               that.$toast.fail('请选择关联项目');
               return;
           }else if (that.checkedProject != null && that.checkedProject.AvailableQuantity <= 0){
-              GetPoints().then(response => {
+              const formData = new FormData();
+              formData.append('serviceCode', that.fwsCode);
+              GetPoints(formData).then(response => {
                   if (response.StatusCode == 200) {
                       that.projectPoint = response.Data.point;
                       that.pointDialogShow1 = true;
@@ -1211,11 +1300,13 @@ export default class extends Vue {
     let that = this;
     const formData = new FormData();
     // const userInfo: any = JSON.parse(window.localStorage.getItem("userInfoV1")!);
-    formData.append('ServiceCode', that.serviceCodeArray.join(','));
+    // formData.append('ServiceCode', that.serviceCodeArray.join(','));
+      formData.append('servicecode', that.fwsCode);
     formData.append('projectid', projectId);
     GetProjectlist(formData).then(response => {
       if (response.StatusCode == 200) {
         that.checkedProject = response.Data[0];
+        that.radioClick(response.Data[0].servicecode,'',false);
       } else {
         // console.log(response.Info)
       }
@@ -1227,7 +1318,8 @@ export default class extends Vue {
     let that = this;
     const formData = new FormData();
     const userInfo: any = JSON.parse(window.localStorage.getItem("userInfoV1")!);
-    formData.append('ServiceCode', that.serviceCodeArray.join(','));
+    // formData.append('ServiceCode', that.serviceCodeArray.join(','));
+      formData.append('servicecode', that.fwsCode);
     if (that.projectSearchValue.trim().length != 0) {
       formData.append('keyWord', that.projectSearchValue);
     }
@@ -1514,6 +1606,85 @@ export default class extends Vue {
   text-align: center;
 }
 
+.project-box{
+  position: relative;
+  .project-overlay{
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    z-index: 100;
+    background-color: rgba(0, 0, 0, 0.7);
+    border-radius: 12px;
+  }
+  .project-add-box {
+    flex-direction: row;
+    display: flex;
+    justify-content: space-between;
+    border-radius: 12px 12px 0 0;
+    align-items: center;
+    padding: 10px;
+    z-index: 200;
+    position: relative;
+    background-color: #ffffff;
+    .fws-change-box{
+      flex-direction: row;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      .fws-code{
+        font-size: 12px;
+        color: #0057ba;
+        border: 1px solid #0057ba;
+        border-radius: 10px;
+        padding: 2px 4px;
+      }
+      .change-txt{
+        font-size: 12px;
+        color: #0057BA;
+        margin-left: 5px;
+        margin-right: 5px;
+      }
+    }
+  }
+  .check-list-box{
+    width: 100%;
+    flex-direction: column;
+    display: flex;
+    box-sizing: border-box;
+    margin-bottom: 10px;
+    padding: 10px 10px 5px 10px;
+    /*background-color: red;*/
+    z-index: 200;
+    position: absolute;
+    top: 42px;
+    background: linear-gradient(135deg, #ecf1f4 0%, #e7ecfb 100%);
+    .list-label{
+      text-align: left;
+      margin-left: 15px;
+      .code{
+        color: #666666;
+      }
+      .value{
+        color: #666666;
+        margin-left: 5px;
+      }
+    }
+    .list-label-checked{
+      text-align: left;
+      margin-left: 15px;
+      .code{
+        color: #0057BA;
+        font-weight: 700;
+      }
+      .value{
+        color: #0057BA;
+        font-weight: 700;
+        margin-left: 5px;
+      }
+    }
+  }
+}
+
 .image-placeholder {
   position: relative;
   display: flex;
@@ -1544,13 +1715,13 @@ export default class extends Vue {
   padding-bottom: 30px;
 }
 
-.project-add-box {
-  width: 100%;
-  flex-direction: row;
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 20px;
+.van-cell-group{
+  background-color: transparent;
+}
+
+.van-cell{
+  margin-bottom: 5px;
+  border-radius: 8px;
 }
 
 ::v-deep .van-button--normal {

+ 1 - 1
src/views/AIDesign/diagnoseHistory.vue

@@ -20,7 +20,7 @@
                     <div class="image-grid">
                         <div v-for="image in group" :key="image.F_ID" class="image-item" @click="toResultPage(image)">
                             <div v-if="image.StateCode == 2" class="result-image-box">
-                                <van-image lazy-load :src="image.F_UserFileFullPath" class="house-image" alt="AI设计图"
+                                <van-image lazy-load :src="image.F_UserFilePath" class="house-image" alt="AI设计图"
                                     fit="cover" radius="5px" />
                                 <p class="WallFinishing" v-if="image.F_WallFinishing">{{ image.F_WallFinishing }}</p>
                                 <p class="WallFinishing"

+ 2 - 2
src/views/AIDesign/diagnoseResult.vue

@@ -315,7 +315,7 @@ export default class DiagnosisPage extends Vue {
                     }, 20000);
                 } else {
                     this.StateCode = response.Data.StateCode;
-                    that.UserFilePathUrl = response.Data.F_UserFileFullPath;
+                    that.UserFilePathUrl = response.Data.F_UserFilePath;
                     const wallInfoObj = response.Data.wallInfo || '';
                     const WallRepairAnalysisObj = response.Data.WallRepairAnalysis || '';
 
@@ -400,7 +400,7 @@ export default class DiagnosisPage extends Vue {
             if (response.StatusCode == 200) {
                 if (response.Data) {
                     this.StateCode = response.Data.StateCode;
-                    that.UserFilePathUrl = response.Data.F_UserFileFullPath;
+                    that.UserFilePathUrl = response.Data.F_UserFilePath;
                     //   const regex = /^\d+\.\s*/; // 匹配数字+.+空格
                     if (this.wallType === 'outside') {
                         that.wallInfo = response.Data.wallInfo || '';

+ 34 - 1
src/views/AIDesign/insideDesign.vue

@@ -126,6 +126,17 @@
           </van-radio-group>
         </div>
       </div>
+      <van-cell v-show="activeName != '风格'" style="margin-top: 10px;border-radius: 8px;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);">
+        <template #title>
+          <span class="qdys-checked-title">墙顶一色</span>
+        </template>
+        <template #right-icon>
+          <van-switch v-model="qdysChecked" active-color="#76EE59" size="20" />
+        </template>
+        <template #label>
+          <span class="qdys-checked-tip">*不开启则墙顶默认白色,开启则跟随所选色卡</span>
+        </template>
+      </van-cell>
       <!-- AI生成按钮 -->
       <div class="generate-section">
         <van-button v-show="AIBtnDisabled" type="primary" block color="#E87838" disabled loading loading-type="spinner"
@@ -198,7 +209,7 @@ export default class extends Vue {
   private isEchoAssign: boolean = false;// 新增:标记是否为代码回显赋值(默认 false)
   private textureCode_selItem_index = 0;//纹理一级分类的选中索引
   private color_selItem = null;//选中的色卡
-
+  private qdysChecked = false;//墙顶一色开关
 
   // 当前选中的选项
   private oldf_id = null;
@@ -250,6 +261,7 @@ export default class extends Vue {
     this.isEchoAssign = false;
     this.textureCode_selItem_index = 0;
     this.color_selItem = null;
+    this.qdysChecked = false;
   }
 
   tabsChange(value: string) {
@@ -498,6 +510,7 @@ export default class extends Vue {
           this.DesignStyle_selValue = response.Data.F_Style;// 风格选中的值
           // this.textureCode_selValue = response.Data.F_TextureCode;// 深槽工艺选中的值
           this.color_selValue = response.Data.F_Color;// 电子色卡选中的值
+            this.qdysChecked = response.Data.F_WallCeilingSameColor == 1 ? true : false;// 是否开启墙顶一色
           const F_TextureCodeWithColor = response.Data.F_TextureCodeWithColor;
           // 处理纹理
           if (F_TextureCodeWithColor) {
@@ -653,6 +666,13 @@ export default class extends Vue {
     } else {
       formData.append('oldf_id', this.oldf_id);
     }
+    if (this.activeName != '风格'){
+        if (this.qdysChecked){
+            formData.append('wallCeilingSameColor', 1);
+        } else {
+            formData.append('wallCeilingSameColor', 0);
+        }
+    }
     // 企微类型
     // const agentFrom = window.localStorage.getItem('agentFromAI');
     // const wecomType = getWecomType(agentFrom);
@@ -1312,6 +1332,19 @@ export default class extends Vue {
   }
 }
 
+.qdys-checked-title{
+  font-size: 16px;
+  font-weight: 500;
+  line-height: 14px;
+  color: #000;
+}
+
+.qdys-checked-tip{
+  font-size: 12px;
+  line-height: 14px;
+  color: #86909C;
+}
+
 .color-plus {
   margin: 0px auto 10px;
 

+ 16 - 16
src/views/AIDesign/result.vue

@@ -10,7 +10,7 @@
 
     <div class="container">
       <!-- 历史生图 -->
-      <div class="history-section padded-lr-20" v-if="wallType === 'outside'">
+      <div class="history-section padded-lr-20" v-if="wallType === 'outside' || wallType === 'inside'">
         <div class="history-header" @click="viewHistory">
           <van-icon name="clock-o" color="#EC8868" />
           <span>历史生图</span>
@@ -53,9 +53,9 @@
 
       <!-- 功能按钮组 -->
       <!-- 外墙 -->
-      <div class="button-group-outside" v-if="wallType === 'outside'">
+      <div class="button-group-outside" v-if="wallType === 'outside' || wallType === 'inside'">
         <button class="action-button-big flex-center" @click="handleAIfun"
-          v-if="agentFrom === 'stoneLikePaint' && allRes && allRes.F_DesignStyle != 'CHANGE_COLOR' && StateCode == 2">
+          v-if="agentFrom === 'stoneLikePaint' && allRes && allRes.F_DesignStyle != 'CHANGE_COLOR' && StateCode == 2 && wallType === 'outside'">
           <img src="@/assets/AIDesign/file-excel-line.png" class="icon" />
           <div>
             <div class="title">确认AI设计</div>
@@ -73,7 +73,7 @@
           </button>
           <!-- :class="projectDisableFlag == true ? 'save-button-disabled' : ''"  :disabled="projectDisableFlag"-->
           <button class="action-button-middle flex-center" @click="manualDesign"
-            v-if="showArtificial && StateCode == 2 && !projectDisableFlag">
+            v-if="showArtificial && StateCode == 2 && !projectDisableFlag && wallType === 'outside'">
             <img src="@/assets/AIDesign/bsIcon.png" class="iconbig" />
             <div>
               <div class="title">转人工设计
@@ -84,18 +84,18 @@
         </div>
       </div>
       <!-- 内墙 -->
-      <div class="button-group" v-if="wallType === 'inside'">
-        <button class="action-button" :disabled="regenerateDisable"
-          :class="regenerateDisable == true ? 'save-button-disabled' : ''" @click="regenerate">
-          <van-icon class="icon" name="replay" />
-          <span class="text">重新生成</span>
-        </button>
-        <button class="action-button" @click="viewHistory">
-          <van-icon class="icon" name="clock-o" />
-          <span class="text">历史生图</span>
-          <span v-if="!readState" class="badge-dot"></span>
-        </button>
-      </div>
+      <!--<div class="button-group" v-if="wallType === 'inside'">-->
+        <!--<button class="action-button" :disabled="regenerateDisable"-->
+          <!--:class="regenerateDisable == true ? 'save-button-disabled' : ''" @click="regenerate">-->
+          <!--<van-icon class="icon" name="replay" />-->
+          <!--<span class="text">重新生成</span>-->
+        <!--</button>-->
+        <!--<button class="action-button" @click="viewHistory">-->
+          <!--<van-icon class="icon" name="clock-o" />-->
+          <!--<span class="text">历史生图</span>-->
+          <!--<span v-if="!readState" class="badge-dot"></span>-->
+        <!--</button>-->
+      <!--</div>-->
 
     </div>
   </div>