linwenxin пре 1 година
родитељ
комит
e911eebe64

+ 33 - 0
src/api/setActivity.js

@@ -0,0 +1,33 @@
+import request, { postBlob, getBlob, handleImport } from '@/utils/request'
+
+export function promotionQuestionnaireList(data) {
+  return request({
+    url: `/promotion/questionnaire/list?moduleId=${data.moduleId}`,
+    method: 'post',
+    data
+  })
+}
+
+export function promotionQuestionnaireExport(data, name) {
+  return postBlob({
+    url: '/promotion/questionnaire/export',
+    data,
+    name
+  })
+}
+
+export function promotionQuestionnaireAdd(data) {
+  return request({
+    url: `/promotion/questionnaire/add`,
+    method: 'post',
+    data
+  })
+}
+
+export function promotionQuestionnaireDetail(params) {
+  return request({
+    url: '/promotion/questionnaire/detail',
+    method: 'post',
+    params
+  })
+}

+ 0 - 1
src/components/template/editTable.js

@@ -78,7 +78,6 @@ export default {
                 } else {
                   tableData.splice(index, 1)
                 }
-                this.isEditTableIndex = -1
               }}>{attributes?.delText || '删除'}</el-button>}
             </div>
           }

+ 0 - 206
src/mixin/question_mixin.js

