Quellcode durchsuchen

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_adminUI

caoliqin vor 1 Woche
Ursprung
Commit
028d6ea38f

+ 1 - 1
.env.prod-myhk

@@ -1,7 +1,7 @@
 # 页面标题
 VUE_APP_TITLE =木易华康互联网医院管理系统
 # 首页菜单标题
-VUE_APP_TITLE_INDEX =木易华康
+VUE_APP_TITLE_INDEX =木易华康互联网医院
 # 公司名称
 VUE_APP_COMPANY_NAME =福州市木易华康医药有限公司
 # ICP备案号

+ 53 - 0
src/api/ad/AdDyAccount.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询抖音账户列表
+export function listAdDyAccount(query) {
+  return request({
+    url: '/ad/AdDyAccount/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询抖音账户详细
+export function getAdDyAccount(id) {
+  return request({
+    url: '/ad/AdDyAccount/' + id,
+    method: 'get'
+  })
+}
+
+// 新增抖音账户
+export function addAdDyAccount(data) {
+  return request({
+    url: '/ad/AdDyAccount',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改抖音账户
+export function updateAdDyAccount(data) {
+  return request({
+    url: '/ad/AdDyAccount',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除抖音账户
+export function delAdDyAccount(id) {
+  return request({
+    url: '/ad/AdDyAccount/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出抖音账户
+export function exportAdDyAccount(query) {
+  return request({
+    url: '/ad/AdDyAccount/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/ad/AdUploadLog.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询百度回传日志列表
+export function listAdUploadLog(query) {
+  return request({
+    url: '/ad/AdUploadLog/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询百度回传日志详细
+export function getAdUploadLog(id) {
+  return request({
+    url: '/ad/AdUploadLog/' + id,
+    method: 'get'
+  })
+}
+
+// 新增百度回传日志
+export function addAdUploadLog(data) {
+  return request({
+    url: '/ad/AdUploadLog',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改百度回传日志
+export function updateAdUploadLog(data) {
+  return request({
+    url: '/ad/AdUploadLog',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除百度回传日志
+export function delAdUploadLog(id) {
+  return request({
+    url: '/ad/AdUploadLog/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出百度回传日志
+export function exportAdUploadLog(query) {
+  return request({
+    url: '/ad/AdUploadLog/export',
+    method: 'get',
+    params: query
+  })
+}

+ 268 - 0
src/views/ad/AdDyAccount/index.vue

@@ -0,0 +1,268 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="账户ID" prop="advertiserId">
+        <el-input
+          v-model="queryParams.advertiserId"
+          placeholder="请输入账户ID"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="账户名称" prop="advertiserName">
+        <el-input
+          v-model="queryParams.advertiserName"
+          placeholder="请输入账户名称"
+          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>
+      </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="['ad:AdDyAccount: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="['ad:AdDyAccount:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="AdDyAccountList">
+      <el-table-column label="账户ID" align="center" prop="advertiserId" />
+      <el-table-column label="账户名称" align="center" prop="advertiserName" />
+      <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"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['ad:AdDyAccount:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['ad:AdDyAccount:remove']"
+          >删除</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="80px">
+        <el-form-item label="账户ID" prop="advertiserId">
+          <el-input v-model="form.advertiserId" placeholder="请输入账户ID" />
+        </el-form-item>
+        <el-form-item label="账户名称" prop="advertiserName">
+          <el-input v-model="form.advertiserName" placeholder="请输入账户名称" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </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>
+  </div>
+</template>
+
+<script>
+import { listAdDyAccount, getAdDyAccount, delAdDyAccount, addAdDyAccount, updateAdDyAccount, exportAdDyAccount } from "@/api/ad/AdDyAccount";
+
+export default {
+  name: "AdDyAccount",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 抖音账户表格数据
+      AdDyAccountList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        advertiserId: null,
+        accountStringId: null,
+        advertiserName: null,
+        isValid: null,
+        accountRole: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询抖音账户列表 */
+    getList() {
+      this.loading = true;
+      listAdDyAccount(this.queryParams).then(response => {
+        this.AdDyAccountList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        advertiserId: null,
+        accountStringId: null,
+        advertiserName: null,
+        isValid: null,
+        accountRole: 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
+      getAdDyAccount(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改抖音账户";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateAdDyAccount(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addAdDyAccount(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 delAdDyAccount(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有抖音账户数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          this.exportLoading = true;
+          return exportAdDyAccount(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+          this.exportLoading = false;
+        }).catch(() => {});
+    }
+  }
+};
+</script>

+ 346 - 0
src/views/ad/AdUploadLog/index.vue

@@ -0,0 +1,346 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+
+      <el-form-item label="媒体类型" prop="type">
+        <el-select v-model="queryParams.type" @change="typeChange" placeholder="请选择媒体类型" clearable size="small">
+          <el-option
+            v-for="item in typeOptions"
+            :key="item.dictValue"
+            :label="item.dictLabel"
+            :value="item.dictValue"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="账号" prop="accountId" v-if="queryParams.type != null">
+        <el-select v-model="queryParams.accountId" filterable v-loading="accountLoading" clearable size="small">
+          <el-option v-for="item in accountList" :value="item.id" :key="item.id" :label="item.name" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="站点" prop="siteId">
+        <el-select v-model="queryParams.siteId" filterable clearable size="small">
+          <el-option v-for="item in siteList" :value="item.id" :key="item.id" :label="item.name" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="广告ID" prop="vid">
+        <el-input
+          v-model="queryParams.vid"
+          placeholder="请输入广告ID"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="上传时间">
+        <el-date-picker
+          v-model="date"
+          type="daterange"
+          range-separator="至"
+          start-placeholder="开始日期"
+          value-format="yyyy-MM-dd"
+          end-placeholder="结束日期" />
+      </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="warning"-->
+<!--          plain-->
+<!--          icon="el-icon-download"-->
+<!--          size="mini"-->
+<!--          :loading="exportLoading"-->
+<!--          @click="handleExport"-->
+<!--          v-hasPermi="['ad:AdUploadLog:export']"-->
+<!--        >导出</el-button>-->
+<!--      </el-col>-->
+<!--      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
+<!--    </el-row>-->
+
+    <el-table border v-loading="loading" :data="AdUploadLogList">
+      <el-table-column label="媒体类型" align="center" prop="type">
+        <template slot-scope="scope">
+          <el-tag prop="type" v-for="(item, index) in typeOptions" v-if="scope.row.type==item.dictValue">{{item.dictLabel}}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="站点" align="center" prop="siteName" />
+<!--      <el-table-column label="模板ID" align="center" prop="templateId" />-->
+      <el-table-column label="账户" align="center" prop="accountName" />
+<!--      <el-table-column label="点击URL" align="center" prop="url">-->
+<!--        <template slot-scope="scope">-->
+<!--          <el-tooltip class="item" effect="dark" :content="scope.row.url" placement="top">-->
+<!--            <a>{{scope.row.url}}</a>-->
+<!--          </el-tooltip>-->
+<!--        </template>-->
+<!--      </el-table-column>-->
+      <el-table-column label="上传类型" align="center" prop="uploadType">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.uploadType.indexOf('ADD_WX') != -1" type="success">加微</el-tag>
+          <el-tag v-if="scope.row.uploadType.indexOf('REGISTERED') != -1" type="warning">注册</el-tag>
+          <el-tag v-if="scope.row.uploadType.indexOf('FINISH_THE_CLASS') != -1" type="danger">完课</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="广告ID" align="center" prop="vid" />
+      <el-table-column label="上传时间" align="center" prop="createTime" />
+    </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="80px">
+        <el-form-item label="站点ID" prop="siteId">
+          <el-input v-model="form.siteId" placeholder="请输入站点ID" />
+        </el-form-item>
+        <el-form-item label="媒体类型" prop="type">
+          <el-select v-model="form.type" placeholder="请选择媒体类型">
+            <el-option label="请选择字典生成" value="" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="模板ID" prop="templateId">
+          <el-input v-model="form.templateId" placeholder="请输入模板ID" />
+        </el-form-item>
+        <el-form-item label="账户ID" prop="accountId">
+          <el-input v-model="form.accountId" placeholder="请输入账户ID" />
+        </el-form-item>
+        <el-form-item label="域名ID" prop="domainId">
+          <el-input v-model="form.domainId" placeholder="请输入域名ID" />
+        </el-form-item>
+        <el-form-item label="点击URL" prop="url">
+          <el-input v-model="form.url" placeholder="请输入点击URL" />
+        </el-form-item>
+        <el-form-item label="上传类型" prop="uploadType">
+          <el-select v-model="form.uploadType" placeholder="请选择上传类型">
+            <el-option label="请选择字典生成" value="" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="广告唯一ID" prop="vid">
+          <el-input v-model="form.vid" placeholder="请输入广告唯一ID" />
+        </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>
+  </div>
+</template>
+
+<script>
+import { listAdUploadLog, getAdUploadLog, delAdUploadLog, addAdUploadLog, updateAdUploadLog, exportAdUploadLog } from "@/api/ad/AdUploadLog";
+import {listAll as accountListAll} from "@/api/ad/adAccount";
+import {listAll as siteListAll} from "@/api/ad/adSite";
+
+export default {
+  name: "AdUploadLog",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 百度回传日志表格数据
+      AdUploadLogList: [],
+      accountList: [],
+      siteList: [],
+      accountAllList: [],
+      accountLoading: false,
+      typeOptions: [],
+      date: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        siteId: null,
+        type: null,
+        templateId: null,
+        accountId: null,
+        domainId: null,
+        url: null,
+        uploadType: null,
+        vid: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    accountListAll().then(e => {
+      this.accountAllList = e.data;
+    })
+    this.loadingSite();
+    this.getDicts("ad_type").then((response) => {
+      this.typeOptions = response.data;
+    });
+    this.getList();
+  },
+  methods: {
+    /** 查询百度回传日志列表 */
+    getList() {
+      this.loading = true;
+      if(this.date != null && this.date.length > 0){
+        this.queryParams.startDate = this.date[0];
+        this.queryParams.endDate = this.date[1];
+      }
+      listAdUploadLog(this.queryParams).then(response => {
+        this.AdUploadLogList = response.rows;
+        this.AdUploadLogList.forEach(item => {
+          item.uploadType = item.uploadType.split(",")
+        })
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    copyUrl(url){
+      navigator.clipboard.writeText(url)
+        .then(() => {
+          this.msgSuccess("复制成功");
+        })
+        .catch(err => {
+          this.msgError("复制失败");
+        });
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        siteId: null,
+        type: null,
+        templateId: null,
+        accountId: null,
+        domainId: null,
+        url: null,
+        uploadType: null,
+        vid: null,
+        createTime: 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
+      getAdUploadLog(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改百度回传日志";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateAdUploadLog(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addAdUploadLog(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 delAdUploadLog(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有百度回传日志数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          this.exportLoading = true;
+          return exportAdUploadLog(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+          this.exportLoading = false;
+        }).catch(() => {});
+    },
+    typeChange(){
+      let type = this.queryParams.type;
+      this.queryParams.accountId = undefined;
+      this.accountList = this.accountAllList.filter(item => item.type == type);
+      this.queryParams.siteId = undefined;
+      this.loadingSite();
+    },
+    loadingSite(){
+      siteListAll({type:this.queryParams.type}).then(e => {
+        this.siteList = e.data;
+      })
+    },
+  }
+};
+</script>

+ 27 - 26
src/views/ad/adSite/index.vue

@@ -86,14 +86,20 @@
     <el-table border v-loading="loading" :data="adSiteList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="id" align="center" prop="id" />
-      <el-table-column label="模板" align="center" prop="templateName" />
+      <el-table-column label="获客连接" align="center" prop="linkName" />
       <el-table-column label="媒体类型" align="center" prop="type">
         <template slot-scope="scope">
           <el-tag prop="type" v-for="(item, index) in typeOptions" v-if="scope.row.type==item.dictValue">{{item.dictLabel}}</el-tag>
         </template>
       </el-table-column>
       <el-table-column label="账号" align="center" prop="accountName" />
-      <el-table-column label="链接" align="center" prop="url" />
+      <el-table-column label="链接" align="center">
+        <template slot-scope="scope">
+          <el-tooltip class="item" effect="dark" content="复制链接" placement="top-start">
+            <el-link type="primary" @click="copyUrl(scope.row.url)">{{scope.row.url}}</el-link>
+          </el-tooltip>
+        </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">
@@ -159,6 +165,11 @@
             <el-option v-for="item in domainList" :value="item.id" :key="item.id" :label="item.domain" />
           </el-select>
         </el-form-item>
+        <el-form-item label="获客链接" prop="workId">
+          <el-select v-model="form.workId" filterable>
+            <el-option v-for="item in workList" :value="item.id" :key="item.id" :label="item.linkName" />
+          </el-select>
+        </el-form-item>
         <el-form-item label="备注" prop="remark">
           <el-input v-model="form.remark" placeholder="请输入备注" />
         </el-form-item>
@@ -173,12 +184,10 @@
 
 <script>
 import { listAdSite, getAdSite, delAdSite, addAdSite, updateAdSite, exportAdSite } from "@/api/ad/adSite";
-import {listAll as bdAccountListAll} from "@/api/baidu/BdAccount";
-import {listAll as youkuAccountListAll} from "@/api/ad/AdYouKuaccount";
-import {listAll as iqiyiAccountListAll} from "@/api/ad/AdIqiyiAccount";
 import {listAll as templateListAll} from "@/api/ad/htmlTemplate";
 import {listAll as domainListAll} from "@/api/ad/adDomain";
 import {listAll as accountListAll} from "@/api/ad/adAccount";
+import {listAll as workUrlListAll} from '@/api/qw/workLink'
 
 export default {
   name: "AdSite",
@@ -221,6 +230,7 @@ export default {
       },
       // 表单参数
       form: {},
+      workList: [],
       // 表单校验
       rules: {
       }
@@ -239,6 +249,9 @@ export default {
     accountListAll().then(e => {
       this.accountAllList = e.data;
     })
+    workUrlListAll().then(e => {
+      this.workList = e.data;
+    })
     this.getList();
   },
   methods: {
@@ -288,6 +301,15 @@ export default {
       this.single = selection.length!==1
       this.multiple = !selection.length
     },
+    copyUrl(url){
+      navigator.clipboard.writeText(url)
+        .then(() => {
+          this.msgSuccess("复制成功");
+        })
+        .catch(err => {
+          this.msgError("复制失败");
+        });
+    },
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
@@ -359,27 +381,6 @@ export default {
       let type = this.form.type;
       this.form.accountId = undefined;
       this.accountList = this.accountAllList.filter(item => item.type == type);
-      // if(type == 0){
-      //   this.accountLoading = true;
-      //   bdAccountListAll({}).then(res => {
-      //     this.accountLoading = false;
-      //     this.accountList = res.data;
-      //   })
-      // }
-      // if(type == 1){
-      //   this.accountLoading = true;
-      //   youkuAccountListAll().then(res => {
-      //     this.accountLoading = false;
-      //     this.accountList = res.data;
-      //   })
-      // }
-      // if(type == 2){
-      //   this.accountLoading = true;
-      //   iqiyiAccountListAll().then(res => {
-      //     this.accountLoading = false;
-      //     this.accountList = res.data;
-      //   })
-      // }
     },
   }
 };

+ 5 - 5
src/views/index.vue

@@ -51,7 +51,7 @@
               企微数量
             </div>
             <div class="card-value highlight">
-              <count-to :start-val="0" :end-val="memberCount" :duration="3600" class="card-panel-num" /></div>
+              <count-to :start-val="0" :end-val="qwMemberNum" :duration="3600" class="card-panel-num" /></div>
             <div class="card-badge">
             </div>
           </div>
@@ -191,7 +191,7 @@
 
         <div class="action-group">
           <el-radio-group v-model="userTypeText" @change="handleUserType">
-            <el-radio-button label="会员"></el-radio-button>
+<!--            <el-radio-button label="会员"></el-radio-button>-->
             <el-radio-button label="企微"></el-radio-button>
           </el-radio-group>
 
@@ -826,8 +826,8 @@ export default {
       smsRemainCount: 0,
       viewerType: '0',
       viewerChart: null,
-      userTypeText: '会员',
-      userType: 1,
+      userTypeText: '企微',
+      userType: 2,
       dealerChart: null,
       // 分公司数量
       dealderCount: 0,
@@ -1561,7 +1561,7 @@ export default {
 
     font-family: BebasNeue;
     color: #1677ff;
-    font-size: 26px;
+    font-size: 21px;
     line-height: 42px;
     font-weight: 400;
     margin-top: 8px;

+ 15 - 4
src/views/qw/sopTemp/index.vue

@@ -239,7 +239,7 @@
             />
           </el-select>
         </el-form-item>
-        <el-form-item label="课程" prop="courseId" v-if="form.sendType == 5 && !form.id">
+        <el-form-item label="课程" prop="courseId" v-if="form.sendType == 11 && !form.id">
           <el-select v-model="form.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini"
                      filterable>
             <el-option
@@ -256,10 +256,20 @@
         <el-form-item label="排序" prop="sort">
           <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="每天发送次数" @change="sendNumChange"></el-input-number>
+        <el-form-item label="发课时间" prop="time" v-if="form.sendType == 11 && !form.id">
+          <el-time-picker
+            class="custom-input"
+            v-model="form.time"
+            value-format="HH:mm"
+            format="HH:mm"
+            placeholder="时间"
+            style="width: 100px;height: 20px;margin-left: 10px;margin-top: 10px">
+          </el-time-picker>
+        </el-form-item>
+        <el-form-item label="每天催课次数" prop="num" v-if="form.sendType == 11 && !form.id">
+          <el-input-number v-model="form.num" :min="1" label="每天催课次数" @change="sendNumChange"></el-input-number>
         </el-form-item>
-        <el-form-item label="发送时间" v-if="form.sendType == 5 && !form.id">
+        <el-form-item label="催课时间" v-if="form.sendType == 11 && !form.id">
           <el-time-picker
             v-for="item in form.timeList"
             class="custom-input"
@@ -454,6 +464,7 @@ export default {
         sendType: this.sendType,
         sort: 0,
         num: 1,
+        time: "",
         timeList: [{value: ""}],
         status: "1",
       };

+ 15 - 15
src/views/qw/sopTemp/updateSopTemp.vue

@@ -51,8 +51,8 @@
                         <el-input :disabled="formType == 3" v-model="item.name"
                                   placeholder="内容名称,仅内部可见"/>
                       </el-form-item>
-                      <el-form-item label="课程" v-if="form.sendType == 5 && item.content && item.content.length > 0" required>
-                        <el-select :disabled="(formType == 3 || form.sendType == 5) && item.id != null" v-model="item.content[0].courseId"
+                      <el-form-item label="课程" v-if="form.sendType == 11 && item.content && item.content.length > 0" required>
+                        <el-select :disabled="(formType == 3 || form.sendType == 11) && item.id != null" v-model="item.content[0].courseId"
                                    placeholder="请选择课程" style=" margin-right: 10px;" size="mini" remote
                                    filterable
                                    @change="courseChangeUpdate(item.content[0], index, 0)">
@@ -63,7 +63,7 @@
                             :value="parseInt(dict.dictValue)"
                           />
                         </el-select>
-                        <el-select :disabled="(formType == 3 || form.sendType == 5) && item.id != null" v-model="item.content[0].videoId"
+                        <el-select :disabled="(formType == 3 || form.sendType == 11) && item.id != null" v-model="item.content[0].videoId"
                                    placeholder="请选择小节" size="mini" style=" margin-right: 10px;" remote
                                    filterable
                                    @change="videoIdChange(item.content[0],index,0)">
@@ -141,7 +141,7 @@
                                   </el-radio-group>
                                 </el-form-item>
                                 <el-form-item label="课程" v-if="content.type == 2 && form.sendType != 5" required>
-                                  <el-select :disabled="formType == 3 || form.sendType == 5" v-model="content.courseId"
+                                  <el-select :disabled="formType == 3 || form.sendType == 11" v-model="content.courseId"
                                              placeholder="请选择课程" style=" margin-right: 10px;" size="mini" remote
                                              filterable
                                              @change="courseChangeUpdate(content,index,contentIndex)">
@@ -152,7 +152,7 @@
                                       :value="parseInt(dict.dictValue)"
                                     />
                                   </el-select>
-                                  <el-select :disabled="formType == 3 || form.sendType == 5" v-model="content.videoId"
+                                  <el-select :disabled="formType == 3 || form.sendType == 11" v-model="content.videoId"
                                              placeholder="请选择小节" size="mini" style=" margin-right: 10px;" remote
                                              filterable
                                              @change="videoIdChange(content,index,contentIndex)">
@@ -272,9 +272,9 @@
                                               </el-radio>
                                             </el-radio-group>
                                           </div>
-                                          <div v-if="form.sendType == 5">
+                                          <div v-if="form.sendType == 11">
                                             <el-radio-group v-model="setList.contentType"
-                                                            :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)"
+                                                            :disabled="formType == 3 || (form.sendType == 11 && contentIndex != 0 && setIndex == 0)"
                                                             @change="handleContentTypeChange(content,index,contentIndex,setIndex, item, 'contentType', $event)">
                                               <el-radio
                                                 :key="item.dictValue"
@@ -312,20 +312,20 @@
                                             v-if="setList.contentType == 3  || (setList.contentType == 9 && content.type==2 )">
                                             <el-card class="box-card">
                                               <el-form-item label="链接标题:" label-width="100px" required>
-                                                <el-input :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)" v-model="setList.linkTitle"
+                                                <el-input :disabled="formType == 3 || (form.sendType == 11 && contentIndex != 0 && setIndex == 0)" v-model="setList.linkTitle"
                                                           @change="updateAll(setIndex, item, 'linkTitle', $event)"
                                                           placeholder="请输入链接标题"
                                                           style="width: 90%;"/>
                                               </el-form-item>
                                               <el-form-item label="链接描述:" label-width="100px" required>
-                                                <el-input :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)" type="textarea" :rows="3"
+                                                <el-input :disabled="formType == 3 || (form.sendType == 11 && contentIndex != 0 && setIndex == 0)" type="textarea" :rows="3"
                                                           v-model="setList.linkDescribe"
                                                           @change="updateAll(setIndex, item, 'linkDescribe', $event)"
                                                           placeholder="请输入链接描述"
                                                           style="width: 90%;margin-top: 1%;"/>
                                               </el-form-item>
                                               <el-form-item label="链接封面:" label-width="100px" required>
-                                                <ImageUpload :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)" v-model="setList.linkImageUrl"
+                                                <ImageUpload :disabled="formType == 3 || (form.sendType == 11 && contentIndex != 0 && setIndex == 0)" v-model="setList.linkImageUrl"
                                                              type="image" :num="1"
                                                              @input="updateAll(setIndex, item, 'linkImageUrl', $event)"
                                                              :file-size="2" :width="150" :height="150"
@@ -352,7 +352,7 @@
                                             <el-card class="box-card">
                                               <el-form-item label="标题" prop="miniprogramTitle">
                                                 <el-input v-model="setList.miniprogramTitle"
-                                                          :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)"
+                                                          :disabled="formType == 3 || (form.sendType == 11 && contentIndex != 0 && setIndex == 0)"
                                                           @change="updateAll(setIndex, item, 'miniprogramTitle', $event)"
                                                           placeholder="请输入小程序消息标题,最长为64字节" :rows="2"
                                                           maxlength="64" type="textarea"
@@ -361,7 +361,7 @@
                                               <el-form-item label="封面" prop="miniprogramPicUrl">
                                                 <ImageUpload v-if="content.isOfficial !== '1'"
                                                              @change="updateAll(setIndex, item, 'miniprogramPicUrl', $event)"
-                                                             :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)"
+                                                             :disabled="formType == 3 || (form.sendType == 11 && contentIndex != 0 && setIndex == 0)"
                                                              v-model="setList.miniprogramPicUrl" type="image" :num="10"
                                                              :width="150" :height="150"/>
                                               </el-form-item>
@@ -519,7 +519,7 @@
                                                       v-if="content.type == 2 && setList.isBindUrl == '1' && setList.contentType != 2  && setList.contentType != 5  && setList.contentType != 6 && setList.contentType != 8 && setList.contentType != 9 && setList.contentType != 10  ">
                                           <el-row>
                                             <el-input type="number" v-model="setList.expiresDays"
-                                                      :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)"
+                                                      :disabled="formType == 3 || (form.sendType == 11 && contentIndex != 0 && setIndex == 0)"
                                                       @change="updateAll(setIndex, item, 'expiresDays', $event)"
                                                       style="width: 200px">
                                               <template slot="append">天</template>
@@ -566,7 +566,7 @@
                                     <el-col :span="1" :offset="1">
                                       <i class="el-icon-delete" @click="delSetList(index,contentIndex,setIndex)"
                                          style="margin-top: 20px;"
-                                         v-if="content.setting.length>1 && formType != 3 && !(form.sendType == 5 && setIndex == 0)"></i>
+                                         v-if="content.setting.length>1 && formType != 3 && !(form.sendType == 11 && setIndex == 0)"></i>
                                     </el-col>
                                   </el-row>
                                 </div>
@@ -1729,7 +1729,7 @@ export default {
 
     },
     updateAll(setIndex, list, fieldName, newVal) {
-      if(this.form.sendType == 5 && setIndex == 0) {
+      if(this.form.sendType == 11 && setIndex == 0) {
         console.info("更新数据", newVal)
         for (let index in list.content) {
           this.$set(list.content[index].setting[0], fieldName, newVal);