Просмотр исходного кода

添加按周查询,添加mixins

尹帮元 2 лет назад
Родитель
Сommit
32d5187239

+ 4 - 2
src/directive/permission/hasPermi.js

@@ -2,11 +2,12 @@
  * v-hasPermi 操作权限处理
  * Copyright (c) 2019 ruoyi
  */
- 
+
 import store from '@/store'
 
 export default {
   inserted(el, binding, vnode) {
+    //console.log(el, binding,'vnode')
     const { value } = binding
     const all_permission = "*:*:*";
     const permissions = store.getters && store.getters.permissions
@@ -19,7 +20,8 @@ export default {
       })
 
       if (!hasPermissions) {
-        el.parentNode && el.parentNode.removeChild(el)
+        el.parentNode && el.parentNode.removeChild(el);
+        //console.log(el,'el.parentNode')
       }
     } else {
       throw new Error(`请设置操作权限标签值`)

+ 1 - 1
src/layout/components/Navbar.vue

@@ -27,7 +27,7 @@
           <router-link to="/user/profile">
             <el-dropdown-item>个人中心</el-dropdown-item>
           </router-link>
-          <el-dropdown-item v-if="showSetting" @click.native="setting = true">
+          <el-dropdown-item  v-if="showSetting" @click.native="setting = true">
             <span>布局设置</span>
           </el-dropdown-item>
           <el-dropdown-item divided @click.native="logout">

+ 6 - 0
src/main.js

@@ -35,11 +35,17 @@ import DictData from '@/components/DictData'
 
 // 全局方法挂载
 Vue.prototype.getDicts = getDicts
+//根据参数键名查询参数值
 Vue.prototype.getConfigKey = getConfigKey
+//格式化时间
 Vue.prototype.parseTime = parseTime
+//重置表单
 Vue.prototype.resetForm = resetForm
+//添加日期范围
 Vue.prototype.addDateRange = addDateRange
+//回显数据字典
 Vue.prototype.selectDictLabel = selectDictLabel
+// 回显数据字典(字符串、数组)
 Vue.prototype.selectDictLabels = selectDictLabels
 Vue.prototype.download = download
 Vue.prototype.handleTree = handleTree

+ 29 - 0
src/mixins/tableList.js

@@ -0,0 +1,29 @@
+export default {
+  data (){
+    return {
+      //分页参数,最终合并提交
+      pages:{
+        page: 1,
+        size: 10,
+        total: 0,
+      },
+      // 遮罩层
+      loading: false,
+    }
+  },
+  methods:{
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.orgId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+      this.handleQuery();
+    },
+  }
+}

+ 4 - 4
src/permission.js

