Procházet zdrojové kódy

Merge remote-tracking branch 'origin/dev' into dev

wuguojie před 1 rokem
rodič
revize
dc59bedde8

+ 2 - 3
env.js

@@ -34,9 +34,8 @@ const envs = {
     _ISCDN: true, // 是否开启cdn加速
   },
   development: {
-    // DOMAIN: 'http://10.1.4.199:6180',
-    // DOMAIN: 'http://10.1.37.249:6180',
-    DOMAIN: 'https://scrm-gw.chinacoal-ins.com',
+    // DOMAIN: 'http://192.168.0.19:6180',//董鑫
+    DOMAIN: 'http://192.168.0.106:6180',//屈晨
     BASE_URL: './', // 路由基础路径
     BASE_API: 'https://scrm-gw.chinacoal-ins.com',
     // BASE_API: 'http://10.1.37.249:6180',

+ 642 - 0
src/components/templateTable.vue

@@ -0,0 +1,642 @@
+<template>
+  <div style="position: relative" ref="commonTable">
+    <!--表格栏-->
+    <el-table id="commonTable" ref="doLayout" :data="data.content" :highlight-current-row="highlightCurrentRow"
+      @selection-change="selectionChange" @row-click="rowClick" @current-change="handleCurrentChange" :border="border"
+      :stripe="stripe" :show-summary="showSummary" :show-overflow-tooltip="showOverflowTooltip"
+      :height="tableHeights ? tableHeights : tableHeight" :size="size" :align="align" style="width: 100%"
+      :row-class-name="tableRowClassName" :expand-row-keys="expandRows" row-key="id">
+      <el-table-column type="selection" width="50" fixed align="center" v-if="
+        showBatchDelete ||
+        refreshStatus ||
+        showBatchSettled ||
+        showBatchPrint ||
+        customToolseletted ||
+        disableInBulk ||
+        select
+      "></el-table-column>
+      <el-table-column v-if="SerialShow" label="序号" type="index" width="50" align="center"></el-table-column>
+      <template v-for="column in columns">
+        <el-table-column header-align="center" align="center" :prop="column.prop" :label="column.label"
+          :width="column.width" :min-width="column.minWidth" :fixed="column.fixed" :key="column.prop"
+          :type="column.type" :formatter="column.formatter" :sortable="column.sortable ? column.sortable : false">
+          <template v-for="columnchildren in column.children">
+            <el-table-column v-if="columnchildren" header-align="center" align="center" :prop="columnchildren.prop"
+              :label="columnchildren.label" :width="columnchildren.width" :min-width="columnchildren.minWidth"
+              :fixed="columnchildren.fixed" :key="columnchildren.prop" :type="columnchildren.type"
+              :formatter="columnchildren.formatter" :sortable="columnchildren.sortable == null ? true : columnchildren.sortable
+                ">
+            </el-table-column>
+          </template>
+        </el-table-column>
+      </template>
+      <el-table-column label="操作" :width="operationWidth" :fixed="isNotFixed ? false : 'right'" v-if="showOperation"
+        header-align="center" align="center" class-name="table-fiexd">
+        <template slot-scope="scope">
+          <slot name="buttonSlot" :row="scope.row" :index="scope.$index"></slot>
+        </template>
+      </el-table-column>
+
+    </el-table>
+    <!--分页栏-->
+    <!-- 底部分页 -->
+    <!-- <kt-button :label="customToolName" :perms="permscustomTool" :size="size" type="danger" @click="customToolMethod()"
+        :disabled="selections.length === 0" style="float: left" v-if="customToolseletted" />
+      <kt-button class="debutton" :label="deleteName" :perms="permsDelete" :size="size" type="danger"
+        @click="handleBatchDelete()" :disabled="selections.length === 0" style="float: left"
+        v-if="showBatchDelete & showOperation" />
+      <kt-button class="debutton" :label="refreshStatusName" :size="size" type="danger" @click="refreshStatusBatch()"
+        :disabled="selections.length === 0" style="float: left" v-if="refreshStatus" />
+      <kt-button :label="customToolName1" :perms="permscustomTool" :size="size" type="danger"
+        @click="customToolMethod1()" :disabled="selections.length === 0" style="float: left"
+        v-if="customToolseletted" />
+      <kt-button :label="disableInBulkName" :perms="disableInBulkperms" :size="size" type="danger"
+        @click="disableInBulkClick()" :disabled="selections.length === 0" style="float: left" v-if="disableInBulk" />
+      <kt-button :label="settledName" :perms="permsSettled" :size="size" type="danger" @click="handleBatchSettled()"
+        :disabled="selections.length === 0" style="float: left" v-if="showBatchSettled" />
+      <kt-button label="导出Excel" :perms="permsExcel" :size="size" type="danger" @click="handleBatchPrint()"
+        style="float: left" v-if="showBatchPrint" />
+      <div v-if="tableSelectedCount" class="tableSelectedCountClass">已选
+        <span>{{ tableSelectedCount }}</span>
+        条
+      </div> -->
+    <pagination v-show="data.totalSize > 0 && data.totalSize" :total="data.totalSize" :page.sync="data.pageNum"
+      :limit.sync="data.pageSize" @pagination="findPage()" />
+  </div>
+</template>
+<script>
+export default {
+  name: "KtCommonTable",
+  components: {
+  },
+  props: {
+    //批量刷新状态
+    refreshStatus: {
+      type: Boolean,
+      default: false
+    },
+    // 承保规则expend内容
+    agreementUnderwritingRuleShow: {
+      type: Boolean,
+      default: false
+    },
+    select: {
+      type: Boolean,
+      default: false,
+    },
+    tableHeights: {
+      type: Number,
+    },
+    operationWidth: {
+      type: Number,
+      default: 200,
+    },
+    // 是否需要固定列(指操作那一列)
+    isNotFixed: {
+      type: Boolean,
+      default: false
+    },
+    showBatchSettled: {
+      //显示批量结算
+      type: Boolean,
+      default: false,
+    },
+    SerialShow: {
+      type: Boolean,
+      default: false,
+    },
+    customToolName: {
+      type: String,
+    },
+    customToolName1: {
+      type: String,
+    },
+    permscustomTool: {
+      type: String,
+    },
+    customToolseletted: {
+      // 自定义操作组件
+      type: Boolean,
+      default: false,
+    },
+    disableInBulkName: {
+      type: String,
+    },
+    disableInBulkperms: {
+      type: String,
+    },
+    disableInBulk: {
+      // 批量禁用
+      type: Boolean,
+      default: false,
+    },
+    settledName: {
+      //批量按钮name
+      type: String,
+    },
+    deleteName: {
+      type: String,
+    },
+    refreshStatusName: {
+      //批量更新状态按钮Name
+      type: String,
+    },
+    showBatchPrint: {
+      //显示批量导出
+      type: Boolean,
+      default: false,
+    },
+    //显示合计
+    showSummary: {
+      type: Boolean,
+      default: false,
+    },
+    //更多操作
+    buttonDropdown: {
+      type: Array,
+      default: () => [],
+    },
+    isshowpagination: {
+      //是否显示分页栏
+      type: Boolean,
+      default: true,
+    },
+
+    showSummaryFieldList: Array, //自定义合计列配置
+    keyName: String, //主键字段名
+    columns: Array, // 表格列配置
+    data: {}, // 表格分页数据
+    permsEdit: String, // 编辑权限标识
+    permsDelete: String, // 底部按钮标识
+    permsSettled: String, // 底部按钮标识
+    permsExcel: String, // 底部按钮标识
+    size: {
+      // 尺寸样式
+      type: String,
+      default: "small ",
+    },
+    align: {
+      // 文本对齐方式
+      type: String,
+      default: "left",
+    },
+    // maxHeight: {  // 表格最大高度
+    //   type: Number,
+    //   default: 1420
+    // },
+    // height: {  // 表格最大高度
+    //   type: Number,
+    //   default: 250
+    // },
+    showOperation: {
+      // 是否显示操作组件
+      type: Boolean,
+      default: true,
+    },
+    border: {
+      // 是否显示边框
+      type: Boolean,
+      default: false,
+    },
+    stripe: {
+      // 是否显示斑马线
+      type: Boolean,
+      default: true,
+    },
+    highlightCurrentRow: {
+      // 是否高亮当前行
+      type: Boolean,
+      default: true,
+    },
+    showOverflowTooltip: {
+      // 是否单行显示
+      type: Boolean,
+      default: true,
+    },
+    showBatchDelete: {
+      // 是否显示操作组件
+      type: Boolean,
+      default: false,
+    },
+    showSysUserAccountCardList: {
+      // 是否显示二级列组件
+      type: Boolean,
+      default: false,
+    },
+    showDefaultPage: {
+      // 是否默认调用一次查询
+      type: Boolean,
+      default: true,
+    }
+  },
+  data() {
+    return {
+      tableSelectedCount: "",
+      tableHeight: 0,
+      loading: false, // 加载标识
+      selections: [], // 列表选中列
+      pageRequest: {
+        pageNum: 1,
+        pageSize: 20,
+      },
+      taskPool: false,
+
+      underwritingRulesAddVehicleFactorVisible: false,
+      underwritingRulesForm: {
+        //承保因子表单项
+        agreementId: "", //协议id
+        ruleDescription: "", //规则描述
+        rulesStartDate: "",//规则起期
+        rulesEndDate: "",//规则止期
+        validInd: "1", //是否有效
+        rulesAttrList: [],//规则属性
+        carClassList: [],
+        areanumberplateList: [],
+        licenseAreaList: [],
+      },
+      expandRows: []
+    };
+  },
+  created() {
+  },
+  watch: {
+
+  },
+  methods: {
+    //获取银行卡信息
+    getSysUserAccountCardList(row) {
+      if (typeof row.expanded === "undefined") {
+        row.expanded = true;
+      }
+      if (row.expanded) {
+        if (this.expandRows.includes(row.id)) {
+          this.expandRows = this.expandRows.filter(item => item !== row.id);
+        } else {
+          this.expandRows.push(row.id);
+        }
+      } else {
+        this.expandRows = this.expandRows.filter(item => item !== row.id);
+      }
+      row.expanded = !row.expanded;
+      if (row.sysUserAccountCardList.length === 0) {
+        this.$api.dept.queryCardListByUserId(row.userId).then((res) => {
+          if (res.code == 200) {
+            if (res.data) {
+              row.sysUserAccountCardList = res.data;
+              this.$set(this.data.content, row.index, row)
+            }
+          }
+        });
+      }
+      //this.$refs.doLayout.toggleRowExpansion(row, row.expanded);
+    },
+
+    tableRowClassName(row, rowIndex) {
+      // if (!!row.fieldName24 && row.fieldName24.indexOf("未") >= 0) {
+      //   return "warningRow";
+      // } else if (!!row.fieldName24 && row.fieldName24.indexOf("已") >= 0) {
+      // return "successRow";
+      // }
+      if (!!this.taskPool) {
+        if (row.row.isExternal === 1) {
+          return "flagRow";
+        } else {
+          return "";
+        }
+      }
+      this.$emit("tableRowClassName", row);
+      // return '';
+    },
+
+    // 分页查询
+    findPage: function () {
+      this.loading = true;
+      let callback = (res) => {
+        this.loading = false;
+        //解决操作栏位置偏移问题
+        this.$nextTick(() => {
+          this.$refs.doLayout.doLayout();
+        }, 200);
+      };
+      this.$emit("findPage", {
+        pageRequest: this.pageRequest,
+        callback: callback,
+      });
+    },
+    hideLoading() {
+      this.loading = false;
+    },
+    // 选择切换
+    selectionChange: function (selections) {
+      let idlist = [];
+      this.tableSelectedCount = selections.length;
+      this.selections = selections;
+      // this.selections.map((item) => idlist.push(item.id));
+      this.$emit("selectionChange", selections);
+    },
+    // 选择切换
+    handleCurrentChange: function (val) {
+      this.$emit("handleCurrentChange", {
+        val: val,
+      });
+    },
+
+    rowClick: function (row) {
+      this.$emit("rowClick", {
+        row: row,
+      });
+    },
+    // 换页刷新
+    refreshPageRequest: function (pageNum) {
+      this.pageRequest.pageNum = pageNum;
+      // this.pageRequest.pageSize = 20;
+      this.findPage();
+    },
+    // 每页条数发生改变
+    handleSizeChange(pageSize) {
+      this.pageRequest.pageSize = pageSize;
+      this.findPage();
+    },
+    signStateChanged(index, row) {
+      this.$emit("signStateChanged", {
+        index: index,
+        row: row,
+      });
+    },
+    // 按钮编辑
+    handleBtnEdit: function (index, row) {
+      this.$emit("handleBtnEdit", {
+        index: index,
+        row: row,
+      });
+    },
+    // 编辑
+    handleEdit: function (index, row) {
+      this.$emit("handleEdit", {
+        index: index,
+        row: row,
+      });
+      // this.$emit('findLeftTreeData')
+    },
+    handleBreak: function (index, row, i, r) {
+      this.$emit("handleBreak", {
+        index: index,
+        row: row,
+        i: i,
+        r: r,
+      });
+    },
+
+    handleTimeLine: function (index, row, i, r) {
+      this.$emit("handleTimeLine", {
+        index: index,
+        row: row,
+        i: i,
+        r: r,
+      });
+    },
+    handleRebind: function (index, row, i, r) {
+      this.$emit("handleRebind", {
+        index: index,
+        row: row,
+        i: i,
+        r: r,
+      });
+    },
+    // 删除
+    handleDelete: function (index, row) {
+      let _keyName = "id";
+      if (!!this.keyName) {
+        _keyName = this.keyName;
+      }
+
+      this.delete(row[_keyName]);
+    },
+    handleButton1: function (index, row) {
+      this.$emit("handleButton1", {
+        index: index,
+        row: row,
+      });
+    },
+    handleButton2: function (index, row) {
+      this.$emit("handleButton2", {
+        index: index,
+        row: row,
+      });
+    },
+    handleButton3: function (index, row) {
+      this.$emit("handleButton3", {
+        index: index,
+        row: row,
+      });
+    },
+    handleButton4: function (index, row) {
+      this.$emit("handleButton4", {
+        index: index,
+        row: row,
+      });
+    },
+    handleButton5: function (index, row) {
+      this.$emit("handleButton5", {
+        index: index,
+        row: row,
+      });
+    },
+    handleButton6: function (index, row) {
+      this.$emit("handleButton6", {
+        index: index,
+        row: row,
+      });
+    },
+    handleButton7: function (index, row) {
+      this.$emit("handleButton7", {
+        index: index,
+        row: row,
+      });
+    },
+    handleButton8: function (index, row) {
+      this.$emit("handleButton8", {
+        index: index,
+        row: row,
+      });
+    },
+    handleButton10: function (index, row) {
+      this.$emit("handleButton10", {
+        index: index,
+        row: row,
+      });
+    },
+    handleButton9: function (index, row) {
+      this.$emit("handleButton9", {
+        index: index,
+        row: row,
+      });
+    },
+    handleButton: function (index, row) {
+      this.$emit("handleButton", {
+        index: index,
+        row: row,
+      });
+    },
+    //删除单个
+    handleDeleteFlag: function (index, row) {
+      this.$emit("handleDeleteFlag", { index: index, row: row });
+      // var _keyName = "id";
+      // if (!!this.keyName) {
+      //   _keyName = this.keyName;
+      // }
+      // let ids = row[_keyName];
+      // this.$confirm("确认删除吗?", "提示", {
+      //   type: "warning",
+      // })
+      //   .then(() => {
+      //     let params = [];
+      //     let idArray = (ids + "").split(",");
+      //     for (var i = 0; i < idArray.length; i++) {
+      //       var obj = {};
+      //       obj[_keyName] = idArray[i];
+      //       params.push(obj);
+      //     }
+      //     this.loading = true;
+      //     let callback = (res) => {
+      //       if (res.code == 200) {
+      //         this.$message({
+      //           message: "操作成功",
+      //           type: "success",
+      //         });
+      //         this.findPage();
+      //         // this.$emit('findLeftTreeData')
+      //       } else {
+      //         this.$message({
+      //           message: "操作失败, " + res.msg,
+      //           type: "error",
+      //         });
+      //       }
+      //     };
+      //     this.$emit("handleDeleteFlag", {
+      //       params: params,
+      //       callback: callback,
+      //     });
+      //     this.loading = false;
+      //   })
+      //   .catch(() => {
+      //     this.loading = false;
+      //   });
+    },
+    //批量刷新状态
+    refreshStatusBatch: function () {
+      let idlist = [];
+      this.selections.map((item) => idlist.push(item.subOrderId));
+      this.$emit("refreshStatusBatch", idlist);
+    },
+    // 批量删除
+    handleBatchDelete: function () {
+      let idlist = [];
+      this.selections.map((item) => idlist.push(item.id));
+      this.$emit("handleDelete", idlist);
+    },
+    //自定义批量操作按钮
+    customToolMethod() {
+      let idlist = [];
+      this.selections.map((item) => idlist.push(item.id));
+      this.$emit("customTool", idlist);
+    },
+
+    //自定义批量操作按钮1
+    customToolMethod1() {
+      let idlist = [];
+      this.selections.map((item) => idlist.push(item.id));
+      this.$emit("customTool1", idlist);
+    },
+    //批量导出
+    disableInBulkClick() {
+      let idlist = [];
+      this.selections.map((item) => idlist.push(item.id));
+      this.$emit("disableInBulkClick", idlist);
+    },
+    // 删除操作
+    delete: function (ids) {
+      var _keyName = "id";
+      if (!!this.keyName) {
+        _keyName = this.keyName;
+      }
+
+      this.$confirm("确认删除吗?", "提示", {
+        type: "warning",
+      })
+        .then(() => {
+          let params = [];
+          let idArray = (ids + "").split(",");
+          for (var i = 0; i < idArray.length; i++) {
+            var obj = {};
+            obj[_keyName] = idArray[i];
+            params.push(obj);
+          }
+          let callback = (res) => {
+            if (res.code == 200) {
+              this.$message({
+                message: "操作成功",
+                type: "success",
+              });
+              this.findPage();
+              // this.$emit('findLeftTreeData')
+            } else {
+              this.$message({
+                message: "操作失败, " + res.msg,
+                type: "error",
+              });
+            }
+          };
+          this.$emit("handleDelete", {
+            params: params,
+            callback: callback,
+          });
+        })
+        .catch(() => { });
+    },
+    //批量结算
+    handleBatchSettled: function () {
+      let _keyName = "orderno";
+      if (!!this.keyName) {
+        _keyName = this.keyName;
+      }
+      let idlist = [];
+      this.selections.map((item) => idlist.push(item[_keyName]));
+      this.$emit("handleSettled", idlist);
+    },
+    //批量打印
+    handleBatchPrint: function () {
+      // let _keyName = "orderno";
+      // if(!!this.keyName){
+      //   _keyName = this.keyName;
+      // }
+      // let ids = this.selections.map(item => item[_keyName]).toString()
+      // console.log(ids);
+      this.$emit("handlePrint");
+    },
+  },
+
+  mounted() {
+    const that = this;
+    if (this.showDefaultPage) {
+      that.refreshPageRequest(1);
+    }
+    setTimeout(() => {
+      let tableTop = that.$refs.commonTable.offsetTop;
+      let height = window.innerHeight;
+      let aaa= this.data.totalSize > 0 ? 225 : 175;
+      console.log(aaa)
+      that.tableHeight = height - tableTop - aaa  + "px";
+    }, 10);
+    // window.onresize = function () {
+    //   let tableTop = that.$refs.commonTable.offsetTop;
+    //   let bottomTop = that.$refs.bottomFixed.offsetTop;
+
+    //   that.tableHeight = bottomTop - tableTop - 120 + "px";
+    // };
+  },
+};
+</script>
+
+
+<style lang="scss" scoped></style>

+ 12 - 3
src/directive/index.js

@@ -1,17 +1,26 @@
-import hasRole from './permission/hasRole'
-import hasPermi from './permission/hasPermi'
-import preventReClick from './preventReClick'
+// 导入权限相关的自定义指令
+import hasRole from './permission/hasRole' // 导入检查用户角色的指令
+import hasPermi from './permission/hasPermi' // 导入检查用户权限的指令
+import preventReClick from './preventReClick' // 导入防止重复点击的指令
 
+// 定义一个安装函数,用于注册自定义指令
 const install = function(Vue) {
+  // 注册 hasRole 指令
   Vue.directive('hasRole', hasRole)
+  // 注册 hasPermi 指令
   Vue.directive('hasPermi', hasPermi)
+  // 注册 preventReClick 指令
   Vue.directive('preventReClick', preventReClick)
 }
 
+// 检查是否在浏览器环境中使用 Vue
 if (window.Vue) {
+  // 如果 Vue 已经在全局范围内定义,将指令暴露到全局
   window['hasRole'] = hasRole
   window['hasPermi'] = hasPermi
+  // 使用 install 函数注册指令
   Vue.use(install) // eslint-disable-line
 }
 
+// 导出 install 函数,以便在其他地方使用
 export default install

+ 14 - 6
src/directive/permission/hasPermi.js

@@ -1,26 +1,34 @@
 /**
-* 操作权限处理
-*/
+ * 操作权限处理指令
+ * 该指令用于根据用户的权限控制元素的显示与隐藏
+ */
 
 import store from '@/store'
 
 export default {
+  // 当指令被绑定到元素上时调用
   inserted (el, binding, vnode) {
-    const { value } = binding
-    const all_permission = "*:*:*";
-    const permissions = store.getters && store.getters.permissions
+    const { value } = binding // 获取指令传入的值
+    const all_permission = "*:*:*"; // 定义一个常量,表示所有权限
+    const permissions = store.getters && store.getters.permissions // 从 Vuex store 获取当前用户的权限列表
 
+    // 检查指令值是否存在,并且是一个非空数组
     if (value && value instanceof Array && value.length > 0) {
-      const permissionFlag = value
+      const permissionFlag = value // 将传入的权限值赋给 permissionFlag
 
+      // 检查用户是否具有所需的权限
       const hasPermissions = permissions.some(permission => {
+        // 如果用户拥有所有权限,或者用户的权限列表中包含所需的权限
         return all_permission === permission || permissionFlag.includes(permission)
       })
 
+      // 如果用户没有所需的权限
       if (!hasPermissions) {
+        // 可选:从 DOM 中移除该元素
         // el.parentNode && el.parentNode.removeChild(el)
       }
     } else {
+      // 如果没有设置操作权限标签值,抛出错误
       throw new Error(`请设置操作权限标签值`)
     }
   }

+ 16 - 8
src/directive/permission/hasRole.js

@@ -1,27 +1,35 @@
 /**
-* 角色权限处理
-*/
+ * 角色权限处理指令
+ * 该指令用于根据用户的角色控制元素的显示与隐藏
+ */
 
-import store from '@/store'
+import store from '@/store' // 导入 Vuex store,以获取用户的角色信息
 
 export default {
+  // 当指令被绑定到元素上时调用
   inserted(el, binding, vnode) {
-    const { value } = binding
-    const super_admin = "admin";
-    const roles = store.getters && store.getters.roles
+    const { value } = binding // 获取指令传入的值
+    const super_admin = "admin"; // 定义超级管理员角色
+    const roles = store.getters && store.getters.roles // 从 Vuex store 获取当前用户的角色列表
 
+    // 检查指令值是否存在,并且是一个非空数组
     if (value && value instanceof Array && value.length > 0) {
-      const roleFlag = value
+      const roleFlag = value // 将传入的角色值赋给 roleFlag
 
+      // 检查用户是否具有所需的角色
       const hasRole = roles.some(role => {
+        // 如果用户是超级管理员,或者用户的角色列表中包含所需的角色
         return super_admin === role || roleFlag.includes(role)
       })
 
+      // 如果用户没有所需的角色
       if (!hasRole) {
+        // 从 DOM 中移除该元素
         el.parentNode && el.parentNode.removeChild(el)
       }
     } else {
-      throw new Error(`请设置角色权限标签值"`)
+      // 如果没有设置角色权限标签值,抛出错误
+      throw new Error(`请设置角色权限标签值`)
     }
   }
 }

+ 140 - 1
src/styles/index.scss

@@ -187,7 +187,7 @@ div:focus {
       align-items: center;
       margin-bottom: 20px;
       font-size: 16px;
-      font-weight: 500;
+      font-weight:500;
       color: var(--font-black);
       line-height: 1;
       .desc {
@@ -358,3 +358,142 @@ div:focus {
     padding-bottom: 0 !important;
   }
 }
+/* flex布局 */
+.u-f,
+.u-f-ac,
+.u-f-ajc,
+.u-f-jsb,
+.u-f-je,
+.u-f1,
+.u-f-column,
+.u-f-sa {
+  display: flex;
+}
+
+.u-f-ac,
+.u-f-ajc {
+  align-items: center;
+}
+
+.u-f-ajc {
+  justify-content: center;
+}
+
+.u-f-jsb {
+  justify-content: space-between;
+}
+
+.u-f-je {
+  justify-content: flex-end;
+}
+
+.u-f-sa {
+  justify-content: space-around;
+}
+
+.u-f1 {
+  flex: 1;
+}
+
+.u-f-column {
+  flex-direction: column;
+}
+
+.flex {
+  display: flex;
+
+}
+
+.f-wrap {
+  flex-wrap: wrap;
+}
+
+.j-s {
+  justify-content: space-between;
+}
+
+.j-c {
+  justify-content: center;
+}
+
+.j-start {
+  justify-content: flex-start;
+}
+
+.j-end {
+  justify-content: flex-end;
+}
+
+.a-c {
+  align-items: center;
+}
+
+.a-start {
+  align-items: flex-start;
+}
+
+.a-end {
+  align-items: flex-end;
+}
+
+.f-c {
+  flex-direction: column;
+}
+
+.p-1 {
+  padding: 10px;
+}
+
+.p-2 {
+  padding: 20px;
+}
+.mrgin-5{
+  margin: 5px;
+}
+.mrgin-1 {
+  margin: 10px;
+}
+
+.mrgin-2 {
+  margin: 20px;
+}
+
+.m-top-5 {
+  margin-top: 5px;
+}
+
+.m-top-10 {
+  margin-top: 10px;
+}
+.m-top-20 {
+  margin-top: 20px;
+}
+
+.m-btn-10 {
+  margin-bottom: 10px;
+}
+
+.m-btn-15 {
+  margin-bottom: 15px;
+}
+.mr-1{
+  margin-right: 10px;
+}
+.mr-2{
+  margin-right: 20px;
+}
+.mr-3{
+  margin-right: 30px;
+}
+.ml-1{
+  margin-left: 10px;
+}
+.ml-2{
+  margin-left: 20px;
+}
+.ml-3{
+  margin-left: 30px;
+}
+.mb-2{
+  margin-bottom: 20px;
+}

+ 6 - 7
src/views/carHfAllot/infoMsg/groupDetail.vue

@@ -196,7 +196,7 @@
                 </el-date-picker>
               </el-form-item>
             </el-col>
-           
+
             <el-col :span="24">
               <el-form-item label="回访内容" prop="hfmsg">
                 <el-input style="max-width: 100%" :autosize="{ minRows: 2 }" type="textarea" v-model="addEditForm.hfmsg"
@@ -239,7 +239,6 @@
 import {
   addEditHf,
   getHfList,
-  oneRenewal,
   dictSelect,
   deleteRow,
 } from "@/api/carHfManage";
@@ -260,7 +259,7 @@ export default {
         ],
       },
 
-    
+
 
       getHfListData: [],
       getHfListList: [
@@ -425,7 +424,7 @@ export default {
           sypolicyno,
         };
       } else {
-      
+
         this.addOrEdit = "编辑";
         this.addEditForm = row;
       }
@@ -443,13 +442,13 @@ export default {
         type: "warning",
       })
         .then(() => {
-         
+
           deleteRow(scope.row.keyId).then((res) => {
             that.$message({
               type: "success",
               message: "删除成功!",
             });
-          
+
             that.querygetHfList();
           });
         })
@@ -476,7 +475,7 @@ export default {
           row.oldjqpolicyno || row.oldsypolicyno || row.proposalno || "",
 
         type: type,
-        policyno: row.oldjqpolicyno || row.oldsypolicyno 
+        policyno: row.oldjqpolicyno || row.oldsypolicyno
       };
 
       if (type == "Renewal" || type == "Update" || type == "Query") {

+ 6 - 7
src/views/carHfInfo/infoMsg/groupDetail.vue

@@ -185,7 +185,7 @@
                 <el-select v-model="addEditForm.status" placeholder="请选择" style="width: 100%" clearable>
                   <el-option v-for="(item, index) in statusList" :key="index" :label="item.dictvalue"
                     :value="item.dictcode"></el-option>
-                </el-select>  
+                </el-select>
               </el-form-item>
             </el-col>
 
@@ -196,7 +196,7 @@
                 </el-date-picker>
               </el-form-item>
             </el-col>
-           
+
             <el-col :span="24">
               <el-form-item label="回访内容" prop="hfmsg">
                 <el-input style="max-width: 100%" :autosize="{ minRows: 2 }" type="textarea" v-model="addEditForm.hfmsg"
@@ -239,7 +239,6 @@
 import {
   addEditHf,
   getHfList,
-  oneRenewal,
   dictSelect,
   deleteRow,
 } from "@/api/carHfManage";
@@ -260,7 +259,7 @@ export default {
         ],
       },
 
-    
+
 
       getHfListData: [],
       getHfListList: [
@@ -424,7 +423,7 @@ export default {
           sypolicyno,
         };
       } else {
-      
+
         this.addOrEdit = "编辑";
         this.addEditForm = row;
       }
@@ -442,13 +441,13 @@ export default {
         type: "warning",
       })
         .then(() => {
-         
+
           deleteRow(scope.row.keyId).then((res) => {
             that.$message({
               type: "success",
               message: "删除成功!",
             });
-          
+
             that.querygetHfList();
           });
         })

