linwei
2024-01-16 67e04d39f0dada85f2fa7a855058d7424c3faf35
物业评分
5 files added
888 ■■■■■ changed files
src/api/subjectChoices/subjectChoices.js 49 ●●●●● patch | view | raw | blame | history
src/api/subjectOption/subjectOption.js 50 ●●●●● patch | view | raw | blame | history
src/views/exam/addsubject.vue 243 ●●●●● patch | view | raw | blame | history
src/views/exam/subject.vue 340 ●●●●● patch | view | raw | blame | history
src/views/property/components/propertyEdit.vue 206 ●●●●● patch | view | raw | blame | history
src/api/subjectChoices/subjectChoices.js
New file
@@ -0,0 +1,49 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
  return request({
    url: '/api/blade-subjectChoices/subjectChoices/page',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    }
  })
}
export const getDetail = (id) => {
  return request({
    url: '/api/blade-subjectChoices/subjectChoices/detail',
    method: 'get',
    params: {
      id
    }
  })
}
export const remove = (ids) => {
  return request({
    url: '/api/blade-subjectChoices/subjectChoices/remove',
    method: 'post',
    params: {
      ids,
    }
  })
}
export const add = (row) => {
  return request({
    url: '/api/blade-subjectChoices/subjectChoices/submit',
    method: 'post',
    data: row
  })
}
export const update = (row) => {
  return request({
    url: '/api/blade-subjectChoices/subjectChoices/submit',
    method: 'post',
    data: row
  })
}
src/api/subjectOption/subjectOption.js
New file
@@ -0,0 +1,50 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
  return request({
    url: '/api/blade-subjectOption/subjectOption/list',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    }
  })
}
export const getDetail = (id) => {
  return request({
    url: '/api/blade-subjectOption/subjectOption/detail',
    method: 'get',
    params: {
      id
    }
  })
}
export const remove = (ids) => {
  return request({
    url: '/api/blade-subjectOption/subjectOption/remove',
    method: 'post',
    params: {
      ids,
    }
  })
}
export const add = (row) => {
  return request({
    url: '/api/blade-subjectOption/subjectOption/submit',
    method: 'post',
    data: row
  })
}
export const update = (row) => {
  return request({
    url: '/api/blade-subjectOption/subjectOption/submit',
    method: 'post',
    data: row
  })
}
src/views/exam/addsubject.vue
New file
@@ -0,0 +1,243 @@
<template>
  <el-dialog :title="this.id ? '修改' : '新增'" width="60%" modal-append-to-body="false" append-to-body="true"
    :close-on-click-model="true" :visible.sync="visible" @close="closeDialog">
    <avue-form ref="form" :option="option" v-model="form" @submit="submit"></avue-form>
  </el-dialog>
