Explorar el Código

Merge branch 'master' into cygx_12.2

bding hace 1 año
padre
commit
58f7889591

+ 2 - 0
src/api/modules/rai/raiApi.js

@@ -5,6 +5,7 @@ import raiBanner from "./bannerApi.js";
 import internalInterface from "./internalApi.js";
 import lableApi from "./lableApi.js";
 import raiPoints from "./pointsApi.js";
+import voteApi from "./voteApi.js";
 import YanXuanApi from "./YanXuanApi.js";
 /* 权益小程序管理 */
 const raiInterface = {
@@ -14,6 +15,7 @@ const raiInterface = {
   ...internalInterface,
   ...lableApi,
   ...raiPoints,
+  ...voteApi,
   ...YanXuanApi,
   /* 
 		优化建议列表

+ 31 - 0
src/api/modules/rai/voteApi.js

@@ -0,0 +1,31 @@
+import http from "@/api/http.js";
+/* 权益小程序管理  视频列表模块*/
+
+const raiVote = {
+  /* 列表 */
+  questionnaireList: (params) => {
+    return http.get("/cygx/questionnaire/list", params);
+  },
+  /* 列表 */
+  questionnairePreserveAndEdit: (params) => {
+    return http.post("/cygx/questionnaire/preserveAndEdit", params);
+  },
+  /* 详情 */
+  questionnaireDetail: (params) => {
+    return http.get("/cygx/questionnaire/detail", params);
+  },
+  /* 投票结果 */
+  questionnaireVote_detail: (params) => {
+    return http.get("/cygx/questionnaire/vote_detail", params);
+  },
+  /* 票数明细 */
+  questionnaireVote_list: (params) => {
+    return http.get("/cygx/questionnaire/vote_list", params);
+  },
+  /* 其余主题 */
+  questionnaireVote_other: (params) => {
+    return http.get("/cygx/questionnaire/vote_other", params);
+  },
+};
+
+export default raiVote;

+ 8 - 2
src/routes/modules/cygxRoutes.js

@@ -504,6 +504,12 @@ export default [
         name: "微路演管理",
         hidden: false,
       },
+      {
+        path: "themeSurveyPage",
+        component: () => import("@/views/rai_manage/activityManage/themeSurveyPage.vue"),
+        name: "主题调研问卷",
+        hidden: false,
+      },
     ],
   },
   /* 研选活动管理 */
@@ -518,7 +524,7 @@ export default [
         path: "purchaserActivityManage",
         component: () => import("@/views/rai_manage/activityManage/activityManage.vue"),
         name: "活动管理",
-        hidden: false
+        hidden: false,
       },
       {
         path: "addPurchaserActivity",
@@ -575,7 +581,7 @@ export default [
           pathName: "到会管理",
           keepAlive: false,
         },
-      }
+      },
     ],
   },
 ];

+ 239 - 0
src/views/rai_manage/activityManage/components/ThemeSurvey/voteDlg.vue

