沈丘营商办后台前端项目
wjt
2024-06-19 ece2de514ed9f80d2fa833b55b2a5ad6a2d683f8
src/views/infomanger/banner/index.vue
@@ -1,9 +1,207 @@
<template>
  <div class="app-container">
    <el-row>
      <el-col :span="24">
        <el-button></el-button>
      </el-col>
    </el-row>
    <div class="form-content">
      <el-form inline :model="form.questionList" label-width="75px" :rules="rules">
        <div
          class="border"
          v-for="(item, index) in form.questionList"
          :key="index"
        >
          <!-- <div class="title-project">
            评价项{{ index + 1 }}
          </div> -->
          <div class="close-icon" @click="removeList(index)">
            <el-icon><Close /></el-icon>
          </div>
          <el-row>
            <el-col :span="12">
              <el-form-item :label="`评价项${index + 1}`" style="width: 100%" :prop="item.questionName">
                <el-input
                  placeholder="请输入"
                  v-model="item.questionName"
                ></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="得分" :prop="item.questionScore">
                <el-input-number
                  placeholder="请输入"
                  v-model="item.questionScore"
                  :min="1"
                  :max="10"
                  controls-position="right"
                ></el-input-number>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="评价类型" :prop="item.questionType">
                <el-radio-group
                  placeholder="请输入"
                  v-model="item.questionType"
                >
                  <el-radio :value="2">打分</el-radio>
                  <el-radio :value="1">选择</el-radio>
                </el-radio-group>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row v-if="item.questionType === 2">
            <el-form-item>
              <el-rate  disabled :max="item.questionScore"  v-model="item.questionScore"></el-rate>
            </el-form-item>
          </el-row>
          <el-row v-if="item.questionType === 1">
            <el-col :span="24">
              <el-form-item label="选项" style="width: 100%;"  :prop="item.answerList">
                  <div
                    v-for="(ele, childIndex) in item.answerList"
                    :key="index"
                    style="width: 100%;"
                    class="set-flex"
                  >
                    <div style="font-size: 14px;margin-right: 10px">{{ childIndex + 1 }}</div>
                    <el-input
                      v-model="ele.answerName"
                      placeholder="请输入"
                       style="width: 65%; margin-right: 10px"
                    ></el-input>
                    <el-checkbox v-model="ele.isScore" @change="changeValue($event, index, childIndex)"  :true-value="1" :false-value="0" :label="'是否计分'"/>
                    <el-button type="danger" size="small" @click="removeArrlist(index, childIndex)" style="margin-left: 10px;">移除</el-button>
                  </div>
                <!-- </el-radio-group> -->
                <div class="mt10">
                  <el-button type="primary" plain @click="addOptions(index, item.questionName)">添加选项</el-button>
                </div>
              </el-form-item>
            </el-col>
          </el-row>
        </div>
      </el-form>
      <div class="center mt20 fixed">
        <el-button type="primary" @click="addContent">添加评价项</el-button>
        <el-button @click="save" type="primary" >保存内容</el-button>
      </div>
    </div>
  </div>
</template>
</template>
<script lang="ts" setup>
import { listEvaluate, saveEvaluate } from '@/api/system/company/company'
import { ElMessage, ElMessageBox} from 'element-plus'
const tableData = ref([])
const addNewRef = ref()
const form: any = ref({
  questionList: []
})
const rules = ref({
  questionName: [
    {
      required: true,
      message: '请输入问题',
      trigger: 'blur'
    }
  ]
})
function getListEvaluate() {
  listEvaluate().then((val) => {
    form.value.questionList = val.data.questionList
  })
}
function addContent() {
  form.value.questionList.push({
    questionStatus: 0,
    questionType: 2,
    questionScore: 5,
    answerList: []
  })
}
function addOptions(index: number, name){
  if(!form.value.questionList[index].answerList) {
    form.value.questionList[index].answerList = []
  }
  form.value.questionList[index].answerList.push({
    questionName: name
  })
}
function save() {
  saveEvaluate({questionList: form.value.questionList}).then(val => {
    ElMessage.success('保存成功')
  })
}
function changeValue(event, index, childIndex) {
  // form.value.questionList[index].isScore = event.target.
  form.value.questionList[index].answerList.forEach((item: { isScore: number }) => {
    item.isScore = 0
  })
  form.value.questionList[index].answerList[childIndex].isScore = 1
}
function removeList(index) {
  ElMessageBox.confirm('确认移除该评价项?', '提示', {
      confirmButtonText: '确认',
      cancelButtonText: '取消',
      type: 'danger',
    }).then(val => {
      form.value.questionList.splice(index, 1)
    })
}
function removeArrlist(index: string | number, childIndex: any) {
  form.value.questionList[index].answerList.splice(childIndex, 1)
}
getListEvaluate()
</script>
<style scoped lang="scss">
.form-content {
  width: 80%;
  padding-bottom: 150px;
  margin: 0 auto;
  // border: 1px solid #e2e2e2;
}
.border {
  // border: 1px solid #e2e2e2;
  margin-bottom: 10px;
  padding: 20px 30px 0;
  position: relative;
  :deep() {
    .el-form-item__label{
      font-weight: 500
    }
  }
}
.close-icon {
  position: absolute;
  right: 10px;
  top: 10px;
  cursor: pointer;
}
.add-button {
  text-align: center;
  border: 1px dotted #979797;
  line-height: 40px;
  cursor: pointer;
  border-radius: 5px;
}
.set-flex{
  display: flex;
  justify-content: flex-start;
  margin-top: 10px
}
.center{
  text-align: center;
}
.fixed{
  background-color: white;
  position: sticky;
  bottom: 0;
}
.title-project{
  font-weight: 700;
  color: #606266;
  margin-bottom: 10px
}
</style>