</template>
<script>
  import {
    getList,
    add
  } from "@/api/subjectChoices/subjectChoices";
  export default {
    name: "add",
    data() {
      return {
        inputs: {
          input1: 1,
        },
        editFlag: false,
        optionContentAId: null,
        optionContentBId: null,
        optionContentCId: null,
        optionContentDId: null,
        optionContentEId: null,
        arrContent: ["1"],
        list: [{
            data: 1,
          },
          {
            data: 1,
          },
          {
            data: 1,
          },
        ],
        visible: false,
        choicesType: "0",
        loading: false,
        form: {},
        option: {
          height: "auto",
          calcHeight: 80,
          tip: false,
          searchShow: true,
          searchMenuSpan: 6,
          border: true, //liu
          stripe: true,
          align: "center",
          index: true,
          selection: true,
          viewBtn: true,
          defaultExpandAll: true,
          dialogClickModal: false,
          column: [{
              label: "类型",
              prop: "choicesType",
              slot: true,
              type: "select",
              dicData: [{
                  label: "单选题",
                  value: "0",
                },
                {
                  label: "多选题",
                  value: "1",
                },
                {
                  label: "填空题",
                  value: "3",
                },
              ],
              rules: [{
                required: true,
                message: "请选择类型",
                trigger: "blur",
              }, ],
              span: 24,
            },
            {
              label: "题目名称",
              prop: "subjectName",
              search: true,
              type: "textarea",
              rules: [{
                required: true,
                message: "请输入题目名称",
                trigger: "blur",
              }, ],
              span: 24,
            }, {
              label: '选项分值',
              prop: 'score',
              type: 'input',
            },
            {
              label: "题目大题",
              prop: "categoryName",
              slot: true,
              width: 96
            },
            {
              label: "题目小题",
              prop: "subclassName",
              slot: true,
              width: 96
            },
            {
              label: '选项内容',
              prop: 'subjectOptionList',
              type: 'dynamic',
              span: 24,
              children: {
                column: [{
                  label: '选项标题',
                  prop: 'optionName',
                  type: 'input',
                }, {
                  label: '选项分值',
                  prop: 'score',
                  type: 'input',
                }, {
                  label: '选项公式',
                  prop: 'formula',
                  type: 'input',
                }]
              }
            },
          ],
        },
        formCheckbox: {},
        formJudge: {},
        formFill: {},
        data: [{
          discussContent: '',
          optionContent: ''
        }, {
          discussContent: '',
          optionContent: ''
        }],
      };
    },
    computed: {
      // ...mapState({
      //   userInfo: (state) => state.user.userInfo,
      // }),
    },
    mounted() {},
    methods: {
      add() {
        this.editFlag = true
      },
      edit(row) {
        this.disCussFrom = row
        this.editFlag = true
      },
      //初始化
      inits(row) {
        // var formula = "2 + 3 * (4 - 1)"; // 要转换的字符串表达式
        // var result = eval(formula); // 调用eval()函数进行计算
        // console.log(result); // 输出结果:9
        console.table(row); // 输出结果为 "2"
        // this.id = id || 0;
        this.visible = true;
        this.form = row
        // this.list = [{
        //   data: 1
        // }];
        // if (this.id) {
        //   //查询题目信息
        //   this.getSubjectInfo(id);
        // }
      },
      //加一行
      addRows() {
        //获取已有行的数据
        // debugger;
        if (this.index == 6) {
          return;
        }
        this.index++;
        this.list.push({
          data: this.index,
        });
        this.inputs[`input${this.index + 1}`] = "";
      },
      //减一行
      deleteRows(index) {
        if (this.index == 1) {
          return;
        }
        this.index--;
        this.list.splice(index, 1);
      },
      //单选题提交(新增)数据
      submit(row, done, loading) {
        var that = this;
        add(row).then(
          () => {
            this.$message({
              type: "success",
              message: "操作成功!",
            });
            that.visible = false;
            that.$refs.form.resetForm();
            done();
          },
          (error) => {
            window.console.log(error);
            loading();
          }
        );
      },
      //关闭窗口清除数据
      closeDialog() {
        this.$refs.form.resetForm();
      },
    },
  };
</script>
<style scoped>
  .optionContent-suffix {
    margin-top: 5px;
  }
  .optionContent-suffix span {
    margin-left: -20px;
  }
  .optionContent-suffix .optionContent-input {
    width: 90%;
    margin-left: 10px;
  }
  .optionContent-suffix .optionContent-botton {
    margin-left: 10px;
  }
</style>
src/views/exam/subject.vue
New file
@@ -0,0 +1,340 @@
/* * @Author: Morpheus * @Date: 2021-07-05 16:31:54 * @Last Modified by: liu *
@Last Modified time: 2021-11-23 14:14:38 * menu-name 题库查询 */
<template>
  <basic-container :class="">
    <avue-crud class="company-box tablesss" :option="questionBankOption" :search.sync="questionBankSearch"
      :table-loading="questionBankLoading" :data="questionBankData" ref="questionBankCrud" :page.sync="questionBankPage"
      @selection-change="questionBankSelectionChange" @search-change="questionBankSearchChange"
      @search-reset="questionBankSearchReset" @current-change="questionBankCurrentChange"
      @size-change="questionBankSizeChange" @row-del="questionBankHandleDel" @on-load="questionBankOnLoad">
      <template slot="menuLeft">
        <el-button type="primary" size="small" icon="el-icon-plus" @click="questionBankHandleAdd">新 增
        </el-button>
      </template>
      <template slot-scope="{ row }" slot="menu">
        <el-button type="text" size="mini" icon="el-icon-edit" @click="questionBankHandleEdit(row)">编辑
        </el-button>
        <el-button type="text" size="mini" icon="el-icon-delete" @click="questionBankHandleDel(row)">删除
        </el-button>
      </template>
    </avue-crud>
    <el-dialog title="题库导入" append-to-body :visible.sync="excelBox" width="555px">
      <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
        <template slot="excelTemplate">
          <el-button type="primary" @click="handleTemplate">
            点击下载<i class="el-icon-download el-icon--right"></i>
          </el-button>
        </template>
      </avue-form>
    </el-dialog>
    <addsubject ref="addsubject" v-on:refreshPage="refreshPage"></addsubject>
  </basic-container>