+ 7 - 8
src/views/carHfManage/infoMsg/groupDetail.vue

@@ -19,7 +19,7 @@
                   src="@/assets/drainageCode/zhengyan.png" />
               </div>
               <div v-else class="tuomin_appcontactphone">
-                <el-input :readonly="!!row.appcontactphone" :disabled="!row.appcontactphone" style="width: 70%;" 
+                <el-input :readonly="!!row.appcontactphone" :disabled="!row.appcontactphone" style="width: 70%;"
                   :value="row.appcontactphone.replace(/(\w{3})\w*(\w{4})/, '$1****$2')" placeholder="请输入客户电话" />
                 <img v-if="showFlag != '0'" @click="tuominFlag = !tuominFlag" class="tuomin_btn"
                   src="@/assets/drainageCode/biyan.png" />
@@ -196,7 +196,7 @@
                 </el-date-picker>
               </el-form-item>
             </el-col>
-           
+
             <el-col :span="24">
               <el-form-item label="回访内容" prop="hfmsg">
                 <el-input style="max-width: 100%" :autosize="{ minRows: 2 }" type="textarea" :readonly="!!addEditForm.hfmsg" :disabled="!addEditForm.hfmsg" v-model="addEditForm.hfmsg" placeholder="请输入内容">
@@ -238,7 +238,6 @@
 import {
   addEditHf,
   getHfList,
-  oneRenewal,
   dictSelect,
   deleteRow,
 } from "@/api/carHfManage";