@@ -0,0 +1,239 @@
+<template>
+  <div class="container vote-dlg-container">
+    <el-dialog
+      v-dialogDrag
+      :close-on-click-modal="false"
+      :title="this.rowForm.QuestionnaireId ? '编辑' : '发起投票'"
+      :modal-append-to-body="false"
+      center
+      :append-to-body="true"
+      :visible.sync="initiateVotingDlg"
+      :before-close="closeHandler"
+      width="800px"
+    >
+      <div class="vote-dlg-container-theme-survey">
+        <el-form :model="votingForm" :rules="votingRules" ref="votingForm" class="demo-ruleForm">
+          <el-form-item prop="type">
+            <el-select style="width: 100%" v-model="votingForm.type" placeholder="请选择活动类型">
+              <el-option v-for="item in optionsActivity" :label="item.ActivityTypeName" :key="item.ActivityTypeId" :value="item.ActivityTypeId"> </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="describe">
+            <div class="fr-wrapper-content-vote-dlg-container">
+              <froala :tag="'textarea'" :config="froalaConfig" v-model="votingForm.describe"></froala>
+            </div>
+          </el-form-item>
+          <el-form-item prop="date">
+            <el-date-picker v-model="votingForm.date" type="date" placeholder="请设置投票截止时间" value-format="yyyy-MM-dd" style="width: 100%"> </el-date-picker>
+          </el-form-item>
+          <el-form-item prop="select">
+            <el-select v-model="votingForm.select" placeholder="最多可选几项" style="width: 100%" @change="selectChangeHandler">
+              <el-option label="1" :value="1"></el-option>
+              <el-option label="2" :value="2"></el-option>
+              <el-option label="3" :value="3"></el-option>
+              <el-option label="4" :value="4"></el-option>
+              <el-option label="5" :value="5"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            v-for="(item, index) in votingForm.addThemeList"
+            :key="index"
+            :prop="'addThemeList.' + index + '.ActivityTheme'"
+            :rules="{
+              required: true,
+              message: '请填写活动主题',
+              trigger: 'blur',
+            }"
+          >
+            <div class="add-theme-content">
+              <el-input v-model="item.ActivityTheme" placeholder="活动主题" style="width: 100%" clearable></el-input>
+              <div class="delete-item-icon" @click="deleteThemeItem(item, index)" v-if="index >= 2">
+                <img src="~@/assets/img/icons/delete-Item.png" alt="" />
+              </div>
+            </div>
+          </el-form-item>
+          <el-form-item>
+            <div class="add-theme-box" @click="addThemeHandler">
+              <el-image style="width: 25px; height: 25px; margin-right: 10px" :src="require('@/assets/img/icons/add-img.png')" />
+              <span style="cursor: pointer">添加主题</span>
+            </div>
+          </el-form-item>
+        </el-form>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确定</el-button>
+        <el-button style="margin-left: 30px" type="primary" plain @click="closeHandler">取消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { raiInterface, raiSpecial } from "@/api/api.js";
+import RichText from "../../../components/richText.vue";
+export default {
+  name: "",
+  components: { RichText },
+  props: {
+    initiateVotingDlg: {
+      type: Boolean,
+      default: false,
+    },
+    rowForm: {
+      type: Object,
+      default: {},
+    },
+  },
+  watch: {
+    rowForm: {
+      handler(newVal) {
+        this.initiateVotingDlg && newVal.QuestionnaireId && this.getListDetails();
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  data() {
+    var that = this;
+    return {
+      froalaConfig: {
+        height: 150,
+        fontSizeDefaultSelection: "16",
+        quickInsertEnabled: false,
+        theme: "dark", //主题
+        placeholderText: "请输入首段描述文字",
+        language: "zh_cn",
+        events: {
+          initialized: function () {
+            that.editor = this;
+            that.editor.toolbar.hide();
+          },
+        },
+      },
+      votingForm: {
+        type: 8,
+        describe: "",
+        date: "",
+        select: "",
+        addThemeList: [
+          { QuestionnaireThemeId: 0, ActivityTheme: "" },
+          { QuestionnaireThemeId: 0, ActivityTheme: "" },
+        ],
+      },
+      votingRules: {
+        type: [{ required: true, message: "请选择活动类型", trigger: "change" }],
+        describe: [{ required: true, message: "请输入首段描述文字", trigger: "blur" }],
+        date: [{ required: true, message: "请设置投票截止时间", trigger: "change" }],
+        select: [{ required: true, message: "请输入最多可选几项", trigger: "change" }],
+      },
+      optionsActivity: [],
+    };
+  },
+  computed: {},
+  created() {},
+  mounted() {
+    this.activityType();
+  },
+  methods: {
+    closeHandler() {
+      this.votingForm = {
+        type: 8,
+        describe: "",
+        date: "",
+        select: "",
+        addThemeList: [
+          { QuestionnaireThemeId: 0, ActivityTheme: "" },
+          { QuestionnaireThemeId: 0, ActivityTheme: "" },
+        ],
+      };
+      this.$refs.votingForm.resetFields();
+      this.$emit("update:initiateVotingDlg", false);
+      this.$emit("update:rowForm", {});
+    },
+    // 添加主题
+    addThemeHandler() {
+      let id = this.votingForm.addThemeList.length;
+      this.votingForm.addThemeList.push({ QuestionnaireThemeId: 0, ActivityTheme: "" });
+    },
+    deleteThemeItem(item, index) {
+      if (index >= 2) {
+        this.votingForm.addThemeList.splice(index, 1);
+      }
+    },
+    // 点击确定
+    submitForm() {
+      this.$refs.votingForm.validate(async (valid) => {
+        if (valid) {
+          const res = await raiInterface.questionnairePreserveAndEdit({
+            ActivityTypeId: this.votingForm.type,
+            MaxChooseTotal: this.votingForm.select,
+            Content: this.votingForm.describe.replace(/<p data-f-id=\"pbf\".*?<\/p>/g,''),
+            EndTime: this.votingForm.date,
+            ListTheme: this.votingForm.addThemeList,
+            QuestionnaireId: this.rowForm.QuestionnaireId || 0,
+          });
+          if (res.Ret === 200) {
+            this.$parent.getDataList();
+            this.$message.success("操作成功");
+            this.closeHandler();
+          }
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+    // 获取活动类型
+    async activityType() {
+      const res = await raiInterface.getActivityType({
+        IsGetAll: true,
+      });
+      if (res.Ret === 200) {
+        this.optionsActivity = res.Data.List;
+      }
+    },
+    async getListDetails() {
+      const res = await raiInterface.questionnaireDetail({
+        QuestionnaireId: this.rowForm.QuestionnaireId,
+      });
+      if (res.Ret === 200) {
+        let detail = res.Data.Detail;
+        this.votingForm = {
+          type: detail.ActivityTypeId,
+          describe: detail.Content,
+          date: detail.EndTime,
+          select: detail.MaxChooseTotal,
+          addThemeList: detail.ListTheme,
+        };
+      }
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.vote-dlg-container-theme-survey {
+  .add-theme-content {
+    display: flex;
+    align-items: center;
+  }
+  .delete-item-icon {
+    display: flex;
+    align-items: center;
+    margin-left: 20px;
+    cursor: pointer;
+    img {
+      width: 15px;
+      height: 15px;
+    }
+  }
+  .add-theme-box {
+    display: flex;
+    align-items: center;
+  }
+}
+
+.fr-wrapper-content-vote-dlg-container {
+  border-top: 1px solid #cccccc !important;
+  border-bottom: 1px solid #cccccc !important;
+}
+</style>

+ 187 - 0
src/views/rai_manage/activityManage/components/ThemeSurvey/votingResultsDlg.vue

@@ -0,0 +1,187 @@
+<template>
+  <div class="container vote-dlg-container">
+    <!-- 投票结果 -->
+    <el-dialog
+      v-dialogDrag
+      :close-on-click-modal="false"
+      title="投票结果"
+      :modal-append-to-body="false"
+      center
+      :append-to-body="true"
+      :visible.sync="isVotinRgesultsDlg"
+      :before-close="closeHandler"
+      width="500px"
+    >
+      <el-table border :data="voteDetailList" style="margin-bottom: 20px" height="350">
+        <el-table-column align="center" prop="ActivityTheme" key="name" label="主题"></el-table-column>
+        <el-table-column width="100" align="center" prop="VoteTotal" key="name" label="票数">
+          <template slot-scope="{ row }">
+            <span class="editsty" @click="lookVoteDetailsHandler(row)"> {{ row.VoteTotal }}</span>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
+    <!-- 票数明细 -->
+    <el-dialog
+      v-dialogDrag
+      :close-on-click-modal="false"
+      title="票数明细"
+      :modal-append-to-body="false"
+      center
+      :append-to-body="true"
+      :visible.sync="isVoteDetails"
+      :before-close="closeHandlerTwo"
+      width="600px"
+    >
+      <el-table border :data="voteNumDetailList" style="margin-bottom: 20px" height="350">
+        <el-table-column align="center" prop="RealName" key="name" label="投票人姓名"></el-table-column>
+        <el-table-column align="center" prop="CompanyName" key="name" label="公司名"></el-table-column>
+        <el-table-column align="center" prop="SellerName" key="name" label="所属销售"></el-table-column>
+        <el-table-column width="160" align="center" prop="CreateTime" key="name" label="投票时间"></el-table-column>
+      </el-table>
+    </el-dialog>
+    <!-- 其余主题 -->
+    <el-dialog
+      v-dialogDrag
+      :close-on-click-modal="false"
+      title="其余主题"
+      :modal-append-to-body="false"
+      center
+      :append-to-body="true"
+      :visible.sync="theRemainingThemeDlg"
+      :before-close="closeHandlerThree"
+      width="600px"
+    >
+      <el-table border :data="voteOtherList" style="margin-bottom: 20px" height="350">
+        <el-table-column align="center" prop="Content" key="name" label="主题内容"></el-table-column>
+        <el-table-column align="center" prop="RealName" key="name" label="提交人姓名"></el-table-column>
+        <el-table-column align="center" prop="CompanyName" key="name" label="公司名"></el-table-column>
+        <el-table-column align="center" prop="SellerName" key="name" label="所属销售"></el-table-column>
+        <el-table-column width="160" align="center" prop="CreateTime" key="name" label="提交时间"></el-table-column>
+      </el-table>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { raiInterface, raiSpecial } from "@/api/api.js";
+
+export default {
+  name: "",
+  props: {
+    isVotinRgesultsDlg: {
+      type: Boolean,
+      default: false,
+    },
+    theRemainingThemeDlg: {
+      type: Boolean,
+      default: false,
+    },
+    rowForm: {
+      type: Object,
+      default: {},
+    },
+  },
+  data() {
+    return {
+      isVoteDetails: false,
+      voteDetailList: [], //投票结果
+      voteNumDetailList: [], //查看票数详情
+      voteOtherList: [], //查看其余主题
+    };
+  },
+  computed: {},
+  watch: {
+    isVotinRgesultsDlg: {
+      handler(newValue) {
+        newValue && this.getVoteDetail();
+      },
+    },
+    theRemainingThemeDlg: {
+      handler(newValue) {
+        newValue && this.lookVoteOther();
+      },
+    },
+  },
+  created() {},
+  mounted() {},
+  methods: {
+    // 关闭弹框事件
+    closeHandler(type) {
+      this.$emit("update:isVotinRgesultsDlg", false);
+      this.$emit("update:rowForm", {});
+    },
+    closeHandlerTwo() {
+      this.isVoteDetails = false;
+    },
+    closeHandlerThree() {
+      this.$emit("update:theRemainingThemeDlg", false);
+      this.$emit("update:rowForm", {});
+    },
+    // 投票结果
+    async getVoteDetail() {
+      const res = await raiInterface.questionnaireVote_detail({
+        QuestionnaireId: this.rowForm.QuestionnaireId,
+      });
+      if (res.Ret === 200) {
+        this.$nextTick(() => {
+          this.voteDetailList = res.Data.List || [];
+        });
+      }
+    },
+    // 查看票数详情
+    async lookVoteDetailsHandler(item) {
+      const res = await raiInterface.questionnaireVote_list({
+        QuestionnaireThemeId: item.QuestionnaireThemeId,
+      });
+
+      if (res.Ret === 200) {
+        this.isVoteDetails = true;
+        this.$nextTick(() => {
+          this.voteNumDetailList = res.Data.List || [];
+        });
+      }
+    },
+    // 查看其余主题
+    async lookVoteOther() {
+      console.log(this.rowForm);
+      const res = await raiInterface.questionnaireVote_other({
+        QuestionnaireId: this.rowForm.QuestionnaireId,
+      });
+
+      if (res.Ret === 200) {
+        this.$nextTick(() => {
+          this.voteOtherList = res.Data.List || [];
+        });
+      }
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.vote-dlg-container-theme-survey {
+  .add-theme-content {
+    display: flex;
+    align-items: center;
+  }
+  .delete-item-icon {
+    display: flex;
+    align-items: center;
+    margin-left: 20px;
+    cursor: pointer;
+    img {
+      width: 15px;
+      height: 15px;
+    }
+  }
+  .add-theme-box {
+    display: flex;
+    align-items: center;
+  }
+}
+
+.fr-wrapper-content-vote-dlg-container {
+  border-top: 1px solid #cccccc !important;
+  border-bottom: 1px solid #cccccc !important;
+}
+</style>

+ 105 - 0
src/views/rai_manage/activityManage/themeSurveyPage.vue

@@ -0,0 +1,105 @@
+<template>
+  <div class="container">
+    <el-card>
+      <div style="display: flex; justify-content: flex-end">
+        <el-button type="primary" @click="initiateVotingDlg = true">发起投票</el-button>
+      </div>
+    </el-card>
+    <el-card style="margin-top: 20px">
+      <div>
+        <el-table border :data="dataList">
+          <el-table-column align="center" prop="PublishTime" key="name" label="发布时间"></el-table-column>
+          <el-table-column align="center" prop="ActivityTypeName" key="name" label="活动类型"></el-table-column>
+          <el-table-column align="center" prop="EndTime" key="EndTime" label="投票截止时间"></el-table-column>
+          <el-table-column align="center" prop="ModifyTime" key="ModifyTime" label="更新时间"></el-table-column>
+          <el-table-column align="center" prop="State" key="State" label="状态">
+            <template slot-scope="{ row }">
+              <span :class="[row.State == '发布中' && 'editsty']">{{ row.State }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="RealName" key="name" label="投票结果">
+            <template slot-scope="{ row }">
+              <span class="editsty" @click="lookResultHandler(row, '查看')">查看</span>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="OtherThemeTotal" key="name" label="其余主题">
+            <template slot-scope="{ row }">
+              <span class="editsty" @click="lookResultHandler(row, '其余')">{{ row.OtherThemeTotal }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="RealName" key="name" label="操作">
+            <template slot-scope="{ row }">
+              <span v-if="row.State == '发布中'" class="editsty" @click="lookResultHandler(row, '编辑')">编辑</span>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <!-- 分页 -->
+      <el-col :span="24" class="toolbar">
+        <m-page :total="total" :page_no="page_no" :pageSize="10" @handleCurrentChange="handleCurrentChange" />
+      </el-col>
+    </el-card>
+    <vote-dlg :initiateVotingDlg.sync="initiateVotingDlg" :rowForm.sync="rowForm" />
+    <voting-results-dlg :isVotinRgesultsDlg.sync="isVotinRgesultsDlg" :theRemainingThemeDlg.sync="theRemainingThemeDlg" :rowForm.sync="rowForm" />
+  </div>
+</template>
+
+<script>
+import { raiInterface, raiSpecial } from "@/api/api.js";
+import mPage from "@/components/mPage.vue";
+import VoteDlg from "./components/ThemeSurvey/voteDlg.vue";
+import VotingResultsDlg from "./components/ThemeSurvey/votingResultsDlg.vue";
+export default {
+  name: "",
+  components: { VoteDlg, VotingResultsDlg, mPage },
+  props: {},
+  data() {
+    return {
+      dataList: [],
+      page_no: 1,
+      total: 0,
+      initiateVotingDlg: false, // 发起投票的弹框
+      isVotinRgesultsDlg: false, // 投票结果的弹框
+      theRemainingThemeDlg: false, // 其余主题的弹框
+      rowForm: {},
+    };
+  },
+  computed: {},
+  watch: {},
+  created() {},
+  mounted() {
+    this.getDataList();
+  },
+  methods: {
+    // 查看投票结果
+    lookResultHandler(item, type) {
+      this.rowForm = item;
+      console.log(this.rowForm, " this.rowForm");
+      if (type == "编辑") {
+        this.initiateVotingDlg = true;
+      } else if (type == "查看") {
+        this.isVotinRgesultsDlg = true;
+      } else {
+        this.theRemainingThemeDlg = true;
+      }
+    },
+    // 获取列表
+    async getDataList() {
+      const res = await raiInterface.questionnaireList({
+        PageSize: 10,
+        CurrentIndex: this.page_no,
+      });
+      if (res.Ret === 200) {
+        this.dataList = res.Data.List || [];
+        this.total = res.Data.Paging.Totals;
+      }
+    },
+    //分页
+    handleCurrentChange(page) {
+      this.page_no = page;
+      this.getDataList();
+    },
+  },
+};
+</script>
+<style scoped lang="scss"></style>

+ 1 - 1
src/views/system_manage/etaMenu_manage/components/ModifyMenuDialog.vue

@@ -23,7 +23,7 @@
                         <el-cascader v-model="form.ParentId"
                             :options="menuList"
                             :props="menuProps"
-                            :disabled="openType!=='add'"
+                            :disabled="openType==='add'?false:!(openType!=='add'&&form.MenuType===0&&form.treeLevel===1)"
                         >
                         </el-cascader>
                     </el-form-item>