</template>
<script>
  import {
    getList,
    remove
  } from "@/api/subjectChoices/subjectChoices";
  import addsubject from "./addsubject.vue";
  // import {
  //   mapGetters,
  //   mapState
  // } from "vuex";
  import Qs from "qs";
  import {
    getToken
  } from "@/util/auth";
  export default {
    components: {
      addsubject
    },
    data() {
      return {
        excelBox: false,
        excelForm: {},
        excelOption: {
          submitBtn: false,
          emptyBtn: false,
          column: [{
              label: "模板上传",
              prop: "excelFile",
              type: "upload",
              drag: true,
              loadText: "模板上传中,请稍等",
              span: 24,
              propsHttp: {
                res: "data"
              },
              tip: "请上传 .xls,.xlsx 标准格式文件",
              action: "/api/examSubjectChoices/import-examSubject"
            },
            {
              label: "模板下载",
              prop: "excelTemplate",
              formslot: true,
              span: 24
            }
          ]
        },
        questionBankOption: {
          // 操作栏多余按钮去除
          delBtn: false,
          editBtn: false,
          addBtn: false,
          selection: true,
          menu: true,
          // 导出按钮
          excelBtn: true,
          excelBtnText: "题库导出",
          // title: '题库',
          align: "center",
          height: "auto",
          calcHeight: 80,
          tip: false,
          searchShow: true,
          searchMenuSpan: 4,
          index: true,
          indexLabel: "序号",
          viewBtn: true,
          //dialogType: 'drawer',
          dialogClickModal: false,
          // 操作栏宽度
          menuWidth: 226,
          // ...this.$store.state.control.clearOtherBut,
          // ...this.$store.state.control.searchOpen,
          column: [{
              label: "题目类型",
              prop: "choicesType",
              search: true,
              type: "select",
              searchSpan: 4,
              dicData: [{
                  label: "单选题",
                  value: 0
                },
                {
                  label: "多选题",
                  value: 1
                },
                {
                  label: "实操题",
                  value: 3
                }
              ],
              slot: true,
              width: 96
            }, {
              label: "题目名称",
              prop: "subjectName",
              searchSpan: 4,
              search: true,
              slot: true
            },
            {
              label: "题目分值",
              prop: "score",
              slot: true,
              width: 96
            },
            {
              label: "大类",
              prop: "categoryName",
              slot: true,
              search: true,
              width: 96
            }, {
              label: "细类",
              prop: "subclassName",
              slot: true,
              search: true,
              width: 96
            },
            {
              label: "创建时间",
              prop: "createDate",
              slot: true,
              width: 130
            },
            {
              label: "修改人",
              prop: "modifier",
              slot: true,
              width: 96
            },
            {
              label: "修改时间",
              prop: "modifyDate",
              slot: true,
              width: 130
            }
          ]
        },
        questionBankSearch: {},
        questionBankLoading: true,
        questionBankData: [],
        questionBankPage: {
          pageSize: 10,
          currentPage: 1,
          total: 16,
          // ...this.$store.state.control.changePageSize
        },
        questionBankQuery: {},
        questionBankSelectionList: []
      };
    },
    mounted() {
      this.$store.commit("setWindowSizeHeightAdd");
    },
    computed: {
      // ...mapGetters(["userInfo", "permission"]),
      permissionList() {
        return {
          // addBtn: this.vaildData(this.permission.subject_add, false),
          // viewBtn: this.vaildData(this.permission.subject_view, false),
          // delBtn: this.vaildData(this.permission.subject_delete, false),
          // editBtn: this.vaildData(this.permission.subject_edit, false),
          // excelBtn: this.vaildData(this.permission.subject_report, false)
        };
      },
      ids() {
        let ids = [];
        this.questionBankSelectionList.forEach(ele => {
          ids.push(ele.id);
        });
        return ids.join(",");
      }
    },
    methods: {
      //触发页面刷新
      refreshPage() {
        this.questionBankOnLoad(this.questionBankPage);
      },
      questionBankHandleAdd() {
        this.$refs.addsubject.inits();
      },
      questionBankHandleEdit(row) {
        this.$refs.addsubject.inits(row);
      },
      questionBankOnLoad(page, params = {}) {
        params = this.questionBankSearch;
        this.questionBankLoading = false;
        getList(
          page.currentPage,
          page.pageSize,
          Object.assign(params, this.query)
        ).then(res => {
          const data = res.data.data;
          this.questionBankPage.total = data.total;
          this.questionBankData = data.records;
          this.questionBankLoading = false;
          this.$store.commit("setWindowSizeHeightAdd");
          this.questionBankSelectionClear();
        });
      },
      questionBankSelectionClear() {
        this.questionBankSelectionList = [];
        this.$refs.questionBankCrud.toggleSelection();
      },
      questionBankSelectionChange(list) {
        this.questionBankSelectionList = list;
      },
      questionBankSearchChange(params, done) {
        this.questionBankQuery = params;
        this.questionBankPage.currentPage = 1;
        this.questionBankOnLoad(this.questionBankPage, params);
        done();
      },
      questionBankSearchReset() {
        this.questionBankQuery = {};
        this.questionBankOnLoad(this.questionBankPage);
      },
      questionBankCurrentChange(currentPage) {
        this.questionBankPage.currentPage = currentPage;
      },
      questionBankSizeChange(pageSize) {
        this.questionBankPage.pageSize = pageSize;
      },
      questionBankHandleDel(row) {
        this.$confirm("确定将选择数据删除?", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning"
          })
          .then(() => {
            return remove(row.id);
          })
          .then(() => {
            this.questionBankOnLoad(this.questionBankPage);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
          });
      },
      questionBankHandleDelete() {
        if (this.questionBankSelectionList.length === 0) {
          this.$message.warning("请选择至少一条数据");
          return;
        }
        this.$confirm("确定将选择数据删除?", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning"
          })
          .then(() => {
            return remove(this.ids);
          })
          .then(() => {
            this.questionBankOnLoad(this.questionBankPage);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
            this.$refs.questionBankCrud.toggleSelection();
          });
      },
      //导出数据
      handleExport() {
        this.$confirm("是否导出清册数据?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(() => {
          window.open(
            `/api/apply/export-apply?examId=${this.$route.query.id}&${
            this.website.tokenHeader
          }=${getToken()}`
          );
        });
      },
      handleImport() {
        this.excelBox = true;
      },
      handleTemplate() {
        window.open(
          `/api/examSubjectChoices/export-template?${
          this.website.tokenHeader
        }=${getToken()}`
        );
      },
      uploadAfter(res, done, loading, column) {
        window.console.log(column);
        this.excelBox = false;
        this.refreshChange();
        done();
      },
      refreshChange() {
        this.questionBankOnLoad(this.page, this.query);
      }
    }
  };