@@ -1,206 +0,0 @@
-import ImageUpload from '@/components/file-upload'
-export default {
-  components: {
-    ImageUpload
-  },
-  data() {
-    return {
-      formData: {
-        name: "",
-        type: "SINGLE",
-        options: [],
-      },
-      formDialog: false,
-      formUpBool: true,
-    }
-  },
-  watch: {
-    "formData.type"(newVal, oldVal) {
-      if (!this.formUpBool) {
-        return
-      }
-      if (!!~["PICK"].indexOf(this.formData.type)) {
-        this.formData.options = [
-          {
-            option_name: "A",
-            option_value: "正确",
-            option_files: []
-          },
-          {
-            option_name: "B",
-            option_value: "错误",
-            option_files: []
-          }
-        ]
-      } else if (oldVal === "PICK") {
-        this.formData.options = []
-      }
-    },
-  },
-  computed: {
-    formItems() {
-      return [{
-        md: 24,
-        isShow: true,
-        name: 'el-input',
-        attributes: { placeholder: '请输入' },
-        formItemAttributes: {
-          label: '名称',
-          prop: 'name',
-          rules: []
-        },
-      },
-      {
-        md: 24,
-        isShow: true,
-        name: 'el-radio',
-        options: [{ label: "单选题", value: "SINGLE" }, { label: "多选题", value: "MULTI" }, { label: "判断题", value: "PICK" }],
-        attributes: { filterable: true, placeholder: '请选择', disabled: this.formData.id ? true : false },
-        formItemAttributes: {
-          label: '类型',
-          prop: 'type',
-          rules: [{ required: true, message: '请选择', trigger: 'blur' }]
-        }
-      },
-      {
-        md: 24,
-        isShow: true,
-        name: 'el-radio',
-        options: [{ label: "是", value: "1" }, { label: "否", value: "0" }],
-        attributes: { filterable: true, placeholder: '请选择', disabled: this.formData.id ? true : false },
-        formItemAttributes: {
-          label: '是否必填',
-          prop: 'type',
-          rules: [{ required: true, message: '请选择', trigger: 'blur' }]
-        }
-      },
-      ...(() => {
-        if (!!~["SINGLE", "MULTI"].indexOf(this.formData.type)) {
-          // 单选,多选
-          return [{
-            md: 24,
-            isShow: true,
-            name: 'slot-component',
-            attributes: { placeholder: '请输入' },
-            formItemAttributes: {
-              label: '试题选项',
-              prop: 'options',
-              rules: [{ required: true, message: '请添加选项', trigger: 'blur' }]
-            },
-            render: (h, { props, onInput }) => {
-              var { value } = props
-              return (
-                <div>
-                  <div>
-                    <el-button size="mini" onClick={() => {
-                      this.formData.options.push({
-                        option_name: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "N", "M", "O", "P", "Q"][this.formData.options.length],
-                        option_value: "",
-                        option_files: []
-                      })
-                    }} type="primary">添加</el-button>
-                  </div>
-                  {this.formData.options.map((item, index) => {
-                    return (
-                      <div>
-                        <div style="display: flex;justify-content: space-between;">
-                          <span style="font-weight: bold;">选项:{this.formData.options[index].option_name}</span>
-                          <span style="color: red;" onClick={() => {
-                            this.formData.options.splice(index, 1)
-                          }}>删除</span>
-                        </div>
-                        <div>
-                          <el-input type="textarea" rows={2} placeholder="请输入内容" value={this.formData.options[index].option_value} onInput={(val) => { this.formData.options[index].option_value = val }}></el-input>
-                        </div>
-                        <br />
-                        <div>
-                          <ImageUpload fileList={this.formData.options[index].option_files} uid={`questionFiles_ImageUpload_${index}`} limit={3} isUpdate={false} />
-                        </div>
-                        <br />
-                      </div>
-                    )
-                  })}
-                </div>
-              )
-            }
-          }]
-        }else if(!!~["PICK"].indexOf(this.formData.type)){
-          // 填写
-          return [{
-            md: 24,
-            isShow: true,
-            name: 'slot-component',
-            attributes: { placeholder: '请输入' },
-            formItemAttributes: {
-              label: '试题选项',
-              prop: 'options',
-              rules: [{ required: true, message: '请添加选项', trigger: 'blur' }]
-            },
-            render: (h, { props, onInput }) => {
-              var { value } = props
-              return (
-                <div>
-                  {this.formData.options.map((item, index) => {
-                    return (
-                      <div>
-                        <div style="display: flex;justify-content: space-between;">
-                          <span style="font-weight: bold;">选项:{this.formData.options[index].option_name}</span>
-                        </div>
-                        <div>
-                          <el-input type="textarea" rows={2} placeholder="请输入内容" value={this.formData.options[index].option_value} onInput={(val) => { this.formData.options[index].option_value = val }}></el-input>
-                        </div>
-                      </div>
-                    )
-                  })}
-                </div>
-              )
-            }
-          }]
-        }
-        return []
-      })(),
-      ]
-    },
-  },
-  methods: {
-    // 打开弹窗
-    openSubjectDialog() {
-      this.formDialog = true
-      this.$nextTick(() => {
-        this.formUpBool = true
-      })
-    },
-    formCancel() {
-      this.$refs?.formRef?.$refs.inlineForm.clearValidate()
-      this.$data.formData = this.$options.data().formData
-      this.formDialog = false
-    },
-    formConfirm() {
-      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
-        if (valid) {
-          var data = {
-            ...this.formData,
-            options: JSON.stringify(this.formData.options),
-          };
-          // questionSave(data).then(res => {
-          //   this.$message({
-          //     type: 'success',
-          //     message: '保存成功!'
-          //   })
-          //   this.formCancel()
-          //   this.$refs.pageRef.refreshList()
-          //   this.$emit("fujipagelist")
-          // })
-        }
-      })
-    },
-    fanzhuanjiexi(row, cb) {
-      // questionDetail({ id: row.id }).then(res => {
-      //   Object.assign(this.formData, res.data, {
-      //     options: JSON.parse(res.data.options),
-      //   })
-      //   cb && cb()
-      // })
-    },
-  }
-}

+ 211 - 0
src/views/mallManagement/setActivity/answer.vue

