zhuxinbo 5 vuotta sitten
vanhempi
commit
1a3b9d4093

+ 71 - 71
src/components/jeecgbiz/JSelectUserByDep.vue

@@ -1,72 +1,72 @@
-<template>
-  <div>
-    <a-input-search
-      v-model="selectedDepUsers"
-      placeholder="请先选择用户"
-      disabled
-      @search="onSearchDepUser">
-      <a-button slot="enterButton" :disabled="disabled">选择用户</a-button>
-    </a-input-search>
-    <j-select-user-by-dep-modal
-      ref="selectModal"
-      :modal-width="modalWidth"
-      @ok="onSearchDepUserCallBack"/>
-  </div>
-</template>
-
-<script>
-  import JSelectUserByDepModal from './modal/JSelectUserByDepModal'
-
-  export default {
-    name: 'JSelectUserByDep',
-    components: {JSelectUserByDepModal},
-    props: {
-      modalWidth: {
-        type: Number,
-        default: 1250,
-        required: false
-      },
-      value: {
-        type: String,
-        required: false
-      },
-      disabled: {
-        type: Boolean,
-        required: false,
-        default: false
-      }
-    },
-    data() {
-      return {
-        selectedDepUsers: "",
-      }
-    },
-    mounted() {
-      this.selectedDepUsers = this.value
-    },
-    watch: {
-      value(val) {
-        this.selectedDepUsers = val
-      }
-    },
-    model: {
-      prop: 'value',
-      event: 'change'
-    },
-    methods: {
-      //通过组织机构筛选选择用户
-      onSearchDepUser() {
-        this.$refs.selectModal.showModal()
-        this.onSearchDepUserCallBack('')
-      },
-      onSearchDepUserCallBack(selectedDepUsers) {
-        this.selectedDepUsers = selectedDepUsers
-        this.$emit("change", selectedDepUsers)
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
+<template>
+  <div>
+    <a-input-search
+      v-model="selectedDepUsers"
+      placeholder="请先选择用户"
+      disabled
+      @search="onSearchDepUser">
+      <a-button slot="enterButton" :disabled="disabled">选择用户</a-button>
+    </a-input-search>
+    <j-select-user-by-dep-modal
+      ref="selectModal"
+      :modal-width="modalWidth"
+      @ok="onSearchDepUserCallBack"/>
+  </div>
+</template>
+
+<script>
+  import JSelectUserByDepModal from './modal/JSelectUserByDepModal'
+
+  export default {
+    name: 'JSelectUserByDep',
+    components: {JSelectUserByDepModal},
+    props: {
+      modalWidth: {
+        type: Number,
+        default: 1250,
+        required: false
+      },
+      value: {
+        type: String,
+        required: false
+      },
+      disabled: {
+        type: Boolean,
+        required: false,
+        default: false
+      }
+    },
+    data() {
+      return {
+        selectedDepUsers: "",
+      }
+    },
+    mounted() {
+      this.selectedDepUsers = this.value
+    },
+    watch: {
+      value(val) {
+        this.selectedDepUsers = val
+      }
+    },
+    model: {
+      prop: 'value',
+      event: 'change'
+    },
+    methods: {
+      //通过组织机构筛选选择用户
+      onSearchDepUser() {
+        this.$refs.selectModal.showModal()
+        this.onSearchDepUserCallBack(this.value)
+      },
+      onSearchDepUserCallBack(selectedDepUsers,value) {
+        this.selectedDepUsers = selectedDepUsers
+        this.$emit("change", selectedDepUsers,value)
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
 </style>
 </style>

+ 306 - 306
src/components/jeecgbiz/modal/JSelectUserByDepModal.vue

@@ -1,307 +1,307 @@
-<template>
-  <a-modal
-    :width="modalWidth"
-    :visible="visible"
-    :title="title"
-    @ok="handleSubmit"
-    @cancel="close"
-    cancelText="关闭"
-    style="margin-top: -70px"
-    wrapClassName="ant-modal-cust-warp"
-  >
-    <a-row :gutter="10" style="background-color: #ececec; padding: 10px; margin: -10px">
-      <a-col :md="6" :sm="24">
-        <a-card :bordered="false">
-          <!--组织机构-->
-          <a-directory-tree
-            selectable
-            :selectedKeys="selectedKeys"
-            :checkStrictly="true"
-            @select="this.onSelect"
-            :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
-            :treeData="departTree"
-          />
-        </a-card>
-      </a-col>
-      <a-col :md="18" :sm="24">
-        <a-card :bordered="false">
-          用户账号:
-          <a-input-search
-            :style="{width:'150px',marginBottom:'15px'}"
-            placeholder="请输入用户账号"
-            v-model="queryParam.username"
-            @search="onSearch"
-          ></a-input-search>
-          <a-button @click="searchReset(1)" style="margin-left: 20px" icon="redo">重置</a-button>
-          <!--用户列表-->
-          <a-table
-            ref="table"
-            :scroll="scrollTrigger"
-            size="middle"
-            rowKey="id"
-            :columns="columns"
-            :dataSource="dataSource"
-            :pagination="ipagination"
-            :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type:'radio'}"
-            @change="handleTableChange">
-          </a-table>
-        </a-card>
-      </a-col>
-    </a-row>
-  </a-modal>
-</template>
-
-<script>
-  import {filterObj} from '@/utils/util'
-  import {queryDepartTreeList, getUserList, queryUserByDepId, queryUserRoleMap} from '@/api/api'
-
-  export default {
-    name: 'JSelectUserByDepModal',
-    components: {},
-    props: ['modalWidth'],
-    data() {
-      return {
-        queryParam: {
-          username: "",
-        },
-        columns: [
-          {
-            title: '用户账号',
-            align: 'center',
-            dataIndex: 'username'
-          },
-          {
-            title: '真实姓名',
-            align: 'center',
-            dataIndex: 'realname'
-          },
-          {
-            title: '角色名称',
-            align: 'center',
-            dataIndex: 'roleName'
-          },
-          {
-            title: '性别',
-            align: 'center',
-            dataIndex: 'sex',
-            customRender: function (text) {
-              if (text === 1) {
-                return '男'
-              } else if (text === 2) {
-                return '女'
-              } else {
-                return text
-              }
-            }
-          },
-          {
-            title: '手机号码',
-            align: 'center',
-            dataIndex: 'phone'
-          },
-          {
-            title: '邮箱',
-            align: 'center',
-            dataIndex: 'email'
-          }
-        ],
-        scrollTrigger: {},
-        dataSource: [],
-        selectedKeys: [],
-        userNameArr: [],
-        departName: '',
-        userRolesMap: {},
-        title: '根据部门选择用户',
-        ipagination: {
-          current: 1,
-          pageSize: 10,
-          pageSizeOptions: ['10', '20', '30'],
-          showTotal: (total, range) => {
-            return range[0] + '-' + range[1] + ' 共' + total + '条'
-          },
-          showQuickJumper: true,
-          showSizeChanger: true,
-          total: 0
-        },
-        isorter: {
-          column: 'createTime',
-          order: 'desc'
-        },
-        selectedRowKeys: [],
-        selectedRows: [],
-        departTree: [],
-        visible: false,
-        form: this.$form.createForm(this)
-      }
-    },
-    created() {
-      // 该方法触发屏幕自适应
-      this.resetScreenSize();
-      this.queryUserRoleMap();
-    },
-    methods: {
-      loadData(arg) {
-        if (arg === 1) {
-          this.ipagination.current = 1;
-        }
-        let params = this.getQueryParams();//查询条件
-        getUserList(params).then((res) => {
-          if (res.success) {
-            this.dataSource = res.result.records;
-            this.assignRoleName(this.dataSource);
-            this.ipagination.total = res.result.total;
-          }
-        })
-      },
-      queryUserRoleMap() {
-        queryUserRoleMap().then((res) => {
-          if (res.success) {
-            this.userRolesMap = res.result;
-            this.loadData();
-          }
-        })
-      },
-      // 触发屏幕自适应
-      resetScreenSize() {
-        let screenWidth = document.body.clientWidth;
-        if (screenWidth < 500) {
-          this.scrollTrigger = {x: 800};
-        } else {
-          this.scrollTrigger = {};
-        }
-      },
-      showModal() {
-        this.visible = true;
-        this.assignRoleName(this.dataSource);
-        this.queryDepartTree();
-        this.form.resetFields();
-      },
-      getQueryParams() {
-        let param = Object.assign({}, this.queryParam, this.isorter);
-        param.field = this.getQueryField();
-        param.pageNo = this.ipagination.current;
-        param.pageSize = this.ipagination.pageSize;
-        return filterObj(param);
-      },
-      getQueryField() {
-        let str = 'id,';
-        for (let a = 0; a < this.columns.length; a++) {
-          str += ',' + this.columns[a].dataIndex;
-        }
-        return str;
-      },
-      searchReset(num) {
-        let that = this;
-        if (num !== 0) {
-          that.queryParam = {};
-          that.loadData(1);
-        }
-        that.selectedRowKeys = [];
-        that.userNameArr = [];
-        that.selectedKeys = [];
-      },
-      close() {
-        this.searchReset(0);
-        this.visible = false;
-      },
-      handleTableChange(pagination, filters, sorter) {
-        //TODO 筛选
-        if (Object.keys(sorter).length > 0) {
-          this.isorter.column = sorter.field;
-          this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc';
-        }
-        this.ipagination = pagination;
-        this.loadData();
-      },
-      handleSubmit() {
-        let that = this;
-        for (let i = 0, len = this.selectedRowKeys.length; i < len; i++) {
-          this.getUserNames(this.selectedRowKeys[i]);
-        }
-        that.$emit('ok', that.userNameArr.join(','));
-        that.close();
-      },
-      // 遍历匹配,获取用户真实姓名
-      getUserNames(rowId) {
-        let dataSource = this.dataSource;
-        for (let i = 0, len = dataSource.length; i < len; i++) {
-          if (rowId === dataSource[i].id) {
-            this.userNameArr.push(dataSource[i].realname);
-          }
-        }
-      },
-      // 点击树节点,筛选出对应的用户
-      onSelect(selectedKeys) {
-        if (selectedKeys[0] != null) {
-          this.queryUserByDepId(selectedKeys); // 调用方法根据选选择的id查询用户信息
-          if (this.selectedKeys[0] !== selectedKeys[0]) {
-            this.selectedKeys = [selectedKeys[0]];
-          }
-        }
-      },
-      onSelectChange(selectedRowKeys, selectionRows) {
-        this.selectedRowKeys = selectedRowKeys;
-        this.selectionRows = selectionRows;
-      },
-      onSearch() {
-        this.loadData(1);
-      },
-      // 根据选择的id来查询用户信息
-      queryUserByDepId(selectedKeys) {
-        queryUserByDepId({id: selectedKeys.toString()}).then((res) => {
-          if (res.success) {
-            this.dataSource = res.result;
-            this.ipagination.total = res.result.length;
-            this.assignRoleName(this.dataSource);
-          }
-        })
-      },
-      // 传入用户id,找到匹配的角色名称
-      queryUserRole(userId) {
-        let map = this.userRolesMap;
-        let roleName = [];
-        for (var key in map) {
-          if (userId === key) {
-            roleName.push(map[key]);
-          }
-        }
-        return roleName.join(',');
-      },
-      queryDepartTree() {
-        queryDepartTreeList().then((res) => {
-          if (res.success) {
-            this.departTree = res.result;
-          }
-        })
-      },
-      // 为角色名称赋值
-      assignRoleName(data) {
-        let userId = '';
-        let role = '';
-        for (let i = 0, length = data.length; i < length; i++) {
-          userId = this.dataSource[i].id;
-          role = this.queryUserRole(userId);
-          this.dataSource[i].roleName = role;
-        }
-      },
-      modalFormOk() {
-        this.loadData();
-      }
-    }
-  }
-</script>
-
-<style scoped>
-  .ant-table-tbody .ant-table-row td {
-    padding-top: 10px;
-    padding-bottom: 10px;
-  }
-
-  #components-layout-demo-custom-trigger .trigger {
-    font-size: 18px;
-    line-height: 64px;
-    padding: 0 24px;
-    cursor: pointer;
-    transition: color .3s;
-  }
+<template>
+  <a-modal
+    :width="modalWidth"
+    :visible="visible"
+    :title="title"
+    @ok="handleSubmit"
+    @cancel="close"
+    cancelText="关闭"
+    style="margin-top: -70px"
+    wrapClassName="ant-modal-cust-warp"
+  >
+    <a-row :gutter="10" style="background-color: #ececec; padding: 10px; margin: -10px">
+      <a-col :md="6" :sm="24">
+        <a-card :bordered="false">
+          <!--组织机构-->
+          <a-directory-tree
+            selectable
+            :selectedKeys="selectedKeys"
+            :checkStrictly="true"
+            @select="this.onSelect"
+            :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
+            :treeData="departTree"
+          />
+        </a-card>
+      </a-col>
+      <a-col :md="18" :sm="24">
+        <a-card :bordered="false">
+          用户账号:
+          <a-input-search
+            :style="{width:'150px',marginBottom:'15px'}"
+            placeholder="请输入用户账号"
+            v-model="queryParam.username"
+            @search="onSearch"
+          ></a-input-search>
+          <a-button @click="searchReset(1)" style="margin-left: 20px" icon="redo">重置</a-button>
+          <!--用户列表-->
+          <a-table
+            ref="table"
+            :scroll="scrollTrigger"
+            size="middle"
+            rowKey="id"
+            :columns="columns"
+            :dataSource="dataSource"
+            :pagination="ipagination"
+            :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type:'radio'}"
+            @change="handleTableChange">
+          </a-table>
+        </a-card>
+      </a-col>
+    </a-row>
+  </a-modal>
+</template>
+
+<script>
+  import {filterObj} from '@/utils/util'
+  import {queryDepartTreeList, getUserList, queryUserByDepId, queryUserRoleMap} from '@/api/api'
+
+  export default {
+    name: 'JSelectUserByDepModal',
+    components: {},
+    props: ['modalWidth'],
+    data() {
+      return {
+        queryParam: {
+          username: "",
+        },
+        columns: [
+          {
+            title: '用户账号',
+            align: 'center',
+            dataIndex: 'username'
+          },
+          {
+            title: '真实姓名',
+            align: 'center',
+            dataIndex: 'realname'
+          },
+          {
+            title: '角色名称',
+            align: 'center',
+            dataIndex: 'roleName'
+          },
+          {
+            title: '性别',
+            align: 'center',
+            dataIndex: 'sex',
+            customRender: function (text) {
+              if (text === 1) {
+                return '男'
+              } else if (text === 2) {
+                return '女'
+              } else {
+                return text
+              }
+            }
+          },
+          {
+            title: '手机号码',
+            align: 'center',
+            dataIndex: 'phone'
+          },
+          {
+            title: '邮箱',
+            align: 'center',
+            dataIndex: 'email'
+          }
+        ],
+        scrollTrigger: {},
+        dataSource: [],
+        selectedKeys: [],
+        userNameArr: [],
+        departName: '',
+        userRolesMap: {},
+        title: '根据部门选择用户',
+        ipagination: {
+          current: 1,
+          pageSize: 10,
+          pageSizeOptions: ['10', '20', '30'],
+          showTotal: (total, range) => {
+            return range[0] + '-' + range[1] + ' 共' + total + '条'
+          },
+          showQuickJumper: true,
+          showSizeChanger: true,
+          total: 0
+        },
+        isorter: {
+          column: 'createTime',
+          order: 'desc'
+        },
+        selectedRowKeys: [],
+        selectedRows: [],
+        departTree: [],
+        visible: false,
+        form: this.$form.createForm(this)
+      }
+    },
+    created() {
+      // 该方法触发屏幕自适应
+      this.resetScreenSize();
+      this.queryUserRoleMap();
+    },
+    methods: {
+      loadData(arg) {
+        if (arg === 1) {
+          this.ipagination.current = 1;
+        }
+        let params = this.getQueryParams();//查询条件
+        getUserList(params).then((res) => {
+          if (res.success) {
+            this.dataSource = res.result.records;
+            this.assignRoleName(this.dataSource);
+            this.ipagination.total = res.result.total;
+          }
+        })
+      },
+      queryUserRoleMap() {
+        queryUserRoleMap().then((res) => {
+          if (res.success) {
+            this.userRolesMap = res.result;
+            this.loadData();
+          }
+        })
+      },
+      // 触发屏幕自适应
+      resetScreenSize() {
+        let screenWidth = document.body.clientWidth;
+        if (screenWidth < 500) {
+          this.scrollTrigger = {x: 800};
+        } else {
+          this.scrollTrigger = {};
+        }
+      },
+      showModal() {
+        this.visible = true;
+        this.assignRoleName(this.dataSource);
+        this.queryDepartTree();
+        this.form.resetFields();
+      },
+      getQueryParams() {
+        let param = Object.assign({}, this.queryParam, this.isorter);
+        param.field = this.getQueryField();
+        param.pageNo = this.ipagination.current;
+        param.pageSize = this.ipagination.pageSize;
+        return filterObj(param);
+      },
+      getQueryField() {
+        let str = 'id,';
+        for (let a = 0; a < this.columns.length; a++) {
+          str += ',' + this.columns[a].dataIndex;
+        }
+        return str;
+      },
+      searchReset(num) {
+        let that = this;
+        if (num !== 0) {
+          that.queryParam = {};
+          that.loadData(1);
+        }
+        that.selectedRowKeys = [];
+        that.userNameArr = [];
+        that.selectedKeys = [];
+      },
+      close() {
+        this.searchReset(0);
+        this.visible = false;
+      },
+      handleTableChange(pagination, filters, sorter) {
+        //TODO 筛选
+        if (Object.keys(sorter).length > 0) {
+          this.isorter.column = sorter.field;
+          this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc';
+        }
+        this.ipagination = pagination;
+        this.loadData();
+      },
+      handleSubmit() {
+        let that = this;
+        for (let i = 0, len = this.selectedRowKeys.length; i < len; i++) {
+          this.getUserNames(this.selectedRowKeys[i]);
+        }
+        that.$emit('ok', that.userNameArr.join(','),that.selectedRowKeys.join(','));
+        that.close();
+      },
+      // 遍历匹配,获取用户真实姓名
+      getUserNames(rowId) {
+        let dataSource = this.dataSource;
+        for (let i = 0, len = dataSource.length; i < len; i++) {
+          if (rowId === dataSource[i].id) {
+            this.userNameArr.push(dataSource[i].realname);
+          }
+        }
+      },
+      // 点击树节点,筛选出对应的用户
+      onSelect(selectedKeys) {
+        if (selectedKeys[0] != null) {
+          this.queryUserByDepId(selectedKeys); // 调用方法根据选选择的id查询用户信息
+          if (this.selectedKeys[0] !== selectedKeys[0]) {
+            this.selectedKeys = [selectedKeys[0]];
+          }
+        }
+      },
+      onSelectChange(selectedRowKeys, selectionRows) {
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectionRows = selectionRows;
+      },
+      onSearch() {
+        this.loadData(1);
+      },
+      // 根据选择的id来查询用户信息
+      queryUserByDepId(selectedKeys) {
+        queryUserByDepId({id: selectedKeys.toString()}).then((res) => {
+          if (res.success) {
+            this.dataSource = res.result;
+            this.ipagination.total = res.result.length;
+            this.assignRoleName(this.dataSource);
+          }
+        })
+      },
+      // 传入用户id,找到匹配的角色名称
+      queryUserRole(userId) {
+        let map = this.userRolesMap;
+        let roleName = [];
+        for (var key in map) {
+          if (userId === key) {
+            roleName.push(map[key]);
+          }
+        }
+        return roleName.join(',');
+      },
+      queryDepartTree() {
+        queryDepartTreeList().then((res) => {
+          if (res.success) {
+            this.departTree = res.result;
+          }
+        })
+      },
+      // 为角色名称赋值
+      assignRoleName(data) {
+        let userId = '';
+        let role = '';
+        for (let i = 0, length = data.length; i < length; i++) {
+          userId = this.dataSource[i].id;
+          role = this.queryUserRole(userId);
+          this.dataSource[i].roleName = role;
+        }
+      },
+      modalFormOk() {
+        this.loadData();
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  .ant-table-tbody .ant-table-row td {
+    padding-top: 10px;
+    padding-bottom: 10px;
+  }
+
+  #components-layout-demo-custom-trigger .trigger {
+    font-size: 18px;
+    line-height: 64px;
+    padding: 0 24px;
+    cursor: pointer;
+    transition: color .3s;
+  }
 </style>
 </style>

+ 164 - 0
src/views/modules/advertiser/ProjectList.vue

@@ -0,0 +1,164 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+
+          <a-col :md="6" :sm="8">
+            <a-form-item label="项目名称">
+              <a-input placeholder="请输入项目名称" v-model="queryParam.projectName"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="广告主id">
+              <a-input placeholder="请输入广告主id" v-model="queryParam.advertiserId"></a-input>
+            </a-form-item>
+          </a-col>
+        <template>
+        <a-col :md="6" :sm="8">
+            <a-form-item label="负责人">
+              <a-input placeholder="请输入负责人" v-model="queryParam.responsible"></a-input>
+            </a-form-item>
+          </a-col>
+          </template>
+          <a-col :md="6" :sm="8" >
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <!-- <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a> -->
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <project-modal ref="modalForm" @ok="modalFormOk"></project-modal>
+  </a-card>
+</template>
+
+<script>
+  import ProjectModal from './modules/ProjectModal'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: "ProjectList",
+    mixins:[JeecgListMixin],
+    components: {
+      ProjectModal
+    },
+    data () {
+      return {
+        description: '项目管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+           },
+		   {
+            title: '项目名称',
+            align:"center",
+            dataIndex: 'projectName'
+           },
+		   {
+            title: '广告主名称',
+            align:"center",
+            dataIndex: 'advertiserName'
+           },
+		   {
+            title: '负责人',
+            align:"center",
+            dataIndex: 'responsibleName'
+           },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+		url: {
+          list: "/ctop/project/list",
+          delete: "/ctop/project/delete",
+          deleteBatch: "/ctop/project/deleteBatch",
+          exportXlsUrl: "ctop/project/exportXls",
+          importExcelUrl: "ctop/project/importExcel",
+       },
+    }
+  },
+  computed: {
+    importExcelUrl: function(){
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    }
+  },
+    methods: {
+     
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>

+ 204 - 0
src/views/modules/advertiser/ProjectMemberList.vue

@@ -0,0 +1,204 @@
+<template>
+  <a-card
+    :bordered="false"
+    :tabList="tabListNoTitle"
+    :activeTabKey="noTitleKey"
+    @tabChange="key => onTabChange(key, 'noTitleKey')"
+  >
+    <!-- 查询区域 -->
+    {{noTitleKey}}
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+          <a-col :md="6" :sm="8">
+            <a-form-item label="项目id">
+              <a-input placeholder="请输入项目id" v-model="queryParam.projectId"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="成员id">
+              <a-input placeholder="请输入成员id" v-model="queryParam.userId"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button
+                type="primary"
+                @click="searchReset"
+                icon="reload"
+                style="margin-left: 8px"
+              >重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
+              </a>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('项目成员')">导出</a-button>
+      <a-upload
+        name="file"
+        :showUploadList="false"
+        :multiple="false"
+        :headers="tokenHeader"
+        :action="importExcelUrl"
+        @change="handleImportExcel"
+      >
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel">
+            <a-icon type="delete" />删除
+          </a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px">
+          批量操作
+          <a-icon type="down" />
+        </a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
+        <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange"
+      >
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">
+              更多
+              <a-icon type="down" />
+            </a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <projectMember-modal ref="modalForm" @ok="modalFormOk"></projectMember-modal>
+  </a-card>
+</template>
+
+<script>
+import ProjectMemberModal from './modules/ProjectMemberModal'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { httpAction, getAction } from '@/api/manage'
+
+import { mapGetters } from 'vuex'
+
+export default {
+  name: 'ProjectMemberList',
+  mixins: [JeecgListMixin],
+  components: {
+    ProjectMemberModal
+  },
+  data() {
+    return {
+      description: '我的项目',
+      // 表头
+      tabListNoTitle: [
+        {
+          key: 'myProject',
+          tab: '我管理的'
+        },
+        {
+          key: 'participation',
+          tab: '我参与的'
+        }
+      ],
+      noTitleKey: 'participation',
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          }
+        },
+        {
+          title: '项目id',
+          align: 'center',
+          dataIndex: 'projectId'
+        },
+        {
+          title: '成员id',
+          align: 'center',
+          dataIndex: 'userId'
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/ctop/projectMember/list',
+        delete: '/ctop/projectMember/delete',
+        deleteBatch: '/ctop/projectMember/deleteBatch',
+        exportXlsUrl: 'ctop/projectMember/exportXls',
+        importExcelUrl: 'ctop/projectMember/importExcel'
+      }
+    }
+  },
+  computed: {
+    importExcelUrl: function() {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+    }
+  },
+  methods: {
+    ...mapGetters(['nickname', 'avatar', 'userInfo']),
+    onTabChange(key, type) {
+      console.log(key, type)
+      this[type] = key
+    },
+    
+  },
+  mounted() {
+    //我管理的
+    getAction('/ctop/project/responsibleList', { userId: this.userInfo().id }).then(res => {
+      console.log(res)
+    })
+  }
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>

+ 163 - 162
src/views/modules/advertiser/modules/AdvertiserModal.vue

@@ -1,163 +1,164 @@
-<template>
-  <a-modal
-    :title="title"
-    :width="800"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    @ok="handleOk"
-    @cancel="handleCancel"
-    cancelText="关闭">
-
-    <a-spin :spinning="confirmLoading">
-      <a-form :form="form">
-
-        <a-form-item
-          :labelCol="labelCol"
-          :wrapperCol="wrapperCol"
-          label="广告主名称">
-          <a-input placeholder="请输入广告主名称" v-decorator="['name', validatorRules.name ]"/>
-        </a-form-item>
-        <a-form-item
-          :labelCol="labelCol"
-          :wrapperCol="wrapperCol"
-          label="行业">
-          <j-tree-select
-            ref="treeSelect"
-            placeholder="请选择行业"
-            v-decorator="['industryId', validatorRules.pid]"
-            dict="sys_category,name,id"
-            pidField="pid"
-            pidValue="f5cb2d2d28417b3b65a6dd744bcb9a76">
-          </j-tree-select>
-        </a-form-item>
-        <a-form-item
-          :labelCol="labelCol"
-          :wrapperCol="wrapperCol"
-          label="联系人姓名">
-          <a-input placeholder="请输入联系人姓名" v-decorator="['contact', validatorRules.contact ]"/>
-        </a-form-item>
-        <a-form-item
-          :labelCol="labelCol"
-          :wrapperCol="wrapperCol"
-          label="联系人手机">
-          <a-input placeholder="请输入联系人手机" v-decorator="['mobile', validatorRules.mobile ]"/>
-        </a-form-item>
-        <a-form-item
-          :labelCol="labelCol"
-          :wrapperCol="wrapperCol"
-          label="联系人邮箱">
-          <a-input placeholder="请输入联系人邮箱" v-decorator="['email', validatorRules.email ]"/>
-        </a-form-item>
-
-      </a-form>
-    </a-spin>
-  </a-modal>
-</template>
-
-<script>
-  import {httpAction} from '@/api/manage'
-  import pick from 'lodash.pick'
-  import JTreeSelect from '@/components/jeecg/JTreeSelect'
-  import moment from "moment"
-
-  export default {
-    name: "AdvertiserModal",
-    components: {
-      JTreeSelect
-    },
-    data() {
-      return {
-        title: "操作",
-        visible: false,
-        model: {},
-        labelCol: {
-          xs: {span: 24},
-          sm: {span: 5},
-        },
-        wrapperCol: {
-          xs: {span: 24},
-          sm: {span: 16},
-        },
-
-        confirmLoading: false,
-        form: this.$form.createForm(this),
-        validatorRules: {
-          name: {rules: [{required: true, message: '请输入广告主名称!'}]},
-          industryId: {rules: [{required: true, message: '请输入行业ID!'}]},
-          contact: {rules: [{required: true, message: '请输入联系人姓名!'}]},
-          mobile: {rules: [{required: true, message: '请输入联系人手机!'}]},
-          email: {rules: [{required: true, message: '请输入联系人邮箱!'}]},
-        },
-        url: {
-          add: "/ctop/advertiser/add",
-          edit: "/ctop/advertiser/edit",
-        },
-      }
-    },
-    created() {
-    },
-    methods: {
-      add() {
-        this.edit({});
-      },
-      edit(record) {
-        this.form.resetFields();
-        this.model = Object.assign({}, record);
-        this.visible = true;
-        this.$nextTick(() => {
-          this.form.setFieldsValue(pick(this.model, 'name', 'industryId', 'contact', 'mobile', 'email'))
-          //时间格式化
-        });
-
-      },
-      close() {
-        this.$emit('close');
-        this.visible = false;
-      },
-      handleOk() {
-        const that = this;
-        // 触发表单验证
-        this.form.validateFields((err, values) => {
-          if (!err) {
-            that.confirmLoading = true;
-            let httpurl = '';
-            let method = '';
-            if (!this.model.id) {
-              httpurl += this.url.add;
-              method = 'post';
-            } else {
-              httpurl += this.url.edit;
-              method = 'put';
-            }
-            let formData = Object.assign(this.model, values);
-            //时间格式化
-
-            console.log(formData)
-            httpAction(httpurl, formData, method).then((res) => {
-              if (res.success) {
-                that.$message.success(res.message);
-                that.$emit('ok');
-              } else {
-                that.$message.warning(res.message);
-              }
-            }).finally(() => {
-              that.confirmLoading = false;
-              that.close();
-            })
-
-
-          }
-        })
-      },
-      handleCancel() {
-        this.close()
-      },
-
-
-    }
-  }
-</script>
-
-<style lang="less" scoped>
-
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="广告主名称">
+          <a-input placeholder="请输入广告主名称" v-decorator="['name', validatorRules.name ]"/>
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="行业">
+          <j-tree-select
+            ref="treeSelect"
+            placeholder="请选择行业"
+            v-decorator="['industryId', validatorRules.pid]"
+            dict="sys_category,name,id"
+            pidField="pid"
+            pidValue="f5cb2d2d28417b3b65a6dd744bcb9a76">
+          </j-tree-select>
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="联系人姓名">
+          <a-input placeholder="请输入联系人姓名" v-decorator="['contact', validatorRules.contact ]"/>
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="联系人手机">
+          <a-input placeholder="请输入联系人手机" v-decorator="['mobile', validatorRules.mobile ]"/>
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="联系人邮箱">
+          <a-input placeholder="请输入联系人邮箱" v-decorator="['email', validatorRules.email ]"/>
+        </a-form-item>
+
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import {httpAction} from '@/api/manage'
+  import pick from 'lodash.pick'
+  import JTreeSelect from '@/components/jeecg/JTreeSelect'
+  import moment from "moment"
+  import { mapGetters } from 'vuex'
+  export default {
+    name: "AdvertiserModal",
+    components: {
+      JTreeSelect
+    },
+    data() {
+      return {
+        title: "操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: {span: 24},
+          sm: {span: 5},
+        },
+        wrapperCol: {
+          xs: {span: 24},
+          sm: {span: 16},
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules: {
+          name: {rules: [{required: true, message: '请输入广告主名称!'}]},
+          industryId: {rules: [{required: true, message: '请输入行业ID!'}]},
+          contact: {rules: [{required: true, message: '请输入联系人姓名!'}]},
+          mobile: {rules: [{required: true, message: '请输入联系人手机!'}]},
+          email: {rules: [{required: true, message: '请输入联系人邮箱!'}]},
+        },
+        url: {
+          add: "/ctop/advertiser/add",
+          edit: "/ctop/advertiser/edit",
+        },
+      }
+    },
+    created() {
+    },
+    methods: {
+      ...mapGetters(['nickname', 'avatar', 'userInfo']),
+      add() {
+        this.edit({});
+      },
+      edit(record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model, 'name', 'industryId', 'contact', 'mobile', 'email'))
+          //时间格式化
+        });
+
+      },
+      close() {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk() {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if (!this.model.id) {
+              httpurl += this.url.add;
+              method = 'post';
+            } else {
+              httpurl += this.url.edit;
+              method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            formData.userId= this.userInfo().id
+            console.log(formData)
+            httpAction(httpurl, formData, method).then((res) => {
+              if (res.success) {
+                that.$message.success(res.message);
+                that.$emit('ok');
+              } else {
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+          }
+        })
+      },
+      handleCancel() {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+
 </style>
 </style>

+ 130 - 0
src/views/modules/advertiser/modules/ProjectMemberModal.vue

@@ -0,0 +1,130 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目id">
+          <a-input placeholder="请输入项目id" v-decorator="['projectId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="成员id">
+          <a-input placeholder="请输入成员id" v-decorator="['userId', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "ProjectMemberModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/ctop/projectMember/add",
+          edit: "/ctop/projectMember/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'projectId','userId'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+
+</style>

+ 191 - 0
src/views/modules/advertiser/modules/ProjectModal.vue

@@ -0,0 +1,191 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭"
+  >
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="媒体类型">
+          <a-radio-group @change="onChange" v-model="model.mediaId">
+            <a-radio-button value="1">头条</a-radio-button>
+            <a-radio-button value="2">快手</a-radio-button>
+          </a-radio-group>
+        </a-form-item>
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="项目名称">
+          <a-input
+            placeholder="请输入项目名称"
+            v-decorator="['projectName',  validatorRules.projectName]"
+          />
+        </a-form-item>
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="广告主名称">
+          <a-select
+            @change="handleChange"
+            labelInValue
+            v-decorator="['advertiserId',  validatorRules.advertiserId]"
+          >
+            <a-select-option
+              :value="item.id"
+              v-for="(item,index) of list"
+              :key="index"
+            >{{item.name}}</a-select-option>
+          </a-select>
+        </a-form-item>
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="负责人">
+          <j-select-user-by-dep
+            v-decorator="['responsibleName',  validatorRules.responsibleName]"
+            @change="get"
+          ></j-select-user-by-dep>
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+import { httpAction, getAction } from '@/api/manage'
+import pick from 'lodash.pick'
+import moment from 'moment'
+import JSelectDepart from '@/components/jeecgbiz/JSelectDepart'
+import JSelectUserByDep from '@/components/jeecgbiz/JSelectUserByDep'
+
+import { mapGetters } from 'vuex'
+export default {
+  name: 'ProjectModal',
+  components: {
+    JSelectUserByDep,
+    JSelectDepart
+  },
+  data() {
+    return {
+      title: '操作',
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      },
+
+      confirmLoading: false,
+      form: this.$form.createForm(this),
+      validatorRules: {
+        projectName: { rules: [{ required: true, message: '请输入项目名称!' }] },
+        advertiserId: { rules: [{ required: true, message: '请选择广告主!' }] },
+        responsibleName: { rules: [{ required: true, message: '请选择负责人!' }] }
+      },
+      url: {
+        add: '/ctop/project/add',
+        edit: '/ctop/project/edit',
+        getList: '/ctop/advertiser/list'
+      },
+      list: [],
+      resId: ''
+    }
+  },
+  created() {},
+  methods: {
+    ...mapGetters(['nickname', 'avatar', 'userInfo']),
+    onChange(e) {
+      console.log(`checked = ${e.target.value}`)
+    },
+    handleChange() {},
+    getList() {
+      var params = {}
+      params.userId = this.userInfo().id
+      console.log(params)
+      getAction(this.url.getList, { userId: this.userInfo().id })
+        .then(res => {
+          if (res.success) {
+            this.list = res.result.records
+          } else {
+            this.$message.warning(res.message)
+          }
+        })
+        .finally(() => {})
+    },
+    add() {
+      this.edit({
+        responsibleName: this.userInfo().realname, //用户名称
+        responsibleId: this.userInfo().id, //用户Id
+        mediaId: '2'
+      })
+    },
+    edit(record) {
+      this.getList()
+      var params = { ...record }
+      if (params.advertiserId) {
+        params.advertiserId = { key: params.advertiserId, label: params.advertiserName }
+      }
+      this.form.resetFields()
+      this.model = Object.assign({}, params)
+      this.visible = true
+      this.$nextTick(() => {
+        this.form.setFieldsValue(pick(this.model, 'projectName', 'advertiserId', 'responsibleName'))
+        //时间格式化
+      })
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+    },
+    handleOk() {
+      const that = this
+      // 触发表单验证
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true
+          let httpurl = ''
+          let method = ''
+          if (!this.model.id) {
+            httpurl += this.url.add
+            method = 'post'
+          } else {
+            httpurl += this.url.edit
+            method = 'put'
+          }
+          var data = values.advertiserId
+          let formData = Object.assign(this.model, values)
+          //时间格式化
+          formData.advertiserId = data.key
+          formData.advertiserName = data.label
+          formData.responsibleId = that.resId
+          httpAction(httpurl, formData, method)
+            .then(res => {
+              if (res.success) {
+                that.$message.success(res.message)
+                that.$emit('ok')
+              } else {
+                that.$message.warning(res.message)
+              }
+            })
+            .finally(() => {
+              that.confirmLoading = false
+              that.close()
+            })
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    },
+    getFormFieldValue(field) {
+      return this.form.getFieldValue(field)
+    },
+    get(valueName, key) {
+      console.log(valueName, key)
+      this.resId = key
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+</style>

+ 20 - 12
src/views/modules/material/materialList.vue

@@ -36,7 +36,7 @@ li {
   <a-card :bordered="false">
   <a-card :bordered="false">
     <!-- 查询区域 -->
     <!-- 查询区域 -->
     <div class="table-page-search-wrapper">
     <div class="table-page-search-wrapper">
-      <a-form layout="inline">
+      <!-- <a-form layout="inline">
         <a-row :gutter="24">
         <a-row :gutter="24">
           <a-col :md="6" :sm="8">
           <a-col :md="6" :sm="8">
             <a-form-item label="素材名称">
             <a-form-item label="素材名称">
@@ -56,7 +56,7 @@ li {
             </span>
             </span>
           </a-col>
           </a-col>
         </a-row>
         </a-row>
-      </a-form>
+      </a-form>-->
     </div>
     </div>
 
 
     <!-- 操作按钮区域 -->
     <!-- 操作按钮区域 -->
@@ -81,7 +81,8 @@ li {
           <j-ellipsis :value="text" :length="10" />
           <j-ellipsis :value="text" :length="10" />
         </span>
         </span>
         <span slot="url" slot-scope="url,record">
         <span slot="url" slot-scope="url,record">
-          <img :src="url" alt  style="height:150px"/>
+          <img :src="url" alt style="width:150px" v-if="img(url)" />
+          <video :src="url" controls="controls" v-else style="width:150px">您的浏览器不支持 video 标签。</video>
         </span>
         </span>
         <span slot="action">
         <span slot="action">
           <!-- <a href="javascript:;" @click="handleDetail(record)">详情</a>
           <!-- <a href="javascript:;" @click="handleDetail(record)">详情</a>
@@ -235,7 +236,8 @@ export default {
           title: '素材展示',
           title: '素材展示',
           align: 'center',
           align: 'center',
           dataIndex: 'url',
           dataIndex: 'url',
-          scopedSlots: { customRender: 'url' }
+          scopedSlots: { customRender: 'url' },
+          width: 300
         },
         },
         // {
         // {
         //   title: '素材上传人',
         //   title: '素材上传人',
@@ -251,18 +253,18 @@ export default {
           title: '创建时间',
           title: '创建时间',
           align: 'center',
           align: 'center',
           dataIndex: 'createTime'
           dataIndex: 'createTime'
-        },
+        }
         // {
         // {
         //   title: '投放',
         //   title: '投放',
         //   align: 'center',
         //   align: 'center',
         //   dataIndex: ''
         //   dataIndex: ''
         // },
         // },
-        {
-          title: '操作',
-          dataIndex: 'action',
-          align: 'center',
-          scopedSlots: { customRender: 'action' }
-        }
+        // {
+        //   title: '操作',
+        //   dataIndex: 'action',
+        //   align: 'center',
+        //   scopedSlots: { customRender: 'action' }
+        // }
       ],
       ],
       url: {
       url: {
         list: '/ctop/materialInfo/list'
         list: '/ctop/materialInfo/list'
@@ -290,8 +292,14 @@ export default {
       confirmLoading: true
       confirmLoading: true
     }
     }
   },
   },
-
   methods: {
   methods: {
+    img(item) {
+      if (item.substring(item.length - 3) == 'mp4') {
+        return false
+      } else {
+        return true
+      }
+    },
     showDetail(item) {
     showDetail(item) {
       console.log(item)
       console.log(item)
       this.detail = true
       this.detail = true

+ 0 - 1
src/views/modules/test/Test.vue

@@ -61,7 +61,6 @@ export default {
       var that = this
       var that = this
       return new Promise(function(resolve, reject) {
       return new Promise(function(resolve, reject) {
         bmf.md5(file[0], (err, md5) => {
         bmf.md5(file[0], (err, md5) => {
-          console.log(md5, 123123123)
           that.md5 = md5
           that.md5 = md5
           fileCheck({ code: md5 }).then(res => {
           fileCheck({ code: md5 }).then(res => {
             console.log(res)
             console.log(res)

+ 12 - 12
src/views/system/modules/DepartWindow.vue

@@ -14,13 +14,11 @@
       <a-form :form="form">
       <a-form :form="form">
         <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="上级部门">
         <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="上级部门">
           <a-tree
           <a-tree
-            multiple
             treeCheckable="tree"
             treeCheckable="tree"
-            checkable
-            :checkedKeys="checkedKeys"
+            :selectedKeys.sync="checkedKeys"
             allowClear="true"
             allowClear="true"
             :checkStrictly="true"
             :checkStrictly="true"
-            @check="onCheck"
+            @select="onCheck"
             :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
             :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
             :treeData="departTree"
             :treeData="departTree"
             placeholder="请选择上级部门"
             placeholder="请选择上级部门"
@@ -135,22 +133,24 @@
       // 选择部门时作用的API
       // 选择部门时作用的API
       onCheck(checkedKeys, info) {
       onCheck(checkedKeys, info) {
         this.departList = [];
         this.departList = [];
-        this.checkedKeys = checkedKeys.checked;
-        let checkedNodes = info.checkedNodes;
-        for (let i = 0; i < checkedNodes.length; i++) {
-          let de = checkedNodes[i].data.props;
+        this.checkedKeys = checkedKeys;
+        let checkedNodes = info.selectedNodes[0].data.props;
+        console.log(checkedKeys,info)
+        // for (let i = 0; i < checkedNodes.length; i++) {
+        //   let de = checkedNodes[i].data.props;
           let depart = {key: "", value: "", title: ""};
           let depart = {key: "", value: "", title: ""};
-          depart.key = de.value;
-          depart.value = de.value;
-          depart.title = de.title;
+          depart.key = checkedNodes.value;
+          depart.value = checkedNodes.value;
+          depart.title = checkedNodes.title;
           this.departList.push(depart);
           this.departList.push(depart);
-        }
+        // }
         console.log('onCheck', checkedKeys, info);
         console.log('onCheck', checkedKeys, info);
       },
       },
       queryDepartTree() {
       queryDepartTree() {
         queryIdTree().then((res) => {
         queryIdTree().then((res) => {
           if (res.success) {
           if (res.success) {
             this.departTree = res.result;
             this.departTree = res.result;
+            console.log(res.result)
           }
           }
         })
         })
       },
       },

+ 7 - 5
src/views/system/modules/UserModal.vue

@@ -42,7 +42,6 @@
         </a-form-item>
         </a-form-item>
         <a-form-item label="角色分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!roleDisabled">
         <a-form-item label="角色分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!roleDisabled">
           <a-select
           <a-select
-            mode="multiple"
             style="width: 100%"
             style="width: 100%"
             placeholder="请选择用户角色"
             placeholder="请选择用户角色"
             v-model="selectedRole">
             v-model="selectedRole">
@@ -192,7 +191,7 @@
         visible: false,
         visible: false,
         model: {},
         model: {},
         roleList: [],
         roleList: [],
-        selectedRole: [],
+        selectedRole: "",
         labelCol: {
         labelCol: {
           xs: {span: 24},
           xs: {span: 24},
           sm: {span: 5},
           sm: {span: 5},
@@ -250,7 +249,8 @@
       loadUserRoles(userid) {
       loadUserRoles(userid) {
         queryUserRole({userid: userid}).then((res) => {
         queryUserRole({userid: userid}).then((res) => {
           if (res.success) {
           if (res.success) {
-            this.selectedRole = res.result;
+              console.log( res.result)
+            this.selectedRole = res.result[0];
           } else {
           } else {
             console.log(res.message);
             console.log(res.message);
           }
           }
@@ -312,7 +312,7 @@
         this.$emit('close');
         this.$emit('close');
         this.visible = false;
         this.visible = false;
         this.disableSubmit = false;
         this.disableSubmit = false;
-        this.selectedRole = [];
+        this.selectedRole = "";
         this.userDepartModel = {userId: '', departIdList: []};
         this.userDepartModel = {userId: '', departIdList: []};
         this.checkedDepartNames = [];
         this.checkedDepartNames = [];
         this.checkedDepartNameString = '';
         this.checkedDepartNameString = '';
@@ -334,7 +334,7 @@
             }
             }
             let formData = Object.assign(this.model, values);
             let formData = Object.assign(this.model, values);
             formData.avatar = avatar;
             formData.avatar = avatar;
-            formData.selectedroles = this.selectedRole.length > 0 ? this.selectedRole.join(",") : '';
+            formData.selectedroles = this.selectedRole ? this.selectedRole : '';
             formData.selecteddeparts = this.userDepartModel.departIdList.length > 0 ? this.userDepartModel.departIdList.join(",") : '';
             formData.selecteddeparts = this.userDepartModel.departIdList.length > 0 ? this.userDepartModel.departIdList.join(",") : '';
             // that.addDepartsToUser(that,formData); // 调用根据当前用户添加部门信息的方法
             // that.addDepartsToUser(that,formData); // 调用根据当前用户添加部门信息的方法
             let obj;
             let obj;
@@ -348,6 +348,7 @@
               if (res.success) {
               if (res.success) {
                 that.$message.success(res.message);
                 that.$message.success(res.message);
                 that.$emit('ok');
                 that.$emit('ok');
+                that.close();
               } else {
               } else {
                 that.$message.warning(res.message);
                 that.$message.warning(res.message);
               }
               }
@@ -493,6 +494,7 @@
 
 
       // 获取用户对应部门弹出框提交给返回的数据
       // 获取用户对应部门弹出框提交给返回的数据
       modalFormOk(formData) {
       modalFormOk(formData) {
+          console.log(formData)
         this.checkedDepartNames = [];
         this.checkedDepartNames = [];
         this.selectedDepartKeys = [];
         this.selectedDepartKeys = [];
         this.checkedDepartNameString = '';
         this.checkedDepartNameString = '';

+ 2 - 2
vue.config.js

@@ -64,9 +64,9 @@ module.exports = {
          }
          }
        },*/
        },*/
       '/jeecg-boot': {
       '/jeecg-boot': {
-        target: 'http://39.97.120.42:8080', //请求本地 需要jeecg-boot后台项目  生产环境
+        // target: 'http://39.97.120.42:8080', //请求本地 需要jeecg-boot后台项目  生产环境
         // target: 'http://39.106.184.70:8080', //请求本地 需要jeecg-boot后台项目
         // target: 'http://39.106.184.70:8080', //请求本地 需要jeecg-boot后台项目
-        // target: 'http://192.168.2.130:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
+        target: 'http://192.168.2.130:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
         // target: 'http://192.168.2.132:8080', //请求本地 需要jeecg-boot后台项目
         // target: 'http://192.168.2.132:8080', //请求本地 需要jeecg-boot后台项目
         ws: false,
         ws: false,
         changeOrigin: true
         changeOrigin: true