</script>
<style lang="scss" scoped></style>
src/views/property/components/propertyEdit.vue
New file
@@ -0,0 +1,206 @@
<template>
  <el-dialog title="" append-to-body :visible.sync="infoVisible" top="10vh" width="70%">
    <el-tabs v-model="activeName" @tab-click="handleClick">
      <el-tab-pane label="基础信息" name="first"></el-tab-pane>
      <el-tab-pane label="基础信息" name="second"></el-tab-pane>
      <el-tab-pane label="良好行为信息" name="third"></el-tab-pane>
      <el-tab-pane label="不良行为信息" name="fourth"></el-tab-pane>
    </el-tabs>
    <avue-form :option="option" v-model="first" v-if="activeName == 'first'"></avue-form>
    <!-- <avue-form :option="option" v-model="second" v-if="activeName == 'second'"></avue-form> -->
    <div>
      <div v-for="(item, index) in questionBankData" :key="index">
        <div>
          {{ item.subjectName }}
        </div>
        <div v-for="(item1, index1) in item.subjectOptionList" :key="index1">
          <!-- <div>
            {{ item1.optionName }}
          </div> -->
          <el-radio-group>
            <el-radio :label="item1.id">{{item1.optionName}}</el-radio>
          </el-radio-group>
        </div>
      </div>
    </div>
  </el-dialog>
