瀏覽代碼

feat(sopTemp): 修改SOP模板功能及添加红包设置

修改了ImageUpload的上传地址,优化SOP模板编辑页面,并新增红包设置功能。
---
feat(ImageUpload): 修改上传地址为OSS

修改ImageUpload组件中的上传图片服务器地址。
---
feat(updateSopTemp): 优化SOP模板编辑页面

优化SOP模板编辑页面,增加权限控制,调整部分UI显示。
---
feat(sopTemp): 添加红包设置功能

在SOP模板管理页面添加红包设置功能,允许用户为课程小节设置红包金额。
吴树波 1 月之前
父節點
當前提交
77dc5b43b3

+ 77 - 0
src/api/company/CompanyRedPackageLogs.js

@@ -0,0 +1,77 @@
+import request from '@/utils/request'
+
+// 查询公司红包余额日志列表
+export function listCompanyRedPackageLogs(query) {
+  return request({
+    url: '/company/CompanyRedPackageLogs/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询公司红包余额日志详细
+export function getCompanyRedPackageLogs(id) {
+  return request({
+    url: '/company/CompanyRedPackageLogs/' + id,
+    method: 'get'
+  })
+}
+
+// 新增公司红包余额日志
+export function recharge(data) {
+  return request({
+    url: '/company/CompanyRedPackageLogs/recharge',
+    method: 'post',
+    data: data
+  })
+}
+// 新增公司红包余额日志
+export function addCompanyRedPackageLogs(data) {
+  return request({
+    url: '/company/CompanyRedPackageLogs',
+    method: 'post',
+    data: data
+  })
+}
+// 新增公司红包余额日志
+export function rew(data) {
+  return request({
+    url: '/company/CompanyRedPackageLogs/rew',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改公司红包余额日志
+export function updateCompanyRedPackageLogs(data) {
+  return request({
+    url: '/company/CompanyRedPackageLogs',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除公司红包余额日志
+export function delCompanyRedPackageLogs(id) {
+  return request({
+    url: '/company/CompanyRedPackageLogs/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出公司红包余额日志
+export function exportCompanyRedPackageLogs(query) {
+  return request({
+    url: '/company/CompanyRedPackageLogs/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 导出公司红包余额日志
+export function getMoneyPri() {
+  return request({
+    url: '/company/CompanyRedPackageLogs/getMoneyPri',
+    method: 'get',
+  })
+}

+ 7 - 0
src/api/qw/sop.js

@@ -121,3 +121,10 @@ export function updateSopQwUser(data) {
     data: data
   })
 }
+
+export function getRoles() {
+  return request({
+    url: '/qw/sop/getRoles',
+    method: 'get'
+  })
+}

+ 16 - 0
src/api/qw/sopTemp.js

@@ -8,6 +8,14 @@ export function listSopTemp(query) {
     params: query
   })
 }
+// 查询sop模板列表
+export function redList(id) {
+  return request({
+    url: '/qw/sopTemp/redList',
+    method: 'get',
+    params: {id}
+  })
+}
 
 // 查询sop模板详细
 export function getSopTemp(id) {
@@ -57,6 +65,14 @@ export function addSopTemp(data) {
   })
 }
 // 新增sop模板
+export function updateRedPackage(data) {
+  return request({
+    url: '/qw/sopTemp/updateRedPackage',
+    method: 'post',
+    data: data
+  })
+}
+// 新增sop模板
 export function addTemp(data) {
   return request({
     url: '/qw/sopTemp/add',

+ 1 - 1
src/components/ImageUpload/index.vue

@@ -78,7 +78,7 @@ export default {
       dialogVisible: false,
       hideUpload: false,
       baseUrl: process.env.VUE_APP_BASE_API,
-      uploadImgUrl:process.env.VUE_APP_BASE_API+"/common/uploadHuaWeiObs", // 上传的图片服务器地址
+      uploadImgUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS", // 上传的图片服务器地址
       headers: {
         Authorization: "Bearer " + getToken(),
       },

+ 364 - 0
src/views/company/CompanyRedPackageLogs/index.vue

@@ -0,0 +1,364 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="审核状态" prop="companyId">
+        <el-select v-model="queryParams.status" clearable>
+          <el-option label="待审核" :value="0" />
+          <el-option label="已通过" :value="1" />
+          <el-option label="已解决" :value="2" />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['company:CompanyRedPackageLogs:add']"
+        >充值</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['company:CompanyRedPackageLogs:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="CompanyRedPackageLogsList">
+      <el-table-column label="操作类型" align="center" prop="operateType">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.operateType == 0">充值</el-tag>
+          <el-tag v-if="scope.row.operateType == 1">发红包</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="充值金额" align="center" prop="upMoney" />
+      <el-table-column label="手续费" align="center" prop="handlMoney" />
+      <el-table-column label="手续费比例" align="center" prop="handlPri">
+        <template slot-scope="scope">{{scope.row.handlPri}}%</template>
+      </el-table-column>
+      <el-table-column label="实际金额" align="center" prop="money" />
+      <el-table-column label="审核状态" align="center" prop="status" >
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.status == 0" type="warning">待审核</el-tag>
+          <el-tag v-if="scope.row.status == 1" type="success">审核通过</el-tag>
+          <el-tooltip class="item" effect="dark" :content="scope.row.rejectMemo" placement="top" v-if="scope.row.status == 2">
+            <el-tag type="danger">审核拒绝</el-tag>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+      <el-table-column label="凭证照片" align="center" prop="images" >
+        <template slot-scope="scope">
+          <el-image
+            style="width: 100px; height: 100px"
+            :src="scope.row.images.split(',')[0]"
+            :preview-src-list="scope.row.images.split(',')">
+          </el-image>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+<!--      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
+<!--        <template slot-scope="scope">-->
+<!--          <el-button-->
+<!--            size="mini"-->
+<!--            type="text"-->
+<!--            icon="el-icon-edit"-->
+<!--            v-if="scope.row.status == 0"-->
+<!--            @click="rewOpen(scope.row)"-->
+<!--            v-hasPermi="['company:CompanyRedPackageLogs:edit']"-->
+<!--          >审核</el-button>-->
+<!--        </template>-->
+<!--      </el-table-column>-->
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改公司红包余额日志对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="充值金额" prop="upMoney">
+          <el-input v-model="form.upMoney" @change="handlMoneyChange" type="number" placeholder="请输入充值金额" style="width: 200px">
+            <template slot="append">元</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="手续费" prop="handlMoney">
+          <el-input v-model="form.handlMoney" disabled placeholder="请输入充值金额" style="width: 200px">
+            <template slot="append">元</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="手续费比例" prop="handlPri">
+          <el-input v-model="pri" disabled placeholder="请输入充值金额" style="width: 200px">
+            <template slot="append">%</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="到账金额" prop="money">
+          <el-input v-model="form.money" disabled placeholder="请输入充值金额"  style="width: 200px">
+            <template slot="append">元</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="凭证照片" prop="images">
+          <image-upload v-model="form.images" :limit="7" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <!-- 添加或修改公司红包余额日志对话框 -->
+    <el-dialog title="充值审核" :visible.sync="rewData.open" width="500px" append-to-body>
+      <el-form ref="form" :model="rewData.form" :rules="rules" label-width="100px">
+        <el-form-item label="审核" prop="status">
+          <el-radio-group v-model="rewData.form.status">
+            <el-radio :label="1">审核通过</el-radio>
+            <el-radio :label="2">审核拒绝</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark" v-if="rewData.form.status == 1">
+          <el-input type="textarea" :rows="3" class="el-input" v-model="rewData.form.remark" />
+        </el-form-item>
+        <el-form-item label="拒绝原因" prop="rejectMemo" v-if="rewData.form.status == 2">
+          <el-input type="textarea" :rows="3" class="el-input" v-model="rewData.form.rejectMemo" />
+        </el-form-item>
+<!--        <el-form-item label="拒绝凭证" prop="rejectImages" v-if="rewData.form.status == 2">-->
+<!--          <image-upload v-model="rewData.form.rejectImages" :limit="7" />-->
+<!--        </el-form-item>-->
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="rewFun">确 定</el-button>
+        <el-button @click="cancelRew">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCompanyRedPackageLogs, getCompanyRedPackageLogs, delCompanyRedPackageLogs, getMoneyPri, recharge, exportCompanyRedPackageLogs, rew } from "@/api/company/CompanyRedPackageLogs";
+
+export default {
+  name: "CompanyRedPackageLogs",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      pri: 0,
+      // 公司红包余额日志表格数据
+      CompanyRedPackageLogsList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: null,
+        operateType: null,
+        type: null,
+        upMoney: null,
+        handlMoney: null,
+        handlPri: null,
+        money: null,
+        status: null,
+        images: null,
+        rejectMemo: null,
+        rejectImages: null,
+      },
+      // 表单参数
+      form: {},
+      rewData: {
+        open: false,
+        form:{},
+        row:{},
+      },
+      // 表单校验
+      rules: {
+        upMoney:[
+          { required: true, message: "充值金额不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    getMoneyPri().then(e => {
+      this.pri =e.data;
+    });
+    this.getList();
+  },
+  methods: {
+    /** 查询公司红包余额日志列表 */
+    getList() {
+      this.loading = true;
+      listCompanyRedPackageLogs(this.queryParams).then(response => {
+        this.CompanyRedPackageLogsList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    handlMoneyChange(){
+      let money = this.form.upMoney
+      if(money != null && Number(money) > 0){
+        this.form.handlMoney = (money * (this.pri / 100).toFixed(2)).toFixed(2);
+        this.form.money = money - this.form.handlMoney;
+      }
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 取消按钮
+    cancelRew() {
+      this.rewData.open = false;
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        companyId: null,
+        operateType: null,
+        type: null,
+        upMoney: null,
+        handlMoney: null,
+        handlPri: null,
+        money: null,
+        status: 0,
+        images: null,
+        rejectMemo: null,
+        rejectImages: null,
+        createTime: null,
+        createBy: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加公司红包余额日志";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getCompanyRedPackageLogs(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改公司红包余额日志";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          recharge(this.form).then(response => {
+            this.msgSuccess("充值成功");
+            this.open = false;
+            this.getList();
+          });
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除公司红包余额日志编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delCompanyRedPackageLogs(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有公司红包余额日志数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          this.exportLoading = true;
+          return exportCompanyRedPackageLogs(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+          this.exportLoading = false;
+        }).catch(() => {});
+    },
+    rewOpen(row){
+      this.rewData.open = true;
+      getCompanyRedPackageLogs(row.id).then(e => {
+        this.rewData.row = e.data;
+        this.rewData.form = {
+          id: row.id,
+          status: 1,
+          remark: "",
+          rejectMemo: "",
+          rejectImages: "",
+        };
+      })
+    },
+    rewFun(){
+      rew(this.rewData.form).then(response => {
+        this.msgSuccess("审核成功");
+        this.rewData.open = false;
+        this.getList();
+      });
+    },
+  }
+};
+</script>

+ 254 - 192
src/views/qw/sopTemp/index.vue

@@ -1,6 +1,16 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="销售公司" prop="companyId">
+        <el-select filterable  v-model="queryParams.companyId" clearable placeholder="请选择公司名" size="small">
+          <el-option
+            v-for="item in companys"
+            :key="item.companyId"
+            :label="item.companyName"
+            :value="item.companyId"
+          />
+        </el-select>
+      </el-form-item>
       <el-form-item label="模板标题" prop="name">
         <el-input
           v-model="queryParams.name"
@@ -39,15 +49,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="公司id" prop="companyId">
-        <el-input
-          v-model="queryParams.companyId"
-          placeholder="请输入公司id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -55,19 +56,19 @@
     </el-form>
 
 
-
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-<!--        <el-button-->
-<!--          type="primary"-->
-<!--          plain-->
-<!--          icon="el-icon-plus"-->
-<!--          size="mini"-->
-<!--          @click="handleAdd"-->
-<!--          v-hasPermi="['qw:sopTemp:add']"-->
-<!--        >新增</el-button>-->
+        <!--        <el-button-->
+        <!--          type="primary"-->
+        <!--          plain-->
+        <!--          icon="el-icon-plus"-->
+        <!--          size="mini"-->
+        <!--          @click="handleAdd"-->
+        <!--          v-hasPermi="['qw:sopTemp:add']"-->
+        <!--        >新增</el-button>-->
 
         <el-dropdown
+          v-if="roles.includes('add_sop_temp')"
           @command="handleCommand"
           trigger="click"
           placement="bottom-start"
@@ -82,8 +83,8 @@
               {{ option.dictLabel }}
             </el-dropdown-item>
           </el-dropdown-menu>
-          <span class="el-dropdown-link" >
-              <el-button  type="primary"  icon="el-icon-plus" plain  size="mini" >
+          <span class="el-dropdown-link">
+              <el-button type="primary" icon="el-icon-plus" plain size="mini">
                 新增模板
               </el-button>
             </span>
@@ -98,8 +99,10 @@
           size="mini"
           :disabled="multiple"
           @click="handleDelete"
+          v-if="roles.includes('del_sop_temp')"
           v-hasPermi="['qw:sopTemp:remove']"
-        >删除</el-button>
+        >删除
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -110,29 +113,35 @@
           :loading="exportLoading"
           @click="handleExport"
           v-hasPermi="['qw:sopTemp:export']"
-        >导出</el-button>
+        >导出
+        </el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" border :data="sopTempList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="模板编号" align="center" prop="id" />
-      <el-table-column label="模板标题" align="center" prop="name" />
-      <el-table-column label="模板类型" align="center" prop="sendType" >
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="模板编号" align="center" prop="id"/>
+      <el-table-column label="模板编号" align="center">
+        <template slot-scope="scope">
+          <el-tag v-for="item in companys" v-if="scope.row.companyId == item.companyId">{{item.companyName}}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="模板标题" align="center" prop="name"/>
+      <el-table-column label="模板类型" align="center" prop="sendType">
         <template slot-scope="scope">
           <dict-tag :options="sysQwSopType" :value="scope.row.sendType"/>
         </template>
       </el-table-column>
-      <el-table-column label="间隔天数" align="center" prop="gap" />
+      <el-table-column label="间隔天数" align="center" prop="gap"/>
       <el-table-column label="状态" align="center" prop="status">
         <template slot-scope="scope">
           <dict-tag :options="statusOptions" :value="scope.row.status"/>
         </template>
       </el-table-column>
-      <el-table-column label="创建时间" align="center" prop="createTime" />
-      <el-table-column label="修改时间" align="center" prop="updateTime" />
-      <el-table-column label="排序" align="center" prop="sort" />
+      <el-table-column label="创建时间" align="center" prop="createTime"/>
+      <el-table-column label="修改时间" align="center" prop="updateTime"/>
+      <el-table-column label="排序" align="center" prop="sort"/>
 
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
@@ -140,44 +149,55 @@
             size="mini"
             type="text"
             icon="el-icon-connection"
+            v-if="roles.includes('update_sop_temp')"
             @click="copyTemplate(scope.row)"
             v-hasPermi="['qw:sopTemp:edit']"
-          >复制模板</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-share"
-            @click="shareTemplate(scope.row)"
-            v-hasPermi="['qw:sopTemp:share']"
-          >分享模板</el-button>
+          >复制模板
+          </el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-s-promotion"
             @click="handleQueryDetails(scope.row)"
             v-hasPermi="['qw:sopTemp:list']"
-          >详情</el-button>
+          >详情
+          </el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-edit"
+            v-if="roles.includes('update_sop_temp')"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['qw:sopTemp:edit']"
-          >修改</el-button>
+          >修改
+          </el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-edit"
             @click="handleUpdate2(scope.row)"
+            v-if="roles.includes('update_sop_temp')"
+            v-hasPermi="['qw:sopTemp:edit']"
+          >管理规则
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdateRed(scope.row)"
+            v-if="scope.row.sendType == 5 && roles.includes('update_sop_temp_red')"
             v-hasPermi="['qw:sopTemp:edit']"
-          >管理规则</el-button>
+          >红包设置
+          </el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
+            v-if="roles.includes('del_sop_temp')"
             v-hasPermi="['qw:sopTemp:remove']"
-          >删除</el-button>
+          >删除
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -193,20 +213,29 @@
     <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="名称" prop="name">
-          <el-input v-model="form.name" placeholder="请输入模板标题" />
+          <el-input v-model="form.name" placeholder="请输入模板标题"/>
+        </el-form-item>
+        <el-form-item label="销售公司" prop="companyId">
+          <el-select filterable  v-model="form.companyId" placeholder="请选择公司名" size="small">
+            <el-option
+              v-for="item in companys"
+              :key="item.companyId"
+              :label="item.companyName"
+              :value="item.companyId"
+            />
+          </el-select>
         </el-form-item>
-
         <el-form-item label="状态">
           <el-radio-group v-model="form.status">
             <el-radio
               v-for="dict in statusOptions"
               :key="dict.dictValue"
               :label="dict.dictValue"
-            >{{dict.dictLabel}}</el-radio>
+            >{{ dict.dictLabel }}
+            </el-radio>
           </el-radio-group>
         </el-form-item>
-
-        <el-form-item label="所属项目" prop="project">
+        <el-form-item label="所属项目" prop="project" v-if="form.sendType != 5">
           <el-select v-model="form.project" placeholder="请选择项目" filterable clearable size="small">
             <el-option
               v-for="dict in projectOptions"
@@ -216,11 +245,36 @@
             />
           </el-select>
         </el-form-item>
+        <el-form-item label="课程" prop="courseId" v-if="form.sendType == 5 && !form.id">
+          <el-select v-model="form.courseId"placeholder="请选择课程" style=" margin-right: 10px;" size="mini" filterable>
+            <el-option
+              v-for="dict in courseList"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="parseInt(dict.dictValue)"
+            />
+          </el-select>
+        </el-form-item>
         <el-form-item label="间隔天数" prop="gap">
-          <el-input-number v-model="form.gap"  :min="1" label="间隔天数"></el-input-number>
+          <el-input-number v-model="form.gap" :min="1" label="间隔天数"></el-input-number>
         </el-form-item>
         <el-form-item label="排序" prop="sort">
-          <el-input-number v-model="form.sort"  :min="0" label="排序"></el-input-number>
+          <el-input-number v-model="form.sort" :min="0" label="排序"></el-input-number>
+        </el-form-item>
+        <el-form-item label="每天发送次数" prop="num" v-if="form.sendType == 5 && !form.id">
+          <el-input-number v-model="form.num" :min="1" label="每天发送次数"></el-input-number>
+        </el-form-item>
+        <el-form-item label="发送时间" v-if="form.sendType == 5 && !form.id">
+          <el-time-picker
+            class="custom-input"
+            v-for="index in form.num"
+            v-model="form.timeList[index]"
+            value-format="HH:mm"
+            format="HH:mm"
+            :picker-options="{ selectableRange: '01:01:00 - 23:59:59' }"
+            placeholder="时间"
+            style="width: 100px;height: 20px;margin-left: 10px;margin-top: 10px">
+          </el-time-picker>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer" style="float: right;">
@@ -228,81 +282,39 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
-    <el-dialog :title="shareOptions.title" :visible.sync="shareOptions.open" width="800px" append-to-body>
-
-      <el-form :model="queryCompanyParams" ref="queryCompanyForm" :inline="true" v-show="showSearch" label-width="68px">
-        <el-form-item label="公司名称" prop="companyName">
-          <el-input
-            style="width: 220px"
-            v-model="queryCompanyParams.companyName"
-            placeholder="请输入企业名称"
-            clearable
-            size="small"
-            @keyup.enter.native="handleCompanyQuery"
-          />
-        </el-form-item>
 
-        <el-form-item label="状态" prop="status">
-          <el-select style="width: 220px" v-model="queryCompanyParams.status" placeholder="请选择状态" clearable size="small">
-            <el-option
-              v-for="dict in statusOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleCompanyQuery">搜索</el-button>
-          <el-button icon="el-icon-refresh" size="mini" @click="resetCompanyQuery">重置</el-button>
-        </el-form-item>
-      </el-form>
-      <el-row :gutter="10" class="mb8">
-        <el-col :span="1.5">
-          <el-button
-            plain
-            type="primary"
-            icon="el-icon-connection"
-            size="mini"
-            :disabled="multiple"
-            @click="handleShareTemplate"
-            v-hasPermi="['qw:sopTemp:share']"
-          >分享模板</el-button>
-        </el-col>
-      </el-row>
-      <el-table v-loading="companysloading" border :data="companyList" @selection-change="handleSelectionCompany">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="公司编号" align="center" prop="companyId" />
-        <el-table-column label="企业名" align="center" prop="companyName" />
-        <el-table-column label="备注" align="center" prop="remark"/>
-        <el-table-column label="状态" align="center" prop="status" >
+    <el-dialog title="课程红包" :visible.sync="redData.open" width="900px" append-to-body>
+      <el-table v-loading="redData.loading" border :data="redData.list" height="500px">
+        <el-table-column label="小节" align="left" prop="videoName"/>
+        <el-table-column label="金额" align="center">
           <template slot-scope="scope">
-            <el-tag prop="status" v-for="(item, index) in statusOptions"  :type="scope.row.status==1?'success':'danger'"  v-if="scope.row.status==item.dictValue">{{item.dictLabel}}</el-tag>
+            <el-input-number v-model="scope.row.redPacketMoney" :min="0.01" step="0.01" label="红包金额"></el-input-number>
           </template>
         </el-table-column>
       </el-table>
-      <pagination
-        v-show="companyTotal>0"
-        :total="companyTotal"
-        :page.sync="queryCompanyParams.pageNum"
-        :limit.sync="queryCompanyParams.pageSize"
-        @pagination="getCompanyList"
-      />
+      <div slot="footer" class="dialog-footer" style="float: right;">
+        <el-button type="primary" @click="updateRedData" :disabled="redData.loading">保 存</el-button>
+      </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
 import {
-  listSopTemp,
-  getSopTemp,
-  delSopTemp,
-  updateTemp,
-  copyTemplate,
   addTemp,
+  copyTemplate,
+  delSopTemp,
   exportSopTemp,
-  shareSopTemp
+  getSopTemp,
+  listSopTemp,
+  redList,
+  shareSopTemp,
+  updateRedPackage,
+  updateTemp
 } from "@/api/qw/sopTemp";
+import {getCompanyList} from "@/api/company/company";
+import {courseList, getRoles} from "@/api/qw/sop";
+
 export default {
   name: "SopTemp",
   data() {
@@ -314,8 +326,10 @@ export default {
       exportLoading: false,
       // 选中数组
       ids: [],
+      courseList: [],
+      roles: [],
       //选中的公司
-      companys:[],
+      companys: [],
       // 非单个禁用
       single: true,
       // 非多个禁用
@@ -324,13 +338,13 @@ export default {
       showSearch: true,
       // 总条数
       companyTotal: 0,
-      total:0,
-      sendType:0,
+      total: 0,
+      sendType: 0,
       // sop模板表格数据
       sopTempList: [],
-      sysQwSopType:[],
-      companyList:[],
-      projectOptions:[],
+      sysQwSopType: [],
+      companyList: [],
+      projectOptions: [],
       // 弹出层标题
       title: "",
       // 是否显示弹出层
@@ -339,10 +353,15 @@ export default {
       // 状态字典
       statusOptions: [],
 
-      shareOptions:{
-        title:'分享模板',
-        open:false,
-        templateId:null,
+      shareOptions: {
+        title: '分享模板',
+        open: false,
+        templateId: null,
+      },
+      redData: {
+        open: false,
+        loading: true,
+        list: [],
       },
       queryCompanyParams: {
         pageNum: 1,
@@ -365,25 +384,28 @@ export default {
       // 表单校验
       rules: {
         name: [
-          { required: true, message: '名称不能为空', trigger: 'blur' }
+          {required: true, message: '名称不能为空', trigger: 'blur'}
         ],
         status: [
-          { required: true, message: '状态不能为空', trigger: 'blur' }
+          {required: true, message: '状态不能为空', trigger: 'blur'}
         ],
         sort: [
-          { required: true, message: '排序不能为空', trigger: 'blur' }
+          {required: true, message: '排序不能为空', trigger: 'blur'}
         ],
         gap: [
-          { required: true, message: '间隔天数不能为空', trigger: 'blur' }
+          {required: true, message: '间隔天数不能为空', trigger: 'blur'}
         ],
       },
-      contentRules:{
-        time:[{ required: true, message: '时间不能为空', trigger: 'blur' }],
+      contentRules: {
+        time: [{required: true, message: '时间不能为空', trigger: 'blur'}],
       }
     };
   },
   created() {
     this.getList();
+    getRoles().then(res => {
+      this.roles = res.data;
+    })
     this.getDicts("sys_company_status").then(response => {
       this.statusOptions = response.data;
     });
@@ -395,13 +417,21 @@ export default {
     this.getDicts("sys_qw_sop_type").then(response => {
       this.sysQwSopType = response.data;
     });
+
+    courseList().then(response => {
+      this.courseList = response.list;
+    });
+
+    getCompanyList().then(response => {
+      this.companys = response.data;
+    });
   },
   methods: {
 
-    handleCompanyQuery(){
+    handleCompanyQuery() {
       this.queryCompanyParams.pageNum = 1;
     },
-    resetCompanyQuery(){
+    resetCompanyQuery() {
       this.resetForm("queryCompanyForm");
       this.handleCompanyQuery();
     },
@@ -425,6 +455,8 @@ export default {
         gap: 1,
         sendType: this.sendType,
         sort: 0,
+        num: 1,
+        timeList:[],
         status: "1",
       };
       this.resetForm("form");
@@ -440,27 +472,27 @@ export default {
       this.handleQuery();
     },
 
-    handleCommand(command){
+    handleCommand(command) {
       // if (command==4) {
       //   this.$router.push('/qw/sopTemp/addAiChatTemp')
       // }else{
-        this.sendType = command;
-        this.title = "新增";
-        this.reset();
-        this.open = true;
-        // this.$router.push('/qw/sopTemp/addTemp/'+command)
+      this.sendType = command;
+      this.title = "新增";
+      this.reset();
+      this.open = true;
+      // this.$router.push('/qw/sopTemp/addTemp/'+command)
       // }
     },
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     //销售公司多选
-    handleSelectionCompany(selection){
-      this.companys=selection.map(item => item.companyId)
-      this.single = selection.length!==1
+    handleSelectionCompany(selection) {
+      this.companys = selection.map(item => item.companyId)
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
@@ -468,58 +500,77 @@ export default {
     //   this.$router.push('/qw/sopTemp/addSopTemp')
     // },
     /**
-    * 查看详情
-    */
-    handleQueryDetails(row){
+     * 查看详情
+     */
+    handleQueryDetails(row) {
       // if (row.sendType==4) {
       //   this.$router.push(`/qw/sopTemp/updateAiChatTemp/${row.id}/3`)
       // }else{
-        this.$router.push(`/qw/sopTemp/updateSopTemp/${row.id}/3`)
+      this.$router.push(`/qw/sopTemp/updateSopTemp/${row.id}/3`)
       // }
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
-        // if (row.sendType==4) {
-        //   this.$router.push(`/qw/sopTemp/updateAiChatTemp/${row.id}/1`)
-        // }else{
-          this.getInfo(row.id, 1);
-          // this.$router.push(`/qw/sopTemp/updateTemp/${row.id}/1`)
-        // }
+      // if (row.sendType==4) {
+      //   this.$router.push(`/qw/sopTemp/updateAiChatTemp/${row.id}/1`)
+      // }else{
+      this.getInfo(row.id, 1);
+      // this.$router.push(`/qw/sopTemp/updateTemp/${row.id}/1`)
+      // }
 
     },
     /** 修改按钮操作 */
     handleUpdate2(row) {
-        // if (row.sendType==4) {
-        //   this.$router.push(`/qw/sopTemp/updateAiChatTemp/${row.id}/1`)
-        // }else{
-          this.$router.push(`/qw/sopTemp/updateSopTemp/${row.id}/1`)
-        // }
-
+      // if (row.sendType==4) {
+      //   this.$router.push(`/qw/sopTemp/updateAiChatTemp/${row.id}/1`)
+      // }else{
+      let url = `/qw/sopTempe/updateSopTemp/${row.id}/1`;
+      console.info(url)
+      this.$router.push(url)
+      // }
+    },
+    /** 修改按钮操作 */
+    handleUpdateRed(row) {
+      this.redData.open = true;
+      redList(row.id).then(e => {
+        this.redData.loading = false;
+        this.redData.list = e.data;
+      })
+    },
+    /** 修改按钮操作 */
+    updateRedData() {
+      this.redData.loading = true;
+      updateRedPackage({list: this.redData.list}).then(e => {
+        this.redData.open = false;
+        this.getList();
+      }).catch(() => {
+        this.redData.loading = false;
+      });
     },
 
     /** 分享模板 */
-    shareTemplate(row){
-      this.shareOptions.open=true;
-      this.shareOptions.templateId=row.id;
+    shareTemplate(row) {
+      this.shareOptions.open = true;
+      this.shareOptions.templateId = row.id;
     },
     /**
-    * 复制模板
-    */
-    copyTemplate(row){
-        // if(row.sendType==4){
-        //   this.$router.push(`/qw/sopTemp/updateAiChatTemp/${row.id}/2`)
-        // }else{
-          this.getInfo(row.id, 2);
-          // this.$router.push(`/qw/sopTemp/updateSopTemp/${row.id}/2`)
-        // }
+     * 复制模板
+     */
+    copyTemplate(row) {
+      // if(row.sendType==4){
+      //   this.$router.push(`/qw/sopTemp/updateAiChatTemp/${row.id}/2`)
+      // }else{
+      this.getInfo(row.id, 2);
+      // this.$router.push(`/qw/sopTemp/updateSopTemp/${row.id}/2`)
+      // }
     },
-    getInfo(id, command){
+    getInfo(id, command) {
       getSopTemp(id).then(response => {
         this.command = command;
-        if(command == 2){
+        if (command == 2) {
           this.title = "复制";
         }
-        if(command == 1){
+        if (command == 1) {
           this.title = "修改";
         }
         this.form = response.data;
@@ -531,23 +582,32 @@ export default {
       delete this.form.rules
       this.$refs["form"].validate(valid => {
         if (valid) {
-          if(this.command == 2){
+          const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+          });
+          if (this.command == 2) {
             copyTemplate(this.form).then(response => {
               this.msgSuccess("复制成功");
               this.open = false;
+              loading.close();
               this.getList();
             });
-          }else{
+          } else {
             if (this.form.id != null) {
               updateTemp(this.form).then(response => {
                 this.msgSuccess("修改成功");
                 this.open = false;
+                loading.close();
                 this.getList();
               });
             } else {
               addTemp(this.form).then(response => {
                 this.msgSuccess("新增成功");
                 this.open = false;
+                loading.close();
                 this.getList();
               });
             }
@@ -566,8 +626,8 @@ export default {
       }).then(function () {
         return shareSopTemp({companyIds: companyIds, templeId: templateId});
       }).then(() => {
-        this.companys=[];
-        this.shareOptions.open=false;
+        this.companys = [];
+        this.shareOptions.open = false;
         this.getList();
         this.msgSuccess("分享成功");
       });
@@ -576,30 +636,32 @@ export default {
     handleDelete(row) {
       const ids = row.id || this.ids;
       this.$confirm('是否确认删除sop模板编号为"' + ids + '"的数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delSopTemp(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        }).catch(() => {});
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delSopTemp(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      }).catch(() => {
+      });
     },
     /** 导出按钮操作 */
     handleExport() {
       const queryParams = this.queryParams;
       this.$confirm('是否确认导出所有sop模板数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(() => {
-          this.exportLoading = true;
-          return exportSopTemp(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-          this.exportLoading = false;
-        }).catch(() => {});
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        this.exportLoading = true;
+        return exportSopTemp(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+        this.exportLoading = false;
+      }).catch(() => {
+      });
     }
   }
 };

文件差異過大導致無法顯示
+ 402 - 339
src/views/qw/sopTemp/updateSopTemp.vue


部分文件因文件數量過多而無法顯示