@@ -0,0 +1,211 @@
+<template>
+  <el-dialog title="新增活动内容" width="800px" :modal="true" :visible.sync="showBool" :before-close="formCancel">
+    <zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
+      <zj-form-module title="" label-width="100px" :showHade="false" :form-data="formData"
+        :form-items="formItems">
+      </zj-form-module>
+    </zj-form-container>
+    <div slot="footer" class="dialog-footer">
+      <el-button size="mini" @click="formCancel">取 消</el-button>
+      <el-button size="mini" @click="formConfirm">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import ImageUpload from '@/components/file-upload'
+export default {
+  props:{
+    defaultData:{
+      type: Object,
+      default: ()=>({}),
+    },
+  },
+  components: {
+    ImageUpload
+  },
+  data() {
+    return {
+      showBool:true,
+      formData: Object.assign({
+        question: "",
+        type: 1,
+        isRequire: true,
+        answer: [],
+      }, this.defaultData),
+    }
+  },
+  computed: {
+    formItems() {
+      return [{
+        md: 24,
+        name: 'slot-component',
+        formItemAttributes: {
+          label: '',
+          prop: '',
+        },
+        render: (h, { props, onInput }) => {
+          return <div/>
+        }
+      },{
+        md: 24,
+        isShow: true,
+        name: 'el-input',
+        attributes: { placeholder: '请输入' },
+        formItemAttributes: {
+          label: '名称',
+          prop: 'question',
+          rules: [{ required: true, message: '请输入', trigger: 'blur' }]
+        },
+      },
+      {
+        md: 24,
+        isShow: true,
+        name: 'el-radio',
+        options: [{ label: "单选题", value: 1 }, { label: "多选题", value: 2 }, { label: "填写", value: 3 }],
+        attributes: { filterable: true, placeholder: '请选择', disabled: this.formData.id ? true : false },
+        formItemAttributes: {
+          label: '类型',
+          prop: 'type',
+          rules: [{ required: true, message: '请选择', trigger: 'blur' }]
+        },
+        events: {
+          change: (newVal) => {
+            if (!!~[1,2].indexOf(newVal)) {
+              this.formData.answer = []
+            } else {
+              setTimeout(() => {
+                this.formData.answer = [
+                  {
+                    option_name: "",
+                    option_value: "",
+                    option_files: [],
+                    option_limit: '',
+                  }
+                ]
+              }, 250);
+            }
+          }
+        }
+      },
+      {
+        md: 24,
+        isShow: true,
+        name: 'el-radio',
+        options: [{ label: "是", value: true }, { label: "否", value: false }],
+        attributes: { filterable: true, placeholder: '请选择', disabled: this.formData.id ? true : false },
+        formItemAttributes: {
+          label: '是否必填',
+          prop: 'isRequire',
+          rules: [{ required: true, message: '请选择', trigger: 'blur' }]
+        }
+      },
+      ...(()=>{
+        if(!!~[1, 2].indexOf(this.formData.type)){
+          return [{
+            md: 24,
+            name: 'slot-component',
+            attributes: { placeholder: '请输入' },
+            formItemAttributes: {
+              label: '试题选项',
+              prop: 'answer',
+              rules: [{ required: true, message: '请添加选项', trigger: 'blur' }]
+            },
+            render: (h, { props, onInput }) => {
+              var { value } = props
+              return (
+                <div>
+                  <div>
+                    <el-button size="mini" onClick={() => {
+                      this.formData.answer.push({
+                        option_name: "",
+                        option_value: "",
+                        option_files: [],
+                        option_limit: '',
+                      })
+                    }} type="primary">添加</el-button>
+                  </div>
+                  {this.formData.answer.map((item, index) => {
+                    item.option_name = `选项${index + 1}`
+                    return (
+                      <div>
+                        <div style="display: flex;justify-content: space-between;">
+                          <span style="font-weight: bold;">{this.formData.answer[index].option_name}</span>
+                          <span style="color: red;" onClick={() => {
+                            this.formData.answer.splice(index, 1)
+                          }}>删除</span>
+                        </div>
+                        <div class="redbordererr">
+                          <el-form-item
+                            label=""
+                            lebel-width="0px"
+                            prop={`answer.${index}.option_value`}
+                            rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
+                          >
+                            <el-input type="textarea" rows={2} placeholder="请输入内容" value={this.formData.answer[index].option_value} onInput={(val) => { this.formData.answer[index].option_value = val }}></el-input>
+                          </el-form-item>
+                        </div>
+                        <div style="margin-top:5px">
+                          <ImageUpload fileList={this.formData.answer[index].option_files} uid={`questionFiles_ImageUpload_${index}`} limit={1} isUpdate={false} />
+                        </div>
+                        <br />
+                      </div>
+                    )
+                  })}
+                </div>
+              )
+            }
+          }]
+        }
+        return [{
+          md: 24,
+          name: 'slot-component',
+          attributes: { placeholder: '请输入' },
+          formItemAttributes: {
+            label: '限制字数',
+            prop: 'answer',
+            rules: []
+          },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return (
+              <div>
+                {this.formData.answer.map((item, index) => {
+                  return (
+                    <div>
+                      <div>
+                        <el-input type='number' placeholder="请输入限制长度" value={this.formData.answer[index].option_limit} onInput={(val) => { this.formData.answer[index].option_limit = val }}></el-input>
+                      </div>
+                    </div>
+                  )
+                })}
+              </div>
+            )
+          }
+        }]
+      })()]
+    },
+  },
+  methods: {
+    formCancel() {
+      this.$emit("close", this.formData)
+    },
+    formConfirm() {
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if (valid) {
+          this.$emit("confirm", this.formData)
+        }
+      })
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+  ::v-deep .el-dialog__body{
+    padding: 30px 20px 0 20px !important
+  }
+  ::v-deep .dialog-footer{
+    padding: 0 !important
+  }
+</style>