</template>
<script>
  import {
    getList,
    remove
  } from "@/api/subjectChoices/subjectChoices";
  export default {
    data() {
      return {
        activeName: 'first',
        infoVisible: false,
        page: {
          pageSize: 20,
          currentPage: 1,
        },
        questionBankData: [],
        query: {},
        option: {
          labelWidth: 120,
          searchLabelWidth: 96,
          searchShow: true,
          searchMenuSpan: 3,
          menuWidth: 280,
          height: "auto",
          calcHeight: 54,
          dialogWidth: 1150,
          tip: false,
          border: true,
          //stripe:true,
          index: true,
          viewBtn: true,
          selection: true,
          dialogClickModal: false,
          column: [{
              overHidden: true,
              label: "物业公司名称",
              prop: "name",
              searchSpan: 5,
              searchLabelWidth: 124,
              search: true,
              span: 18,
              row: true,
              width: 260,
              rules: [{
                required: true,
                message: "请输入物业公司名称",
                trigger: "blur",
              }, ],
            },
            {
              label: '省份',
              prop: 'province',
              type: 'select',
              props: {
                label: 'name',
                value: 'code'
              },
              hide: true,
              span: 6,
              cascader: ['city'],
              dicUrl: `/api/blade-system/region/select`,
              rules: [{
                required: true,
                message: '请选择省份',
                trigger: 'blur'
              }]
            },
            {
              label: '城市',
              prop: 'city',
              type: 'select',
              span: 6,
              labelWidth: 60,
              cascader: ['area'],
              props: {
                label: 'name',
                value: 'code'
              },
              hide: true,
              dicUrl: `/api/blade-system/region/select?code={{key}}`,
              rules: [{
                required: true,
                message: '请选择城市',
                trigger: 'blur'
              }]
            },
            {
              label: '地区',
              prop: 'area',
              type: 'select',
              span: 6,
              labelWidth: 60,
              props: {
                label: 'name',
                value: 'code'
              },
              hide: true,
              dicUrl: `/api/blade-system/region/select?code={{key}}`,
              rules: [{
                required: true,
                message: '请选择地区',
                trigger: 'blur'
              }]
            },
            {
              overHidden: true,
              label: "地址",
              prop: "address",
              span: 18,
              row: true,
            },
            {
              label: "社会信用代码",
              prop: "socialCreditCode",
            },
            {
              label: "简介",
              prop: "remark",
              component: "AvueUeditor",
              options: {
                action: "/api/blade-resource/oss/endpoint/put-file-attach",
                props: {
                  res: "data",
                  url: "link",
                },
              },
              hide: true,
              minRows: 6,
              span: 24,
            },
          ],
        },
      };
    },
    methods: {
      questionBankOnLoad(page, params = {}) {
        // params = {}
        // this.questionBankLoading = false;
        getList(
          page.currentPage,
          page.pageSize,
          Object.assign(params, this.query)
        ).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.questionBankData = data.records;
          // this.questionBankLoading = false;
        });
      },
      init(row) {
        this.infoVisible = true
      },
      handleClick(tab, event) {
        console.log(tab, event);
        let param = {
          categoryName: tab.label
        }
        this.questionBankOnLoad(this.page, param)
      }
    }
  };
</script>
<style>
</style>