Jelajahi Sumber

fix:接口调试&优化

magic v 4 tahun lalu
induk
melakukan
40089e3f86

+ 2 - 2
config/index.js

@@ -22,8 +22,8 @@ module.exports = {
     },
 
     // Various Dev Server settings
-    host: 'localhost', // can be overwritten by process.env.HOST
-    // host: '10.0.3.116', // can be overwritten by process.env.HOST
+    // host: 'localhost', // can be overwritten by process.env.HOST
+    host: '10.0.3.116', // can be overwritten by process.env.HOST
     port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
     autoOpenBrowser: false,
     errorOverlay: true,

+ 4 - 4
src/pages/Manager/index.vue

@@ -23,8 +23,8 @@
                 <template #title>
                   <div class="panel-btns">
                     <van-button round type="primary" class="btn-item"
-                      :disabled="!data"
-                      @click="btnSubmit()">保存问卷</van-button>
+                      :disabled="!data || disabled.save"
+                      @click="btnSave()">保存问卷</van-button>
                   </div>
                 </template>
               </van-cell>
@@ -149,7 +149,7 @@
             <div class="card-body" v-if="attrShow.compt">
               <div class="card-scroll">
                 <van-cell-group>
-                  <van-field label="组件操作">
+                  <van-field label="组件操作" v-if="data.result.length > 1">
                     <template #input>
                       <van-button type="danger"
                         :disabled="!dataItem"
@@ -203,7 +203,7 @@
                   <van-field name="radio" label="排列方式">
                     <template #input>
                       <van-radio-group v-model="dataItem.layout_inline" direction="horizontal">
-                        <van-radio name="">继承</van-radio>
+                        <van-radio :name="0">继承</van-radio>
                         <van-radio :name="1">水平</van-radio>
                         <van-radio :name="2">垂直</van-radio>
                       </van-radio-group>

+ 1 - 1
src/pages/Manager/js/config.js

@@ -30,7 +30,7 @@ export function dataResult (opt) {
       { "title": "选项二", "memo": "" }
     ],
     "layout_align": "", // left 左对齐, right 右对齐
-    "layout_inline": 0, // 1 水平 2 垂直
+    "layout_inline": 0, // 0 继承 1 水平 2 垂直
     "val": "",  // 答案
     ...opt
   }

+ 13 - 3
src/pages/Manager/mixins/attribute.js

@@ -8,7 +8,8 @@ export default {
         list: true,
         attr: true,
         compt: false
-      }
+      },
+      attrRemoveItems: []
     }
   },
   computed: {
@@ -33,10 +34,10 @@ export default {
       } catch (err) {
       }
     },
-    async selectData(data) {
+    async selectData(data, i = 0) {
       try {
         this.$set(this, 'data', data)
-        let obj = data.result[0]
+        let obj = data.result[i]
         obj && this.selectItem(obj, true)
       } catch (err) {
         console.warn(err)
@@ -66,6 +67,9 @@ export default {
         })
         let result = this.data.result
         let index = null
+        if (result.length <= 1) {
+          throw new Error('最后一个题目,无法删除!')
+        }
         this.dataItem && result.some((item, i) => {
           if (item === this.dataItem) {
             index = i
@@ -73,6 +77,12 @@ export default {
           }
         })
         if (typeof index === 'number') {
+          if (this.dataItem.detail_id) {
+            if (!this.data.removeResult) {
+              this.$set(this.data, 'removeResult', [])
+            }
+            this.data.removeResult.push(this.dataItem)
+          }
           result.splice(index, 1)
           this.dataItem = null
         }

+ 54 - 9
src/pages/Manager/mixins/index.js

@@ -17,6 +17,9 @@ export default {
       listState: {
         loading: false,
         finished: true
+      },
+      disabled: {
+        save: false
       }
     };
   },
@@ -52,21 +55,30 @@ export default {
       this.loading.data = false
       return pm
     },
-    async inAttrData(item) {
+    async inAttrData(item, index) {
+      let pm
       try {
-        await this.onTipAttrState()
+        let b = index === undefined
+        if (b) {
+          await this.onTipAttrState()
+        }
         let query = {
           topic_id: item.id
         }
         let res = await api.apiGetVolumeInfo(query)
         let data = res.data
-        this.selectData(data)
+        this.selectData(data, index)
+        pm = Promise.resolve(res)
       } catch (err) {
+        pm = Promise.reject(err)
+        if (err) {
+          this.data = null
+        }
         console.warn(err)
       }
+      return pm
     },
-    async btnSubmit() {
-      this.loading.submit = true
+    async btnSave () {
       let ld = null
       try {
         await this.$dialog.confirm({
@@ -74,22 +86,55 @@ export default {
           message: '确认保存吗?',
         })
         ld = this.$toast.loading({ message: '保存中...', duration: 0 })
-        let configKey = ['detail_id', 'content', 'layout_align', 'layout_inline', 'required', 'title', 'type', 'val']
+        let res = await this.btnSubmit(true)
+        let data = res.data
+        let index = null
+        let result = this.data.result
+        this.dataItem && result.some((item, i) => {
+          if (item === this.dataItem) {
+            index = i
+            return true
+          }
+        })
+        await Promise.all([
+          this.inAttrData({ id: data.topic_id }, index),
+          this.inData()
+        ])
+        this.$toast.success(res.message)
+      } catch (err) {
+      }
+      ld && ld.clear()
+    },
+    async btnSubmit(b) {
+      let pm
+      this.loading.submit = true
+      let ld = null
+      try {
+        ld = !b && this.$toast.loading({ message: '保存中...', duration: 0 })
+        let configKey = ['detail_id', 'content', 'layout_align', 'layout_inline', 'required', 'title', 'type', 'val', 'visual']
         let configTypeArr = ['checkbox']
         let obj = JSON.parse(JSON.stringify(this.data))
-        obj.result = obj.result.map(item => {
-          let rst = {}
+        // 增加删除状态
+        obj.removeResult && obj.removeResult.forEach(item => item.visual = 0)
+        let result = [].concat(obj.result, obj.removeResult || [])
+        obj.result = result.map((item, rank) => {
+          let rst = { rank }
           configKey.forEach(k => rst[k] = item[k])
           rst.val = configTypeArr.indexOf(item.type) !== -1 ? [] : ''
           return rst
         })
+        delete obj.removeResult
+        delete this.data.removeResult
         let res = await api.apiPostVolumeResult(obj)
-        this.$toast.success(res.message)
+        !b && this.$toast.success(res.message)
+        pm = Promise.resolve(res)
       } catch (error) {
+        pm = Promise.reject(error)
         console.log(error)
       }
       ld && ld.clear()
       this.loading.submit = false
+      return pm
     }
   }
 }