@@ -34,10 +34,10 @@ router.beforeEach((to, from, next) => {
           console.log(err,'err')
           sessionStorage.clear();
           next({ path: '/login' })
-          // store.dispatch('LogOut').then(() => {
-          //   Message.error(err)
-          //   next({ path: '/' })
-          // })
+          store.dispatch('LogOut').then(() => {
+            Message.error(err)
+            next({ path: '/' })
+          })
         })
       } else {
         next()

+ 2 - 2
src/views/system/user/index.vue

@@ -223,7 +223,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="14">
-            <el-form-item label="归属部门" prop="orgId">
+            <el-form-item label="所属机构" prop="orgId">
 <!--              <el-cascader-->
 <!--                v-model="form.orgId"-->
 <!--                :options="deptOptions"-->
@@ -247,7 +247,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="14">
-            <el-form-item label="角色">
+            <el-form-item label="用户角色">
               <el-select style="width: 100%;" v-model="form.roleIds" multiple placeholder="请选择角色">
                 <el-option
                   v-for="item in roleOptions"

+ 5 - 3
src/views/system/workTimeSet/index.vue

@@ -5,8 +5,8 @@
       <el-tab-pane label="作息配置" name="作息配置">
         <work-time></work-time>
       </el-tab-pane>
-      <el-tab-pane label="按周配置作息" name="按周配置作息">
-
+      <el-tab-pane v-hasPermi="['system:time:query']" label="按周配置作息" name="按周配置作息">
+        <work-time-week ></work-time-week>
       </el-tab-pane>
       <el-tab-pane label="指定日期配置" name="指定日期配置">
 
@@ -18,9 +18,11 @@
 
 <script>
 import WorkTime from './workTime'
+import WorkTimeWeek from './workTimeWeek'
 export default {
   components:{
-    WorkTime
+    WorkTime,
+    WorkTimeWeek
   },
   data() {
     return {

+ 14 - 155
src/views/system/workTimeSet/workTime.vue

@@ -117,10 +117,10 @@
         </el-table>
 
         <pagination
-          v-show="total>0"
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
+          v-show="pages.total>0"
+          :total="pages.total"
+          :page.sync="pages.page"
+          :limit.sync="pages.size"
           @pagination="getList"
         />
       </el-col>
@@ -133,6 +133,7 @@
 </template>
 
 <script>
+import tableList  from '@/mixins/tableList'
 import DialogEdit from './dialog.edit'
 import {json} from'./json'
 /** 引入节点树接口*/
@@ -141,44 +142,37 @@ import { deptTreeSelect } from "@/api/system/user";
 export default {
   /**  得先引入字典才能使用 */
   dicts: ['sys_business_type'],
+  /** 引入基础minxins*/
+  mixins:[tableList],
   components: {DialogEdit},
   data() {
+    //初始化查询日期
     let timea = new Date();
     timea.setHours(0, 0, 0, 0);
     let timeb = new Date(timea.getTime() - 3600 * 1000 * 24 * 30);
     timeb.setHours(0, 0, 0, 0);
     return {
-      //显示编辑弹窗
-      showEditDialog:false,
       //选中的行
       selectRow:null,
-      // 遮罩层
-      loading: false,
       // 显示搜索条件
       showSearch: true,
-      // 总条数
-      total: 0,
       // 用户表格数据
       tableList: null,
       // 部门树选项
       deptOptions: undefined,
       // 是否显示弹出层
       open: false,
-      // 部门名称
+      // 通过机构名称查询tree
       deptName: undefined,
-      // 表单参数
-      form: {},
       //是否关联下级
       checked: false,
+      //自定义机构树数据
       defaultProps: {
         children: "children",
         label: "name"
       },
-
       // 查询参数
       queryParams: {
-        page: 1,
-        size: 10,
         checkSub: false,
         orgId: null,
         orgType: null,
@@ -196,46 +190,11 @@ export default {
         { key: 7, label: `更新时间`, visible: true },
         { key: 8, label: `操作`, visible: true }
       ],
-      // 表单校验
-      rules: {
-        username: [
-          { required: true, message: "用户名称不能为空", trigger: "blur" },
-          { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
-        ],
-        name: [
-          { required: true, message: "用户昵称不能为空", trigger: "blur" }
-        ],
-        password: [
-          { required: true, message: "用户密码不能为空", trigger: "blur" },
-          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
-        ],
-        // email: [
-        //   {
-        //     type: "email",
-        //     message: "请输入正确的邮箱地址",
-        //     trigger: ["blur", "change"]
-        //   }
-        // ],
-        phone: [
-          {
-            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
-            message: "请输入正确的手机号码",
-            trigger: "blur"
-          }
-        ]
-      },
       //默认选中节点
       defaultKeys:[],
-      tartDatepickerOptions: {
-        disabledDate(time) {
-          const date = new Date();
-          date.setTime(date.getTime()- 3600 * 1000 * 24 );
-          return time.getTime() < date;
-        },
-      },
       pickerOptions:{
         start: "00:00",
-          end: "24:00",
+        end: "24:00",
         step: "00:10",
       },
     };
@@ -248,27 +207,13 @@ export default {
   },
   created() {
     this.getDeptTree();
-    this.getConfigKey("sys.user.initPassword").then(response => {
-      this.initPassword = response.msg;
-    });
   },
   methods: {
-    //自定义数据
-    tenantIdnormalizer(node, instanceId) {
-      if (node.children && !node.children.length) {
-        delete node.children
-      }
-      return {
-        id: node.id,
-        label: node.name,
-        children: node.children
-      }
-    },
     /** 下穿状态改变*/
     changeCheckBox(){
       this.getList();
     },
-    /** 查询用户列表 */
+    /** 查询列表 */
     getList(id) {
       //this.loading = true;
       console.log(this.queryParams,111);
@@ -285,7 +230,7 @@ export default {
       //   this.loading = false;
       // })
     },
-    /** 查询部门下拉树结构 */
+    /** 查询机构树 */
     getDeptTree() {
       deptTreeSelect().then(response => {
         this.deptOptions = response.data;
@@ -305,71 +250,6 @@ export default {
       this.queryParams.orgId = data.id;
       this.handleQuery();
     },
-    // 用户状态修改
-    handleStatusChange(row) {
-      let text = row.status === "1" ? "启用" : "停用";
-      this.$modal.confirm( '确认要' + text + '"' + row.name + '"用户吗?').then(function() {
-        const data = {
-          id:row.id,
-          isLock:row.isLock
-        }
-        return changeUserStatus(data);
-      }).then(() => {
-        this.$modal.msgSuccess(text + "成功");
-      }).catch(function() {
-        row.status = row.status === "0" ? "1" : "0";
-      });
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: undefined,
-        orgId: undefined,
-        username: undefined,
-        name: undefined,
-        password: undefined,
-        phone: undefined,
-        email: undefined,
-        sex: undefined,
-        status: "0",
-        remark: undefined,
-        postIds: [],
-        roleIds: []
-      };
-      this.resetForm("form");
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.queryParams.orgId = undefined;
-      this.$refs.tree.setCurrentKey(null);
-      this.handleQuery();
-    },
-    // 更多操作触发
-    handleCommand(command, row) {
-      switch (command) {
-        case "handleResetPwd":
-          this.handleResetPwd(row);
-          break;
-        case "handleAuthRole":
-          this.handleAuthRole(row);
-          break;
-        default:
-          break;
-      }
-    },
-
     /** 编辑按钮操作 */
     onEditTime(row) {
       this.selectRow = row;
@@ -379,23 +259,7 @@ export default {
 
     /** 提交按钮 */
     submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateUser(this.form).then(response => {
-              this.$modal.msgSuccess("修改成功");
-              this.open = false;
-              this.getList();
-            });
-          } else {
-            addUser(this.form).then(response => {
-              this.$modal.msgSuccess("新增成功");
-              this.open = false;
-              this.getList();
-            });
-          }
-        }
-      });
+
     },
     /** 导出按钮操作 */
     handleExport() {
@@ -403,11 +267,6 @@ export default {
         ...this.queryParams
       }, `user_${new Date().getTime()}.xlsx`)
     },
-    /** 下载模板操作 */
-    importTemplate() {
-      this.download('system/user/importTemplate', {
-      }, `user_template_${new Date().getTime()}.xlsx`)
-    },
   }
 };
 </script>

+ 270 - 0
src/views/system/workTimeSet/workTimeWeek.vue

@@ -0,0 +1,270 @@
+<template>
+  <div class="tabs-container">
+
+    <el-row :gutter="20">
+      <!--部门数据-->
+      <el-col :span="4" :xs="24">
+        <div class="head-container">
+          <el-input
+            v-model="deptName"
+            placeholder="请输入部门名称"
+            clearable
+            size="small"
+            prefix-icon="el-icon-search"
+            style="margin-bottom: 20px"
+          />
+        </div>
+        <div class="tree-container">
+          <div style="margin-bottom: 10px;">
+            <el-checkbox v-model="queryParams.checkSub" @change="changeCheckBox">是否关联下级机构</el-checkbox>
+          </div>
+          <el-tree
+            :data="deptOptions"
+            :props="defaultProps"
+            :expand-on-click-node="false"
+            :filter-node-method="filterNode"
+            ref="tree"
+            node-key="id"
+            :default-expanded-keys="defaultKeys"
+            :default-checked-keys="defaultKeys"
+            @node-click="handleNodeClick"
+          />
+        </div>
+      </el-col>
+      <!--用户数据-->
+      <el-col :span="20" :xs="24">
+
+        <!--    搜索条件    -->
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+          <el-form-item label="生效日期">
+            <el-date-picker
+              v-model="queryParams.range"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item label="仅显示当前生效" label-width="120px">
+            <el-switch
+              v-model="queryParams.value"
+              active-color="#13ce66"
+              inactive-color="#ff4949">
+            </el-switch>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+          </el-form-item>
+        </el-form>
+
+        <!--    按纽    -->
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button
+              type="primary"
+              plain
+              icon="el-icon-plus"
+              size="mini"
+              @click="addTemplate"
+              v-hasPermi="['system:user:add']"
+            >新增作息模板</el-button>
+          </el-col>
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+        </el-row>
+
+        <el-table v-loading="loading" style="width: auto;" size="nimi" border :data="tableList">
+          <el-table-column v-if="columns[0].visible" prop="orgName" label="机构"></el-table-column>
+          <el-table-column v-if="columns[1].visible" label="日期" >
+            <span slot-scope="scope">{{parseTime(scope.row.ymdDate,"YYYY-MM-DD")}}</span>
+          </el-table-column>
+          <el-table-column v-if="columns[2].visible" label="营业状态">
+            <template slot-scope="r">{{r.row.isEnable!=true?'歇业':'营业'}}</template>
+          </el-table-column>
+          <el-table-column v-if="columns[3].visible" label="上下班时间段">
+            <template slot-scope="r">
+              <span>{{r.row.workTime}}-{{r.row.workOffTime}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column v-if="columns[4].visible" label="营业时间段">
+            <template slot-scope="r">
+              <span>{{r.row.openTime}}-{{r.row.closeTime}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column v-if="columns[5].visible" label="午休时间段">
+            <template slot-scope="scope">
+              <span>{{scope.row.noonbreakStart}}-{{scope.row.noonbreakEnd}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column v-if="columns[6].visible" prop="modifiedName" label="更新人"></el-table-column>
+          <el-table-column v-if="columns[7].visible" label="更新时间" >
+            <span slot-scope="scope">{{parseTime(scope.row.updateTime, "YYYY-MM-DD HH:mm:ss")}}</span>
+          </el-table-column>
+          <el-table-column v-if="columns[8].visible" label="操作列表" width="100" >
+            <template slot-scope="r">
+              <el-button type="text"  v-hasPermi="['system:user:edit']" @click="onEditTime(r.row)">编辑</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <pagination
+          v-show="pages.total>0"
+          :total="pages.total"
+          :page.sync="pages.page"
+          :limit.sync="pages.size"
+          @pagination="getList"
+        />
+      </el-col>
+    </el-row>
+
+
+    <dialog-edit ref="modalEdit" ></dialog-edit>
+
+  </div>
+</template>
+
+<script>
+import tableList  from '@/mixins/tableList'
+import DialogEdit from './dialog.edit'
+import {json} from'./json'
+/** 引入节点树接口*/
+import { deptTreeSelect } from "@/api/system/user";
+
+export default {
+  /**  得先引入字典才能使用 */
+  dicts: ['sys_business_type'],
+  mixins:[tableList],
+  components: {DialogEdit},
+  data() {
+    //初始化查询日期
+    let timea = new Date();
+    timea.setHours(0, 0, 0, 0);
+    let timeb = new Date(timea.getTime() - 3600 * 1000 * 24 * 30);
+    timeb.setHours(0, 0, 0, 0);
+    return {
+      //选中的行
+      selectRow:null,
+      // 显示搜索条件
+      showSearch: true,
+      // 用户表格数据
+      tableList: null,
+      // 部门树选项
+      deptOptions: undefined,
+      // 是否显示弹出层
+      open: false,
+      // 通过机构名称查询tree
+      deptName: undefined,
+      //是否关联下级
+      checked: false,
+      //自定义机构树数据
+      defaultProps: {
+        children: "children",
+        label: "name"
+      },
+      // 查询参数
+      queryParams: {
+        checkSub: false,
+        orgId: null,
+        orgType: null,
+        range: [timeb, timea],
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `机构`, visible: true },
+        { key: 1, label: `日期`, visible: true },
+        { key: 2, label: `营业状态`, visible: true },
+        { key: 3, label: `上下班时间段`, visible: true },
+        { key: 4, label: `营业时间段`, visible: true },
+        { key: 5, label: `午休时间段`, visible: true },
+        { key: 6, label: `更新人`, visible: true },
+        { key: 7, label: `更新时间`, visible: true },
+        { key: 8, label: `操作`, visible: true }
+      ],
+      //默认选中节点
+      defaultKeys:[],
+      pickerOptions:{
+        start: "00:00",
+          end: "24:00",
+        step: "00:10",
+      },
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    addTemplate(){
+
+    },
+    /** 下穿状态改变*/
+    changeCheckBox(){
+      this.getList();
+    },
+    /** 查询列表 */
+    getList(id) {
+      //this.loading = true;
+      console.log(this.queryParams,111);
+      console.log(this.addDateRange(this.queryParams, this.dateRange),2222);
+      this.tableList = json.content;
+      //  tableList(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      //     //兼容框架userId字段
+      //     response.rows.forEach(v=>{v.userId = v.id});
+      //     this.userList = response.rows;
+      //     this.total = response.total;
+      //     this.loading = false;
+      //   }
+      // ).catch(err=>{
+      //   this.loading = false;
+      // })
+    },
+    /** 查询机构树 */
+    getDeptTree() {
+      deptTreeSelect().then(response => {
+        this.deptOptions = response.data;
+        console.log( this.deptOptions,' this.deptOptions')
+        this.defaultKeys.push(response.data[0].id);
+        this.queryParams.orgId = response.data[0].id;
+        this.handleQuery();
+      });
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.name.indexOf(value) !== -1;
+    },
+    // 节点单击事件
+    handleNodeClick(data) {
+      this.queryParams.orgId = data.id;
+      this.handleQuery();
+    },
+    /** 编辑按钮操作 */
+    onEditTime(row) {
+      this.selectRow = row;
+      this.$refs.modalEdit.edit(row);
+      console.log(this.$refs.modalEdit,'modalEdit');
+    },
+
+    /** 提交按钮 */
+    submitForm: function() {
+
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/time/export', {
+        ...this.queryParams
+      }, `user_${new Date().getTime()}.xlsx`)
+    },
+  }
+};
+</script>