+ 521 - 0
src/views/mallManagement/setActivity/index.vue

@@ -0,0 +1,521 @@
+<template>
+  <template-page ref="pageRef" :get-list="getList" :exportList="exportList" :table-attributes="tableAttributes"
+    :table-events="tableEvents" :options-evens-group="optionsEvensGroup"
+    :column-parsing="columnParsing" :operation="operation()">
+    <div class="cartographer">
+      <el-dialog title="新增" width="100%" :modal="false" :visible.sync="formDialog"
+        :before-close="formCancel">
+        <zj-form-container v-if="formDialog" ref="formRef" :form-data="formData" :styleSwitch="false">
+          <zj-form-module title="活动信息" label-width="120px" :form-data="formData"
+            :form-items="formItems">
+          </zj-form-module>
+          <zj-form-module title="活动填写内容" label-width="100px" :form-data="formData"
+            :form-items="formItems2">
+          </zj-form-module>
+        </zj-form-container>
+        <div slot="footer" class="dialog-footer">
+          <el-button size="mini" @click="formCancel">取 消</el-button>
+          <el-button size="mini" type="primary" @click="formConfirm">确 定</el-button>
+        </div>
+      </el-dialog>
+    </div>
+    <answer v-if="showQuestion" :defaultData="questionData" @close="questionClose" @confirm="questionConfirm"/>
+  </template-page>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import operation_mixin from '@/components/template/operation_mixin.js'
+import {promotionQuestionnaireList,promotionQuestionnaireExport,promotionQuestionnaireAdd,promotionQuestionnaireDetail} from "@/api/setActivity.js"
+import answer from "./answer.vue"
+import ImageUpload from '@/components/file-upload'
+import quillEditor from '@/components/v-quill-editor'
+import editTable from "@/components/template/editTable.js"
+export default {
+  components: { TemplatePage, answer, ImageUpload, quillEditor },
+  mixins: [import_mixin, operation_mixin, editTable],
+  data() {
+    return {
+      formDialog: false,
+      showQuestion: false,
+      questionData: {
+        rowIndex: -1
+      },
+      formData: {
+        "companyWechatId": "",
+        "companyWechatName": "",
+        "startTime": "",
+        "endTime": "",
+        "name": "",
+        "submitLimit": '',
+        "submitLimitBool": 0,
+        "qrcode": "",
+        "title": "",
+        "content": "",
+        "banner": [],
+        "detailImgs": [],
+        "promotionQuestionnaireItems": [],
+        "promotionQuestionnaireUsers": [],
+      },
+      // 表格属性
+      tableAttributes: {
+        // 启用勾选列
+        selectColumn: false
+      },
+      // 表格事件
+      tableEvents: {},
+    }
+  },
+  computed:{
+    // 事件组合
+    optionsEvensGroup() {
+      return [
+        [
+          [
+            this.optionsEvensAuth('add', {
+              click: this.addData
+            })
+          ]
+        ]
+      ]
+    },
+    formItems(){
+      return [
+        {
+          name: 'el-input',
+          md: 12,
+          attributes: { disabled: true, placeholder: '请选择' },
+          formItemAttributes: { label: '所属商户', prop: 'companyWechatName' }
+        },
+        {
+          name: 'el-date-picker',
+          md: 6,
+          attributes: {
+            disabled: !!this.formData.id,
+            style: { width: '100%' },
+            placeholder: '请选择',
+            'value-format': 'yyyy-MM-dd HH:mm:ss',
+          },
+          formItemAttributes: {
+            label: '活动开始日期',
+            prop: 'startTime',
+            rules: [{ required: true, message: '请选择', trigger: 'blur' }]
+          }
+        },
+        {
+          name: 'el-date-picker',
+          md: 6,
+          attributes: {
+            disabled: !!this.formData.id,
+            style: { width: '100%' },
+            placeholder: '请选择',
+            'value-format': 'yyyy-MM-dd HH:mm:ss',
+          },
+          formItemAttributes: {
+            label: '活动结束日期',
+            prop: 'endTime',
+            rules: [{ required: true, message: '请选择', trigger: 'blur' }]
+          }
+        },
+        {
+          name: 'el-input',
+          md: 12,
+          attributes: { disabled: !!this.formData.id, placeholder: '请选择' },
+          formItemAttributes: { 
+            label: '活动名称', 
+            prop: 'name',
+            rules: [{ required: true, message: '请填写', trigger: 'blur' }]
+          }
+        },
+        {
+          name: 'el-input',
+          md: 12,
+          attributes: { disabled: !!this.formData.id, placeholder: '请选择' },
+          formItemAttributes: { 
+            label: '二维码主题', 
+            prop: 'title',
+            rules: [{ required: true, message: '请填写', trigger: 'blur' }]
+          }
+        },
+        {
+          md: 24,
+          name: 'slot-component',
+          attributes: { placeholder: '请输入' },
+          formItemAttributes: {
+            label: '提交次数',
+            prop: 'submitLimitBool',
+            rules: [{ required: true, message: '请选择', trigger: 'blur' }]
+          },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            console.log(value)
+            return (
+              <div class="redbordererr" style="">
+                <el-form-item label="" label-width="0px" prop="submitLimit" rules={value ? [{ required: true, message: '请填写', trigger: 'blur' }] : []}>
+                  <el-radio-group disabled={!!this.formData.id} value={value} onInput={onInput}>
+                    <el-radio disabled={!!this.formData.id} label={0}>不限制</el-radio>
+                    <el-radio disabled={!!this.formData.id} label={1}>
+                        限制{value?[<el-input disabled={!!this.formData.id} style="margin: 0 10px;width:100px;" value={this.formData.submitLimit} onInput={(val)=>{this.formData.submitLimit = val}} type="number" placeholder="请输入内容"></el-input>,<span>次</span>]:null}
+                    </el-radio>
+                  </el-radio-group>
+                </el-form-item>
+              </div>
+            )
+          }
+        },
+        {
+          md: 24,
+          name: 'slot-component',
+          attributes: { placeholder: '请输入' },
+          formItemAttributes: {
+            label: '首页广告图',
+            prop: 'banner',
+            rules: [{ required: true, message: '请上传', trigger: 'blur' }]
+          },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return (
+              <ImageUpload isEdit={!this.formData.id} fileList={this.formData.banner} uid={`questionFiles_bananner`} limit={1} isUpdate={false} />
+            )
+          }
+        },
+        {
+          md: 24,
+          name: 'slot-component',
+          attributes: { placeholder: '请输入' },
+          formItemAttributes: {
+            label: '活动详情图',
+            prop: 'detailImgs',
+            rules: [{ required: true, message: '请上传', trigger: 'blur' }]
+          },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return (
+              <ImageUpload isEdit={!this.formData.id} fileList={this.formData.detailImgs} uid={`questionFiles_detaidetailImgsdetailImgs`} limit={100} isUpdate={false} />
+            )
+          }
+        },
+        {
+          md: 24,
+          name: 'slot-component',
+          attributes: { placeholder: '请输入' },
+          formItemAttributes: {
+            label: '活动说明',
+            prop: 'content',
+            rules: []
+          },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return (
+              <quillEditor disabled={!!this.formData.id} value={value} onInput={onInput}></quillEditor>
+            )
+          }
+        },
+        {
+          name: 'slot-component',
+          md: 24,
+          formItemAttributes: { label: '提交记录', prop: 'promotionQuestionnaireUsers' },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return this.convertTableJson(value, [
+              {
+                columnAttributes: {
+                  label: '*姓名',
+                  prop: 'name',
+                },
+                editRender: (h, { row, column, index }) => {
+                  return (
+                    <div class="redbordererr">
+                      <el-form-item label="" label-width="0px" prop={`promotionQuestionnaireUsers.${index}.${column.columnAttributes.prop}`} rules={[{ required: true, message: '请填写', trigger: 'blur' }]}>
+                        <el-input value={row[column.columnAttributes.prop]} onInput={val => { row[column.columnAttributes.prop] = val }} placeholder="请输入内容"></el-input>
+                      </el-form-item>
+                    </div>
+                  )
+                },
+                viewRender: (h, { row, column, index }) => {
+                  return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '*电话',
+                  prop: 'mobile',
+                },
+                editRender: (h, { row, column, index }) => {
+                  return (
+                    <div class="redbordererr">
+                      <el-form-item label="" label-width="0px" prop={`promotionQuestionnaireUsers.${index}.${column.columnAttributes.prop}`} rules={[{ required: true, message: '请填写', trigger: 'blur' }]}>
+                        <el-input value={row[column.columnAttributes.prop]} onInput={val => { row[column.columnAttributes.prop] = val }} placeholder="请输入内容"></el-input>
+                      </el-form-item>
+                    </div>
+                  )
+                },
+                viewRender: (h, { row, column, index }) => {
+                  return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '*时间(分钟)',
+                  prop: 'min',
+                },
+                editRender: (h, { row, column, index }) => {
+                  return (
+                    <div class="redbordererr">
+                      <el-form-item label="" label-width="0px" prop={`promotionQuestionnaireUsers.${index}.${column.columnAttributes.prop}`} rules={[{ required: true, message: '请填写', trigger: 'blur' }]}>
+                        <el-input type="number" value={row[column.columnAttributes.prop]} onInput={val => { row[column.columnAttributes.prop] = val }} placeholder="请输入内容"></el-input>
+                      </el-form-item>
+                    </div>
+                  )
+                },
+                viewRender: (h, { row, column, index }) => {
+                  return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '*备注',
+                  prop: 'remark',
+                },
+                editRender: (h, { row, column, index }) => {
+                  return (
+                    <div class="redbordererr">
+                      <el-form-item label="" label-width="0px" prop={`promotionQuestionnaireUsers.${index}.${column.columnAttributes.prop}`} rules={[{ required: true, message: '请填写', trigger: 'blur' }]}>
+                        <el-input value={row[column.columnAttributes.prop]} onInput={val => { row[column.columnAttributes.prop] = val }} placeholder="请输入内容"></el-input>
+                      </el-form-item>
+                    </div>
+                  )
+                },
+                viewRender: (h, { row, column, index }) => {
+                  return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
+                }
+              },
+            ], {
+              isEdit: !this.formData.id,
+              isAdd: !this.formData.id,
+              isDel: !this.formData.id,
+            }, {
+              add: ()=>{
+                this.formData.promotionQuestionnaireUsers.push({
+                  "min": '',
+                  "mobile": "",
+                  "name": "",
+                  "promotionQuestionnaireId": "",
+                  "remark": ""
+                })
+                this.isEditTableIndex = this.formData.promotionQuestionnaireUsers.length - 1
+              },
+              delete: ({ row, column, index }, cb) => {
+                if (this.isEditTableIndex == index) {
+                  this.isEditTableIndex = -1
+                } else if (this.isEditTableIndex > index) {
+                  this.isEditTableIndex--
+                }
+                cb && cb()
+              },
+              verify: ({ row, column, index }, isEditTableIndex) => {
+                return new Promise(r => {
+                  if (isEditTableIndex > -1) {
+                    this.$refs.formRef.validateField([
+                      `promotionQuestionnaireUsers.${isEditTableIndex}.min`,
+                      `promotionQuestionnaireUsers.${isEditTableIndex}.mobile`,
+                      `promotionQuestionnaireUsers.${isEditTableIndex}.name`,
+                      `promotionQuestionnaireUsers.${isEditTableIndex}.remark`,
+                    ], (v) => {
+                      if (v) {
+                        r(true)
+                      } else {
+                        r(false)
+                      }
+                    })
+                  } else {
+                    r(true)
+                  }
+                })
+              },
+            })
+          }
+        },
+      ]
+    },
+    formItems2(){
+      return [{
+        md: 24,
+        name: 'slot-component',
+        attributes: { placeholder: '请输入' },
+        formItemAttributes: {
+          label: '',
+          'label-width': '0px',
+          prop: 'promotionQuestionnaireItems',
+          rules: []
+        },
+        render: (h, { props, onInput }) => {
+          return (
+            <div>
+              <div>
+                <el-button type="primary" onClick={()=>{ this.showQuestion = true }}>新增</el-button>
+              </div>
+              <div>
+                <zj-table
+                  columns={[{
+                    columnAttributes: {
+                      label: '填写内容',
+                      prop: '',
+                    },
+                    render: (h, { row, column, index }) => {
+                      return (
+                        <div style="padding:6px;">
+                          <div style="font-weight:bold;">{row.isRequire?<span style="color:red">*</span> : null}{index+1}、{row.question}({['单选','多选','填写'][row.type-1]})</div>
+                          {[
+                          <div>
+                            {row.answer.map(item=><el-radio disabled label="">{item.option_value}</el-radio>)}
+                          </div>,
+                          <div>
+                            {row.answer.map(item=><el-checkbox disabled label="">{item.option_value}</el-checkbox>)}
+                          </div>,
+                          <div>
+                            <el-input disabled placeholder="请输入内容"></el-input>
+                          </div>
+                          ][row.type-1]}
+                        </div>
+                      )
+                    },
+                  },
+                  ...(()=>{
+                    if(!this.formData.id){
+                      return[{
+                        columnAttributes: {
+                          label: '操作',
+                          prop: '',
+                          width: '200px'
+                        },
+                        render: (h, { row, column, index }) => {
+                          return (
+                            <div style="padding-left:5px">
+                              <el-button size="mini" onClick={()=>{
+                                this.questionData = {
+                                  ...JSON.parse(JSON.stringify(row)),
+                                  rowIndex: index
+                                }
+                                this.$nextTick(()=>{
+                                  this.showQuestion = true
+                                })
+                              }}>编辑</el-button>
+                              <el-button size="mini" onClick={()=>{
+                                this.formData.promotionQuestionnaireItems.push({...JSON.parse(JSON.stringify(row))})
+                              }}>复制</el-button>
+                              <el-button size="mini" onClick={()=>{
+                                this.formData.promotionQuestionnaireItems.splice(index, 1)
+                              }}>删除</el-button>
+                            </div>
+                          )
+                        },
+                      }]
+                    }
+                    return []
+                  })()]}
+                  table-data={this.formData.promotionQuestionnaireItems}
+                />
+              </div>
+            </div>
+          )
+        }
+      }]
+    }
+  },
+  methods: {
+    // 列表请求函数
+    getList:promotionQuestionnaireList,
+    // 列表导出函数
+    exportList: promotionQuestionnaireExport,
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      return defaultData
+    },
+    // 操作按钮
+    operation() {
+      return this.operationBtn({
+        detail: {
+          click: ({ row, index, column }) => {
+            promotionQuestionnaireDetail({
+              id: row.id
+            }).then(res=>{
+              this.formData = {
+                ...res.data,
+                submitLimitBool: res.data.submitLimit == -1 ? 0 : 1,
+                promotionQuestionnaireItems:res.data.promotionQuestionnaireItems.map(item=>{
+                  return {
+                    ...item,
+                    answer: JSON.parse(item?.answer||"[]")
+                  }
+                }),
+                banner:res.data?.banner?.split(",").map(url=>({url})),
+                detailImgs:res.data?.detailImgs?.split(",").map(url=>({url}))
+              }
+              this.$nextTick(()=>{
+                this.formDialog = true
+              })
+            })
+          }
+        },
+      })
+    },
+    // 新增
+    addData(){
+      this.formDialog = true
+    },
+    // 关闭弹窗
+    formCancel(){
+      this.formDialog = false
+      this.$data.formData = this.$options.data().formData
+    },
+    // 确定
+    formConfirm() {
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if (valid) {
+          var data = {
+            ...this.formData,
+            banner:this.formData.banner.map(item=>item.url).join(","),
+            detailImgs:this.formData.detailImgs.map(item=>item.url).join(","),
+            promotionQuestionnaireItems:this.formData.promotionQuestionnaireItems.map(item=>{
+              return {
+                ...item,
+                answer: JSON.stringify(item.answer)
+              }
+            }),
+            submitLimit: !!this.formData.submitLimitBool ? this.formData.submitLimit : -1
+          }
+          promotionQuestionnaireAdd(data).then(res=>{
+            this.$message({
+							type: 'success',
+							message: `添加成功成功!`,
+						})
+						this.$refs.pageRef.refreshList()
+            this.formCancel()
+          })
+        }
+      })
+    },
+    // 关闭题目编辑
+    questionClose(){
+      this.showQuestion = false
+      this.questionData = {
+        rowIndex: -1
+      }
+    },
+    // 确定题目编辑
+    questionConfirm(data){
+      if(data.rowIndex==-1){
+        this.formData.promotionQuestionnaireItems.push({...data})
+      }else{
+        this.formData.promotionQuestionnaireItems.splice(data.rowIndex, 1, {...data})
+      }
+      this.questionClose()
+    }
+  }
+}
+</script>
+
+<style lang="scss">
+</style>