@@ -259,7 +258,7 @@ export default {
         ],
       },
 
-    
+
 
       getHfListData: [],
       getHfListList: [
@@ -426,7 +425,7 @@ export default {
           sypolicyno,
         };
       } else {
-      
+
         this.addOrEdit = "编辑";
         this.addEditForm = row;
       }
@@ -444,13 +443,13 @@ export default {
         type: "warning",
       })
         .then(() => {
-         
+
           deleteRow(scope.row.keyId).then((res) => {
             that.$message({
               type: "success",
               message: "删除成功!",
             });
-          
+
             that.querygetHfList();
           });
         })
@@ -527,7 +526,7 @@ export default {
     queryDictionary() {
       const proArr = [];
       const list = [
-       
+
         "QW_HFTYPE",//状态
         "QW_HFSTATUS",//方式
 

+ 89 - 281
src/views/commodityCenter/commodityManage/list.vue

@@ -1,296 +1,104 @@
-<script>
-import * as api from '@/api/commodityCenter/commodityManage'
-
-const defaultForm = {
-  picture: '',
-  price: 1,
-  describe: '',
-  attachments: [],
-}
+<!-- 模板区域 -->
+<template>
+  <div>
+    <!-- 模板内容 -->
+    <el-form ref="queryForm" :inline="true" :model="queryform" label-width="100px" class="top-search">
+      <el-form-item label="商品名称" prop="name">
+        <el-input v-model="queryform.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item label="状态" prop="name">
+        <el-select v-model="queryform.labelName" placeholder="请选择,支持关键词搜索" clearable filterable>
+          <el-option label="全部" value="1"></el-option>
+          <el-option label="已绑定" value="2"></el-option>
+          <el-option label="未绑定" value="3"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="findPage()">查询</el-button>
+        <el-button @click="resetForm()">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="g-card  ">
+      <templateTable ref="commonTable" :operationWidth="200" :SerialShow="true" :showOperation="true"
+        :showBatchDelete="false" :data="Result" :columns="Columns" @findPage="findPage">
+        <template slot="buttonSlot" slot-scope="{ row }">
+          <el-button type="text" @click="viewDetails(row)">查看</el-button>
+          <el-button type="text" @click="viewDetails(row)">一键分享</el-button>
+        </template>
+      </templateTable>
+    </div>
+  </div>
+</template>
 
+<!-- 行为区域 -->
+<script>
+import templateTable from "@/components/templateTable.vue";
+import { Row } from "element-ui";
 export default {
-  components: {},
-  props: {},
+  components: {
+    templateTable
+  },
+  // 数据存放区域
   data() {
     return {
-      query: {
-        pageNum: 1,
-        pageSize: 10,
-        name: '',
+      queryform: {},//页面检索对象
+      form: {},//提交表单
+      rules: {
+        labelName: [
+          {
+            required: true,
+            message: '请选择员工',
+            trigger: 'chnage',
+          },
+        ],
+
       },
-      loading: false,
-      submitLoading: false,
-      dialogVisible: false,
-      form: JSON.parse(JSON.stringify(defaultForm)),
-      newInput: '',
-      newInputVisible: false,
-      rules: Object.freeze({
-        picture: [{ required: true, message: '必填项', trigger: 'change' }],
-        price: [{ required: true, message: '必填项', trigger: 'change' }],
-        describe: [{ required: true, message: '必填项', trigger: 'blur' }],
-      }),
-      // 选中数组
-      ids: [],
-      multiple: true,
-      total: 0,
-      list: [],
-      lastSyncTime: 0,
-      fileList: [],
+      Result: {
+        content: [
+          {
+            name: "3232",
+            status: true
+          },
+          {
+            name: "3232",
+            status: false
+          }
+        ],
+        totalSize: 100,
+      },
+      Columns: [
+        { prop: "name", label: "商品名称", minWidth: 180, },
+        { prop: "name", label: "商品类目", minWidth: 180, },
+        { prop: "mobile", label: "价格", minWidth: 180 },
+        { prop: "mobile", label: "供应商名称", minWidth: 180 },
+        { prop: "mobile", label: "已售", minWidth: 180 },
+        { prop: "mobile", label: "状态", minWidth: 180 },
+      ],
     }
   },
-  computed: {},
+  // 生命周期函数
   created() {
-    this.$store.dispatch(
-      'app/setBusininessDesc',
-      `
-			     <div>快捷创建商品图册,员工一键发送给客户,客户直接购买。</div>
-			   `,
-    )
-    this.getList()
   },
+  // 方法函数
   methods: {
-    resetForm() {
-      this.query.name = ''
-      this.getList(1)
-    },
-    getList(page) {
-      page && (this.query.pageNum = page)
-      this.loading = true
-      api
-        .getList(this.query)
-        .then(({ rows, total, lastSyncTime }) => {
-          this.list = rows
-          this.total = +total
-          this.lastSyncTime = lastSyncTime
-          this.loading = false
-        })
-        .catch(() => {
-          this.loading = false
-        })
-    },
-    edit(data) {
-      this.fileList = []
-      if (data) {
-        api.getDetail(data.id).then((res) => {
-          this.form = res.data
-          if (this.form.attachments) {
-            let arr = this.form.attachments.split(',')
-            arr.forEach((dd) => {
-              this.fileList.push({ url: dd })
-            })
-          }
-        })
-      } else {
-        this.form = JSON.parse(JSON.stringify(defaultForm))
-      }
-      this.dialogVisible = true
-    },
-    sync() {
-      const loading = this.$loading({
-        lock: true,
-        text: 'Loading',
-        spinner: 'el-icon-loading',
-        background: 'rgba(0, 0, 0, 0.7)',
-      })
-      api
-        .sync()
-        .then(() => {
-          loading.close()
-          this.msgSuccess('后台开始同步数据,请稍后关注进度')
-          this.getList()
-        })
-        .catch(() => {
-          loading.close()
-        })
+    // 查看详情
+    viewDetails() {
     },
-    submit() {
-      this.$refs['form'].validate((valid) => {
-        let form = JSON.parse(JSON.stringify(this.form))
-        form.price = form.price.toFixed(2)
-        form.attachments = this.fileList.map((dd) => dd.url).join(',')
-        this.submitLoading = true
-        api[form.id ? 'update' : 'add'](form, form.id)
-          .then(() => {
-            this.msgSuccess('操作成功')
-            this.dialogVisible = false
-            this.getList()
-          })
-          .finally(() => {
-            this.submitLoading = false
-          })
-      })
-    },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map((item) => item.id)
-      this.multiple = !selection.length
-    },
-    /** 删除按钮操作 */
-    remove(id) {
-      const operIds = id || this.ids + ''
-      this.$confirm('是否确认删除吗?', '警告', {
-        type: 'warning',
-      })
-        .then(function () {
-          return api.remove(operIds)
-        })
-        .then(() => {
-          this.getList()
-          this.msgSuccess('删除成功')
-        })
-    },
-    goRoute(row) {
-      this.$router.push({
-        path: './detail',
-        query: {
-          id: row.id,
-        },
-      })
+    /**
+     * 停用
+     * @param row status 状态 true 已绑定 false 未绑定
+     */
+    disableAction(row) {
+
+    },   //列表查询
+    findPage() {
+      console.log(1)
     },
   },
+  // 计算属性
+  computed: {
+  }
 }
 </script>
-<template>
-  <div>
-    <el-form ref="queryForm" :inline="true" :model="query" label-width="110px" class="top-search">
-      <el-form-item label="商品名称或描述" prop="name">
-        <el-input clearable v-model="query.name" placeholder="请输入"></el-input>
-      </el-form-item>
-      <el-form-item label="">
-        <el-button type="primary" @click="getList(1)">查询</el-button>
-        <el-button @click="resetForm()">重置</el-button>
-      </el-form-item>
-    </el-form>
-    <div class="g-card">
-      <div class="mid-action">
-        <el-button type="primary" class="mr10" @click="edit()">新建商品</el-button>
-        <el-button :disabled="!ids.length" type="danger" @click="remove()">批量删除</el-button>
-      </div>
-
-      <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="商品" align="center" prop="" width="200">
-          <div slot-scope="{ row }">
-            <div style="display: flex">
-              <el-image
-                style="width: 50px; height: 50px; margin-right: 5px; flex-shrink: 0"
-                :src="row.picture"></el-image>
-              <span class="limit_span">{{ row.describe }}</span>
-            </div>
-          </div>
-        </el-table-column>
-        <el-table-column label="单价(元)" align="center" prop="price" />
-        <el-table-column label="订单总数" align="center" prop="orderNum" />
-        <el-table-column label="订单总额(元)" align="center" prop="orderTotalAmount" />
-        <el-table-column label="创建人" align="center" prop="createBy" />
-        <el-table-column label="最近操作时间" align="center" prop="updateTime" width="180"></el-table-column>
-        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="{ row, index }">
-            <el-button type="text" @click="goRoute(row)">详情</el-button>
-            <el-button type="text" @click="edit(row, index)">编辑</el-button>
-            <el-button type="text" @click="remove(row.id)">删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        :page.sync="query.pageNum"
-        :limit.sync="query.pageSize"
-        @pagination="getList()" />
-    </div>
-
-    <!-- 弹窗 -->
-    <el-dialog :title="form.id ? '修改' : '新建'" :visible.sync="dialogVisible" :close-on-click-modal="false">
-      <el-row>
-        <el-col :span="12">
-          <el-form ref="form" :model="form" :rules="rules" label-width="130px">
-            <el-form-item label="商品封面" prop="picture">
-              <upload :fileUrl.sync="form.picture" type="0" :maxSize="10" :format="['jpg', 'png']">
-                <div slot="tip" class="tip">支持jpg/png格式,图片大小不超过10M</div>
-              </upload>
-            </el-form-item>
-            <el-form-item label="商品单价(元)" prop="price">
-              <el-input-number v-model="form.price" :precision="2" :step="0.1" :min="0" :max="50000"></el-input-number>
-              <div class="tip">精确到小数点后两位,不超过5万元</div>
-            </el-form-item>
-            <el-form-item label="商品标题或描述" prop="describe">
-              <el-input
-                v-model="form.describe"
-                type="textarea"
-                :maxlength="270"
-                show-word-limit
-                :autosize="{ minRows: 4, maxRows: 50 }"
-                placeholder="请输入"></el-input>
-            </el-form-item>
-            <el-form-item label="商品详情">
-              <upload
-                :fileList.sync="fileList"
-                :multiple="true"
-                :limit="8"
-                type="0"
-                :maxSize="10"
-                :format="['jpg', 'png']">
-                <div slot="tip" class="tip">最多添加八张详情</div>
-              </upload>
-            </el-form-item>
-          </el-form>
-        </el-col>
-        <el-col :span="12">
-          <PhoneTemplate>
-            <div class="phone-content">
-              <el-image
-                v-if="form.picture"
-                class="commodity-img commodity-thumb"
-                style="width: 100%"
-                :src="form.picture"></el-image>
-              <div v-else class="commodity-img commodity-thumb"></div>
-              <div class="price">¥{{ form.price }}</div>
-              <div class="content">{{ form.describe }}</div>
-              <el-image v-for="(item, index) in fileList" class="commodity-img" :src="item.url" :key="index"></el-image>
-            </div>
-          </PhoneTemplate>
-        </el-col>
-      </el-row>
-      <div slot="footer" class="dialog-footer ar">
-        <el-button type="primary" v-loading="submitLoading" @click="submit">确 定</el-button>
-        <el-button @click="dialogVisible = false">取 消</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-<style lang="scss" scoped>
-.tip {
-  color: #aaa;
-  font-size: 12px;
-  line-height: 20px;
-}
-.phone-content {
-  padding: 10px;
-}
-.price {
-  font-weight: 500;
-  font-size: 20px;
-  margin: 10px 0;
-}
-.content {
-  margin: 10px 0;
-}
-.commodity-img {
-  width: 100%;
-}
-.limit_span {
-  // width: 250px;
-  // overflow: hidden;
-  // text-overflow: ellipsis;
-  // // white-space: nowrap;
-  // display: inline-block;
-
-  white-space: pre-wrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  display: -webkit-box;
-  -webkit-box-orient: vertical;
-  -webkit-line-clamp: 2;
-}
-</style>
+<!-- 样式区域 -->
+<style lang='scss' scoped></style>

+ 1 - 1
src/views/communityOperating/keywords/list.vue

@@ -5,7 +5,7 @@
     props: {},
     data() {
       return {
-        h5Link: 'https://platform.wshoto.com/H5/?corpId=ww8e09372aff8d9190',
+        h5Link: 'https://platform.wshoto.com/H5/?corpId=wwfe67d19509d43ec5',
         query: {
           pageNum: 1,
           pageSize: 10,

+ 7 - 3
src/views/customerManage/customer.vue

@@ -41,7 +41,11 @@ export default {
         gourpName: '',
         weTags: [],
       },
-      list: [], // 客户列表
+      list: [
+        {
+          customerName:"321231"
+        }
+      ], // 客户列表
       staffList: [], // 所有员工列表
       dialogVisible: false, // 选择标签弹窗显隐
       dialogVisibleSelectUser: false, // 选择添加人弹窗显隐
@@ -209,7 +213,7 @@ export default {
               })
             }
           })
-          this.list = rows
+          // this.list = rows
           this.total = +total
           this.lastSyncTime = lastSyncTime
           this.noRepeatCustomerTotal = +noRepeatCustomerTotal
@@ -537,7 +541,7 @@ export default {
           <el-button type="info" @click="exportCustomerFn">
             导出列表
           </el-button>
-          
+
         </div>
       </div>
 

+ 61 - 0
src/views/customerManage/userSync/detail.vue

@@ -0,0 +1,61 @@
+<!-- 模板区域 -->
+<template>
+  <div>
+    <!-- 模板内容 -->
+    <div class="g-card  ">
+      <span class="g-card-title">用户详情</span>
+      <!-- 表单 -->
+      <!-- 模板内容 -->
+      <el-form ref="queryForm"  :model="queryForm" label-width="100px" >
+        <el-form-item label="用户ID" prop="name">
+          <el-input v-model="queryForm.name" placeholder="用户ID"></el-input>
+        </el-form-item>
+        <el-form-item label="用户姓名" prop="name">
+          <el-input v-model="queryForm.name" placeholder="请输入用户姓名"></el-input>
+        </el-form-item>
+        <el-form-item label="性别" prop="name">
+          <el-input v-model="queryForm.name" placeholder="请输入性别"></el-input>
+        </el-form-item>
+        <el-form-item label="生日" prop="name">
+          <el-input v-model="queryForm.name" placeholder="请输入生日"></el-input>
+        </el-form-item>
+        <el-form-item label="手机号" prop="name">
+          <el-input v-model="queryForm.name" placeholder="请输入手机号"></el-input>
+        </el-form-item>
+        <el-form-item label="用户状态" prop="name">
+          <el-input v-model="queryForm.name" placeholder="用户状态"></el-input>
+        </el-form-item>
+        <el-form-item label="用户类型" prop="name">
+          <el-input v-model="queryForm.name" placeholder="用户类型"></el-input>
+        </el-form-item>
+        <el-form-item label="注册时间" prop="name">
+          <el-input v-model="queryForm.name" placeholder="注册时间"></el-input>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+export default {
+  // 数据存放区域
+  data() {
+    return {
+      queryForm:{},
+
+    }
+  },
+  // 生命周期函数
+  created() {
+  },
+  // 方法函数
+  methods: {
+  },
+  // 计算属性
+  computed: {
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped></style>

+ 160 - 0
src/views/customerManage/userSync/list.vue

@@ -0,0 +1,160 @@
+<!-- 模板区域 -->
+<template>
+  <div>
+    <!-- 模板内容 -->
+    <el-form ref="queryForm" :inline="true" :model="query" label-width="100px" class="top-search">
+      <el-form-item label="用户ID" prop="name">
+        <el-input v-model="query.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item label="用户姓名" prop="name">
+        <el-input v-model="query.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item label="手机号" prop="name">
+        <el-input v-model="query.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item label="用户来源" prop="name">
+        <el-input v-model="query.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item label="用户状态" prop="name">
+        <el-input v-model="query.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item label="企微触达状态" prop="name">
+        <el-input v-model="query.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="getList(1)">查询</el-button>
+        <el-button @click="resetForm()">重置</el-button>
+        <!-- <el-button
+          v-hasPermi="['customerManage:customer:export']"
+          type="info"
+          @click="exportCustomer"
+          >导出列表</el-button
+        > -->
+      </el-form-item>
+    </el-form>
+    <div class="g-card  ">
+      <div class="mid-action">
+        <div style="margin-left: auto;">
+          <span class="desc">最近同步:321313131231</span>
+          <el-button class="ml10" type="primary" @click="syncUser">
+            同步用户
+          </el-button>
+        </div>
+      </div>
+      <templateTable ref="commonTable" :operationWidth="200" :showOperation="true" :showBatchDelete="false"
+        :data="Result" :columns="Columns" @findPage="findPage">
+        <template slot="buttonSlot" slot-scope="{ row }">
+          <el-button type="text" @click="viewDetails(row)">查看</el-button>
+          <el-button type="text" @click="transferUser">转出</el-button>
+        </template>
+      </templateTable>
+    </div>
+    <el-dialog title="选择员工" :visible.sync="transferUserShow" width="40%">
+      <div>
+        <el-form ref="form" :rules="rules" :model="form" label-position="left" label-width="120px">
+          <el-form-item label="选择员工" prop="labelName">
+            <el-select v-model="form.labelName" placeholder="请选择,支持关键词搜索" clearable filterable>
+              <el-option label="321" value="3"></el-option>
+              <el-option label="321" value="3"></el-option>
+              <el-option label="321" value="3"></el-option>
+            </el-select>
+          </el-form-item>
+
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="transferUserShow = false">取 消</el-button>
+        <el-button type="primary" @click="userOperation">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+import templateTable from "@/components/templateTable.vue";
+import { Row } from "element-ui";
+export default {
+  components: {
+    templateTable
+  },
+  // 数据存放区域
+  data() {
+    return {
+      transferUserShow: false,//转出弹窗
+      query: {},//页面检索对象
+      form: {},//提交表单
+      rules: {
+        labelName: [
+          {
+            required: true,
+            message: '请选择员工',
+            trigger: 'chnage',
+          },
+        ],
+
+      },
+      Result: {
+        content: [
+          {
+            name: "3232"
+          }
+        ],
+        totalSize: 100,
+      },
+      Columns: [
+        { prop: "name", label: "用户ID", minWidth: 180, },
+        { prop: "mobile", label: "用户姓名", minWidth: 160 },
+        { prop: "userId", label: "性别", minWidth: 120 },
+        { prop: "deptName", label: "生日", minWidth: 160 },
+        { prop: "type", label: "手机号", minWidth: 160, formatter: this.typeFormatter },
+        { prop: "originalLevel", label: "用户来源", minWidth: 160, formatter: this.originalLevelFormatter },
+        { prop: "originalLevel1", label: "用户状态", minWidth: 160, },
+        { prop: "originalLevel2", label: "用户类型", minWidth: 160, },
+        { prop: "originalLevel3", label: "注册时间", minWidth: 160, },
+        { prop: "originalLevel4", label: "企微触达状态", minWidth: 160, },
+        { prop: "originalLevel5", label: "添加时间", minWidth: 160, },
+        { prop: "originalLevel6", label: "最近互动时间", minWidth: 160, },
+
+      ],
+    }
+  },
+  // 生命周期函数
+  created() {
+  },
+  // 方法函数
+  methods: {
+    // 查看详情
+    viewDetails() {
+      this.$router.push({
+        path: 'userSyncDetail',
+        query: {name:"232" },
+      })
+    },
+    // 操作用户
+    userOperation() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          console.log(valid)
+        }
+      })
+    },
+    // 用户转出弹窗
+    transferUser() {
+      this.transferUserShow = true;
+    },   //列表查询
+    findPage() {
+      console.log(1)
+    },
+    // 同步用户
+    syncUser() {
+
+    },
+  },
+  // 计算属性
+  computed: {
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped></style>

+ 63 - 0
src/views/customerManage/wechatCustomer/detail.vue

@@ -0,0 +1,63 @@
+<!-- 模板区域 -->
+<template>
+  <div>
+    <!-- 模板内容 -->
+    <div class="g-card  ">
+      <span class="g-card-title">用户详情</span>
+      <!-- 表单 -->
+      <!-- 模板内容 -->
+      <el-form ref="detailForm"  :model="detailForm" label-position="left" label-width="80px" >
+        <el-form-item label="openid" prop="name">
+          <el-input v-model="detailForm.name" placeholder="用户openid"></el-input>
+        </el-form-item>
+        <el-form-item label="用户ID" prop="name">
+          <el-input v-model="detailForm.name" placeholder="请输入用户ID"></el-input>
+        </el-form-item>
+        <el-form-item label="微信昵称" prop="name">
+          <el-input v-model="detailForm.name" placeholder="请输入微信昵称"></el-input>
+        </el-form-item>
+        <el-form-item label="手机号" prop="name">
+          <el-input v-model="detailForm.name" placeholder="请输入手机号"></el-input>
+        </el-form-item>
+        <el-form-item label="头像" prop="name">
+            <div class="avatar"></div>
+        </el-form-item>
+        <el-form-item label="绑定时间" prop="name">
+          <el-input v-model="detailForm.name" placeholder="绑定时间"></el-input>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+export default {
+  // 数据存放区域
+  data() {
+    return {
+      detailForm:{},
+
+    }
+  },
+  // 生命周期函数
+  created() {
+  },
+  // 方法函数
+  methods: {
+  },
+  // 计算属性
+  computed: {
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped>
+.avatar{
+  width: 100px;
+  height: 100px;
+  border-radius: 50%;
+  border: 1px solid #DCDFE6;
+  margin-left: 10px;
+}
+</style>

+ 177 - 0
src/views/customerManage/wechatCustomer/list.vue

@@ -0,0 +1,177 @@
+<!-- 模板区域 -->
+<template>
+  <div>
+    <!-- 模板内容 -->
+    <el-form ref="queryForm" :inline="true" :model="queryform" label-width="80px" class="top-search">
+      <el-form-item label="openid" prop="name">
+        <el-input v-model="queryform.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item label="用户ID" prop="name">
+        <el-input v-model="queryform.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item label="微信昵称" prop="name">
+        <el-input v-model="queryform.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item label="状态" prop="name">
+        <el-select v-model="queryform.labelName" placeholder="请选择,支持关键词搜索" clearable filterable>
+          <el-option label="全部" value="1"></el-option>
+          <el-option label="已绑定" value="2"></el-option>
+          <el-option label="未绑定" value="3"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="getList(1)">查询</el-button>
+        <el-button @click="resetForm()">重置</el-button>
+        <!-- <el-button
+          v-hasPermi="['customerManage:customer:export']"
+          type="info"
+          @click="exportCustomer"
+          >导出列表</el-button
+        > -->
+      </el-form-item>
+    </el-form>
+    <div class="g-card  ">
+      <div class="mid-action">
+        <div style="margin-left: auto;">
+          <span class="desc">最近同步:321313131231</span>
+          <el-button class="ml10" type="primary" @click="syncUser">
+            同步用户
+          </el-button>
+        </div>
+      </div>
+      <templateTable ref="commonTable" :operationWidth="200" :showOperation="true" :showBatchDelete="false"
+        :data="Result" :columns="Columns" @findPage="findPage">
+        <template slot="buttonSlot" slot-scope="{ row }">
+          <el-button type="text" @click="viewDetails(row)">查看</el-button>
+          <el-button type="text" @click="userBinding(row)">{{ row.status ? "解绑" : "绑定" }}</el-button>
+        </template>
+      </templateTable>
+    </div>
+    <el-dialog title="选择用户" :visible.sync="userBindingShow" width="40%">
+      <div>
+        <el-form ref="form" :rules="rules" :model="form" label-position="left" label-width="120px">
+          <el-form-item label="选择用户" prop="labelName">
+            <el-select v-model="form.labelName" placeholder="请选择,支持关键词搜索" clearable filterable>
+              <el-option label="321" value="3"></el-option>
+              <el-option label="321" value="3"></el-option>
+              <el-option label="321" value="3"></el-option>
+            </el-select>
+          </el-form-item>
+
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="userBindingShow = false">取 消</el-button>
+        <el-button type="primary" @click="userOperation">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+import templateTable from "@/components/templateTable.vue";
+export default {
+  components: {
+    templateTable
+  },
+  // 数据存放区域
+  data() {
+    return {
+      userBindingShow: false,//转出弹窗
+      queryform: {},//页面检索对象
+      form: {},//提交表单
+      rules: {
+        labelName: [
+          {
+            required: true,
+            message: '请选择员工',
+            trigger: 'chnage',
+          },
+        ],
+
+      },
+      Result: {
+        content: [
+          {
+            name: "3232",
+            status: true
+          },
+          {
+            name: "3232",
+            status: false
+          }
+        ],
+        totalSize: 100,
+      },
+      Columns: [
+        { prop: "name", label: "openid", minWidth: 180, },
+        { prop: "name", label: "用户ID", minWidth: 180, },
+        { prop: "mobile", label: "微信昵称", minWidth: 160 },
+        { prop: "userId", label: "手机号码", minWidth: 120 },
+        { prop: "deptName", label: "头像URL", minWidth: 160 },
+        { prop: "type", label: "绑定时间", minWidth: 160, formatter: this.typeFormatter },
+        { prop: "originalLevel", label: "状态", minWidth: 160, formatter: this.originalLevelFormatter },
+        { prop: "originalLevel1", label: "最后同步时间", minWidth: 160, },
+
+      ],
+    }
+  },
+  // 生命周期函数
+  created() {
+  },
+  // 方法函数
+  methods: {
+    // 查看详情
+    viewDetails() {
+      this.$router.push({
+        path: 'wechatCustomerDetail',
+        query: { name: "232" },
+      })
+    },
+    // 操作用户
+    userOperation() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          console.log(valid)
+        }
+      })
+    },
+    /**
+     * 绑定方法
+     * @param row status 状态 true 已绑定 false 未绑定
+     */
+    userBinding(row) {
+      if (row.status) {
+        this.$confirm('您正在执行解绑操作。解绑后,该 openid 与客户 ID的关联关系将被清除,若需重新绑定需手动操作。</br>请再次确认是否解绑?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          dangerouslyUseHTMLString: true,
+        }).then(() => {
+          this.$message({
+            type: 'success',
+            message: '删除成功!'
+          });
+        }).catch(() => {
+
+        });
+      } else {
+        this.userBindingShow = true;
+
+      }
+    },   //列表查询
+    findPage() {
+      console.log(1)
+    },
+    // 同步用户
+    syncUser() {
+
+    },
+  },
+  // 计算属性
+  computed: {
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped></style>

+ 133 - 0
src/views/customerOperation/smartTagging.vue

@@ -0,0 +1,133 @@
+<!-- 模板区域 -->
+<template>
+  <div>
+    <!-- 模板内容 -->
+    <el-form ref="queryForm" :inline="true" :model="queryform" label-width="100px" class="top-search">
+      <el-form-item label="行为类型名称" prop="name">
+        <el-input v-model="queryform.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item label="关联标签" prop="name">
+        <el-input v-model="queryform.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="findPage()">查询</el-button>
+        <el-button @click="resetForm()">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="g-card  ">
+      <div class="mid-action">
+        <el-button class="ml10" type="primary" @click="createBehavior">
+          新建
+        </el-button>
+      </div>
+      <templateTable ref="commonTable" :operationWidth="200" :SerialShow="true" :showOperation="true" :showBatchDelete="false"
+        :data="Result" :columns="Columns" @findPage="findPage">
+        <template slot="buttonSlot" slot-scope="{ row }">
+          <el-button type="text" @click="viewDetails(row)">查看</el-button>
+        </template>
+      </templateTable>
+    </div>
+    <el-dialog title="添加行为类型" :visible.sync="createBehaviorShow" width="40%">
+      <div>
+        <el-form ref="form" :rules="rules" :model="form" label-position="left" label-width="120px">
+          <el-form-item label="行为类型编码" prop="labelName">
+            <el-input v-model="form.name" placeholder="请输入行为类型编码"></el-input>
+          </el-form-item>
+          <el-form-item label="行为类型名称" prop="labelName">
+            <el-input v-model="form.name" placeholder="请输入行为类型名称"></el-input>
+          </el-form-item>
+          <el-form-item label="行为描述" prop="labelName">
+            <el-input type="textarea" v-model="form.desc"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="createBehaviorShow = false">取 消</el-button>
+        <el-button type="primary" @click="userOperation">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+import templateTable from "@/components/templateTable.vue";
+import { Row } from "element-ui";
+export default {
+  components: {
+    templateTable
+  },
+  // 数据存放区域
+  data() {
+    return {
+      createBehaviorShow: false,//转出弹窗
+      queryform: {},//页面检索对象
+      form: {},//提交表单
+      rules: {
+        labelName: [
+          {
+            required: true,
+            message: '请选择员工',
+            trigger: 'chnage',
+          },
+        ],
+
+      },
+      Result: {
+        content: [
+          {
+            name: "3232",
+            status: true
+          },
+          {
+            name: "3232",
+            status: false
+          }
+        ],
+        totalSize: 0,
+      },
+      Columns: [
+        { prop: "name", label: "行为类型名称", minWidth: 180, },
+        { prop: "name", label: "规则名称", minWidth: 180, },
+        { prop: "mobile", label: "关联标签", minWidth: 360 },
+      ],
+    }
+  },
+  // 生命周期函数
+  created() {
+  },
+  // 方法函数
+  methods: {
+    // 查看详情
+    viewDetails() {
+    },
+    // 操作用户
+    userOperation() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          console.log(valid)
+        }
+      })
+    },
+    /**
+     * 停用
+     * @param row status 状态 true 已绑定 false 未绑定
+     */
+    disableAction(row) {
+
+    },   //列表查询
+    findPage() {
+      console.log(1)
+    },
+    // 同步用户
+    createBehavior() {
+        this.createBehaviorShow=true;
+    },
+  },
+  // 计算属性
+  computed: {
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped></style>

+ 139 - 0
src/views/customerOperation/userActionTypeConfig.vue

@@ -0,0 +1,139 @@
+<!-- 模板区域 -->
+<template>
+  <div>
+    <!-- 模板内容 -->
+    <el-form ref="queryForm" :inline="true" :model="queryform" label-width="100px" class="top-search">
+      <el-form-item label="行为类型名称" prop="name">
+        <el-input v-model="queryform.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item label="状态" prop="name">
+        <el-select v-model="queryform.labelName" placeholder="请选择,支持关键词搜索" clearable filterable>
+          <el-option label="全部" value="1"></el-option>
+          <el-option label="已绑定" value="2"></el-option>
+          <el-option label="未绑定" value="3"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="findPage()">查询</el-button>
+        <el-button @click="resetForm()">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="g-card  ">
+      <div class="mid-action">
+        <el-button class="ml10" type="primary" @click="createBehavior">
+          新增
+        </el-button>
+      </div>
+      <templateTable ref="commonTable" :operationWidth="200" :showOperation="true" :showBatchDelete="false"
+        :data="Result" :columns="Columns" @findPage="findPage">
+        <template slot="buttonSlot" slot-scope="{ row }">
+          <el-button type="text" @click="viewDetails(row)">查看</el-button>
+          <el-button type="text" @click="disableAction(row)">停用</el-button>
+        </template>
+      </templateTable>
+    </div>
+    <el-dialog title="添加行为类型" :visible.sync="createBehaviorShow" width="40%">
+      <div>
+        <el-form ref="form" :rules="rules" :model="form" label-position="left" label-width="120px">
+          <el-form-item label="行为类型编码" prop="labelName">
+            <el-input v-model="form.name" placeholder="请输入行为类型编码"></el-input>
+          </el-form-item>
+          <el-form-item label="行为类型名称" prop="labelName">
+            <el-input v-model="form.name" placeholder="请输入行为类型名称"></el-input>
+          </el-form-item>
+          <el-form-item label="行为描述" prop="labelName">
+            <el-input type="textarea" v-model="form.desc"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="createBehaviorShow = false">取 消</el-button>
+        <el-button type="primary" @click="userOperation">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+import templateTable from "@/components/templateTable.vue";
+import { Row } from "element-ui";
+export default {
+  components: {
+    templateTable
+  },
+  // 数据存放区域
+  data() {
+    return {
+      createBehaviorShow: false,//转出弹窗
+      queryform: {},//页面检索对象
+      form: {},//提交表单
+      rules: {
+        labelName: [
+          {
+            required: true,
+            message: '请选择员工',
+            trigger: 'chnage',
+          },
+        ],
+
+      },
+      Result: {
+        content: [
+          {
+            name: "3232",
+            status: true
+          },
+          {
+            name: "3232",
+            status: false
+          }
+        ],
+        totalSize: 0,
+      },
+      Columns: [
+        { prop: "name", label: "行为类型编码", minWidth: 180, },
+        { prop: "name", label: "行为类型名称", minWidth: 180, },
+        { prop: "mobile", label: "行为描述(选填)", minWidth: 360 },
+        { prop: "userId", label: "状态", minWidth: 120 },
+      ],
+    }
+  },
+  // 生命周期函数
+  created() {
+  },
+  // 方法函数
+  methods: {
+    // 查看详情
+    viewDetails() {
+    },
+    // 操作用户
+    userOperation() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          console.log(valid)
+        }
+      })
+    },
+    /**
+     * 停用
+     * @param row status 状态 true 已绑定 false 未绑定
+     */
+    disableAction(row) {
+
+    },   //列表查询
+    findPage() {
+      console.log(1)
+    },
+    // 同步用户
+    createBehavior() {
+        this.createBehaviorShow=true;
+    },
+  },
+  // 计算属性
+  computed: {
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped></style>

+ 31 - 0
src/views/customerOperations/sop/detail.vue

@@ -0,0 +1,31 @@
+<!-- 模板区域 -->
+<template>
+  <div>
+  <!-- 模板内容 -->
+
+  </div>
+  </template>
+
+  <!-- 行为区域 -->
+  <script>
+  export default {
+    // 数据存放区域
+    data () {
+      return {
+      }
+    },
+    // 生命周期函数
+    created () {
+    },
+    // 方法函数
+    methods: {
+    },
+    // 计算属性
+    computed: {
+    }
+  }
+  </script>
+  <!-- 样式区域 -->
+  <style lang='scss' scoped>
+
+  </style>

+ 180 - 0
src/views/customerOperations/sop/list.vue

@@ -0,0 +1,180 @@
+<!-- 模板区域 -->
+<template>
+  <div>
+    <!-- 模板内容 -->
+    <el-form ref="queryForm" :inline="true" :model="queryform" label-width="100px" class="top-search">
+      <el-form-item label="SOP名称" prop="name">
+        <el-input v-model="queryform.name" placeholder="请输入"></el-input>
+      </el-form-item>
+      <el-form-item label="启用状态" prop="name">
+        <el-select v-model="queryform.labelName" placeholder="请选择,支持关键词搜索" clearable filterable>
+          <el-option label="全部" value="1"></el-option>
+          <el-option label="已绑定" value="2"></el-option>
+          <el-option label="未绑定" value="3"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="findPage()">查询</el-button>
+        <el-button @click="resetForm()">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="g-card  ">
+      <div class="mid-action">
+        <el-button class="ml10" type="primary" @click="sopAdd">
+          新建
+        </el-button>
+      </div>
+      <templateTable ref="commonTable" :operationWidth="200" :SerialShow="true" :showOperation="true"
+        :showBatchDelete="false" :data="Result" :columns="Columns" @findPage="findPage">
+        <template slot="buttonSlot" slot-scope="{ row }">
+          <el-button type="text" @click="viewDetails(row)">编辑</el-button>
+          <el-button type="text" @click="viewDetails(row)">复制</el-button>
+          <el-button type="text" @click="viewDetails(row)">删除</el-button>
+          <el-button type="text" @click="viewDetails(row)">停用</el-button>
+        </template>
+      </templateTable>
+    </div>
+    <el-dialog title="新建SOP规则" :visible.sync="sopAddShow" width="30%">
+      <div>
+        <el-form ref="form" :rules="rules"   :model="form" label-width="120px">
+          <el-form-item label="SOP名称" prop="labelName">
+            <el-input v-model="form.name" placeholder="请输入行为类型编码"></el-input>
+          </el-form-item>
+          <el-form-item label="场景描述" prop="labelName">
+            <el-input type="textarea" v-model="form.desc" maxlength="200" show-word-limit
+              placeholder="请输入关键词"></el-input>
+          </el-form-item>
+          <el-form-item label="触发类型" prop="labelName">
+            <el-select v-model="queryform.labelName" placeholder="请选择" clearable filterable>
+              <el-option label="行为触发" value="2"></el-option>
+              <el-option label="时间触发" value="3"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="行为类型编码" prop="labelName">
+            <el-select v-model="queryform.labelName" placeholder="请选择" clearable filterable>
+              <el-option label="行为触发" value="2"></el-option>
+              <el-option label="时间触发" value="3"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="labelName">
+            <el-radio-group v-model="queryform.radio">
+              <el-radio :label="3">相对时间</el-radio>
+              <el-radio :label="6">绝对时间</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="时间间隔" prop="labelName">
+            <el-input v-model="form.desc" placeholder="输入天数"></el-input>
+          </el-form-item>
+          <el-form-item label="选择日期" prop="labelName">
+            <el-date-picker v-model="form.value2" type="date" placeholder="选择日期"
+              value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="关联标签" prop="labelName">
+            <el-select v-model="queryform.labelName" placeholder="请选择,支持关键词搜索" clearable filterable>
+              <el-option label="行为触发" value="2"></el-option>
+              <el-option label="时间触发" value="3"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="关联素材" prop="labelName">
+            <el-select v-model="queryform.labelName" placeholder="请选择,支持关键词搜索" clearable filterable>
+              <el-option label="行为触发" value="2"></el-option>
+              <el-option label="时间触发" value="3"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="sopAddShow = false">取 消</el-button>
+        <el-button type="primary" @click="userOperation">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+import templateTable from "@/components/templateTable.vue";
+import { Row } from "element-ui";
+export default {
+  components: {
+    templateTable
+  },
+  // 数据存放区域
+  data() {
+    return {
+      sopAddShow: false,//转出弹窗
+      queryform: {},//页面检索对象
+      form: {},//提交表单
+      rules: {
+        labelName: [
+          {
+            required: true,
+            message: '请选择员工',
+            trigger: 'chnage',
+          },
+        ],
+
+      },
+      Result: {
+        content: [
+          {
+            name: "3232",
+            status: true
+          },
+          {
+            name: "3232",
+            status: false
+          }
+        ],
+        totalSize: 100,
+      },
+      Columns: [
+        { prop: "name", label: "SOPID", minWidth: 180, },
+        { prop: "name", label: "SOP名称", minWidth: 180, },
+        { prop: "mobile", label: "场景描述", minWidth: 180 },
+        { prop: "mobile", label: "触发类型", minWidth: 180 },
+        { prop: "mobile", label: "关联标签", minWidth: 180 },
+        { prop: "mobile", label: "启用状态", minWidth: 180 },
+        { prop: "mobile", label: "创建时间", minWidth: 180 },
+      ],
+    }
+  },
+  // 生命周期函数
+  created() {
+  },
+  // 方法函数
+  methods: {
+    // 查看详情
+    viewDetails() {
+    },
+    // 操作用户
+    userOperation() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          console.log(valid)
+        }
+      })
+    },
+    /**
+     * 停用
+     * @param row status 状态 true 已绑定 false 未绑定
+     */
+    disableAction(row) {
+
+    },   //列表查询
+    findPage() {
+      console.log(1)
+    },
+    // 同步用户
+    sopAdd() {
+      this.sopAddShow = true;
+    },
+  },
+  // 计算属性
+  computed: {
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped></style>

+ 1 - 1
src/views/system/menu/index.vue

@@ -56,7 +56,7 @@
     </div>
 
     <!-- 添加或修改菜单对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :close-on-click-modal="false">
+    <el-dialog :title="title" :visible.sync="open" width="50%" append-to-body :close-on-click-modal="false">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-row>
           <el-col :span="24">