叶松
2023-11-27 170800582ce66c770a56e69f6d8b44c38f0728bf
安全积分超市对接
已修改6个文件
518 ■■■■■ 文件已修改
web/src/api/modules/safety.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/SecureManage/NipCheck/NipTips.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/SecureManage/NipCheck/components/ScoreDetails.vue 251 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/SecureManage/NipCheck/components/ScoreMarket.vue 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xcx/robePages/safeManage/approveHidden.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xcx/robePages/safeManage/checkHidden.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/api/modules/safety.js
@@ -323,4 +323,43 @@
        responseType: 'blob',
        data: params
    }),
  /**
   * 安全积分超市模块
   */
  //查询安全积分超市列表
    searchMarketLists: (params) =>
    axios.post('/secure/integralAccount/selectPageList', params),
  //添加或修改安全积分超市
  addUpdateMarketInfo: (params) =>
    axios.post('/secure/integralAccount/insertAndUpdate', params),
  //删除安全积分超市
  deleteMarketInfo: (params) =>
    axios.get('/secure/integralAccount/delete',{params}),
  //安全积分超市导出
  exportMarketFiles:params=>
    axios({
        method: 'post',
        url: '/secure/integralAccount/exportList',
        responseType: 'blob',
        data: params
    }),
  /**
   * 积分明细模块
   */
  //查询积分明细列表
    searchIntegralLists: (params) =>
    axios.post('/secure/integralAccount/selectSafeIntegralPageList', params),
  //查询个人明细列表
  searchPersonLists: (params) =>
    axios.post('/secure/integralAccount/selectSafeIntegralInfo', params),
  //积分明细导出
  exportIntegralFiles:params=>
    axios({
        method: 'post',
        url: '/secure/integralAccount/exportSafeIntegralInfo',
        responseType: 'blob',
        data: params
    }),
}
web/src/views/SecureManage/NipCheck/NipTips.vue
@@ -135,6 +135,7 @@
        total: 0,
        disabled:false,
        loading: false,
        userId:null,//创建人
        dataList: [], //举报隐患信息列表
        positonOptions:[],//隐患地点
        imageList:[],
@@ -254,6 +255,7 @@
    },
      // 审核按钮
      checkHidden(row) {
        this.userId = row.createUser
        this.asyncTitle = true;
        this.imageList = []
        this.asyncVisible = true;
@@ -352,6 +354,7 @@
                arrTitle.push({imgPath:item.name})
            })
            params.imgEntities = arrTitle
            params.createUser = this.userId
            this.$api.Safety.checkHiddenInfo(params).then((res) => {
              if(res.statusMsg === 'ok') {
                this.asyncVisible = false;
web/src/views/SecureManage/NipCheck/components/ScoreDetails.vue
@@ -2,36 +2,36 @@
  <div class="main" style="height:89%">
    <div class="main_header">
        <div class="header_item">
        <span class="header_label">类型:</span>
        <el-select v-model="search.type" clearable placeholder="请选择类型">
          <el-option
            v-for="item in typeLists"
            :key="item.value"
            :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
      </div>
      <div class="header_item">
        <span class="header_label">时间范围:</span>
        <el-date-picker
            v-model="search.time"
            type="daterange"
            value-format="yyyy-MM-dd HH:mm:ss"
            :default-time="['00:00:00','23:59:59']"
            range-separator="-"
            start-placeholder="起始时间"
            end-placeholder="结束时间">
        </el-date-picker>
      </div>
            <span class="header_label">人员类型:</span>
            <el-select v-model="search.userType" clearable placeholder="请选择人员类型" @change="changeType">
                <el-option
                    v-for="item in optionsType"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value">
                </el-option>
            </el-select>
        </div>
        <div class="header_item">
            <span class="header_label">人员姓名:</span>
            <el-select v-model="search.userId" filterable clearable placeholder="请选择人员名称">
                <el-option
                    v-for="item in optionsUser"
                    :key="item.userId"
                    :label="item.realName"
                    :value="item.userId">
                </el-option>
            </el-select>
        </div>
        <div class="header_item">
            <span class="header_label">累计积分范围:</span>
            <el-input v-model="search.startIntegral" clearable placeholder="请输入"></el-input>
            <el-input v-model="search.endIntegra" style="margin-left:15px" clearable placeholder="请输入"></el-input>
        </div>
      <div class="header_item">
        <el-button icon="el-icon-search" v-if="showButton('search')" @click="searchButtonInfo(true)">查询</el-button>
        <el-button class="search_btn" icon="el-icon-plus" v-if="showButton('export')" @click="exportFiles">导出Excel</el-button>
        <!-- <el-button class="search_btn" icon="el-icon-plus" v-if="showButton('export')" @click="exportFiles">导出Excel</el-button> -->
      </div>
    </div>
    <div class="score_index">
        <div class="score_titles">积分:</div>
        <div class="score_datas"><span>65</span>分</div>
    </div>
    <div class="main_content">
      <el-table
@@ -44,10 +44,20 @@
          </template>
        </el-table-column>
        <el-table-column prop="createTime" label="时间" align="center" width="150"></el-table-column>
        <el-table-column prop="dangerLocation" label="积分分值" align="center" ></el-table-column>
        <el-table-column prop="dangerLocation" label="余额" align="center" ></el-table-column>
        <el-table-column prop="dangerLocation" label="类型" align="center" ></el-table-column>
        <el-table-column prop="title" label="说明" align="center" show-overflow-tooltip></el-table-column>
        <el-table-column prop="realName" label="人员姓名" align="center" ></el-table-column>
        <el-table-column prop="accumulateIntegral" label="累计积分" align="center" ></el-table-column>
        <el-table-column prop="totalIntegral" label="当前积分" align="center" ></el-table-column>
        <el-table-column prop="totalConsumption" label="总消耗" align="center" ></el-table-column>
        <el-table-column prop="userType" label="人员类型" align="center" >
            <template #default="{row}">
                <div>{{optionsType[row.userType-1]&&optionsType[row.userType - 1].label}}</div>
            </template>
        </el-table-column>
        <el-table-column label="操作" align="center">
          <template #default="{ row }">
            <el-button class="table_btn" size="mini" v-if="showButton('update')" @click="updateProp(row)">个人积分明细</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
    <div class="main_footer">
@@ -62,27 +72,120 @@
        :total="total">
      </el-pagination>
    </div>
    <!-- 个人积分超市明细 -->
    <el-dialog
      class="prop_dialog"
      title="个人积分明细"
      :close-on-click-modal="false"
      :visible.sync="asyncVisible"
      width="65%">
      <div>
        <div class="main_header">
        <div class="header_item">
            <span class="header_label">类型:</span>
            <el-select v-model="searchForm.type" clearable placeholder="请选择类型">
                <el-option
                    v-for="item in optionsFormType"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value">
                </el-option>
            </el-select>
        </div>
        <div class="header_item">
            <span class="header_label">时间范围:</span>
            <el-date-picker
                v-model="searchForm.time"
                type="daterange"
                value-format="yyyy-MM-dd HH:mm:ss"
                :default-time="['00:00:00','23:59:59']"
                range-separator="-"
                start-placeholder="起始时间"
                end-placeholder="结束时间">
            </el-date-picker>
    </div>
    <div class="header_item">
        <el-button icon="el-icon-search" v-if="showButton('search')" @click="searchFormButtonInfo(true,userIds)">查询</el-button>
        <el-button class="search_btn" icon="el-icon-plus" v-if="showButton('export')" @click="exportFiles">导出Excel</el-button>
    </div>
    </div>
    <div class="score_index">
        <div class="score_titles">积分:</div>
        <div class="score_datas"><span>{{ruleNumber}}</span>分</div>
    </div>
    <div class="main_content" style="height:350px">
        <el-table
            v-loading="loading"
            :data="dataFormList"
            height="100%">
            <el-table-column align="center" label="序号" width="60">
            <template #default="scope">
                <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
            </template>
            </el-table-column>
            <el-table-column prop="createTime" label="时间" align="center" width="150"></el-table-column>
            <el-table-column prop="integralWater" label="积分分值" align="center" ></el-table-column>
            <el-table-column prop="balanc" label="余额" align="center" ></el-table-column>
            <el-table-column prop="type" label="类型" align="center" >
                <template #default="{row}">
                <div>{{optionsFormType[row.type-1]&&optionsFormType[row.type - 1].label}}</div>
            </template>
            </el-table-column>
            <el-table-column prop="remark" label="说明" align="center" show-overflow-tooltip></el-table-column>
        </el-table>
        </div>
        <div class="main_footer">
        <el-pagination
            background
            @current-change="changeFormPageNum"
            @size-change="changeFormPageSize"
            :current-page="pageFormNum"
            :page-sizes="[10, 20, 50, 100]"
            :page-size="pageFormSize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="totalForm">
        </el-pagination>
        </div>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import { buttonPinia } from '../../../../pinia/index';
import { changeSize } from '../../../../plugins/public'; // 导入节流、动态切换组件尺寸方法
import { changeSize,downFiles } from '../../../../plugins/public'; // 导入节流、动态切换组件尺寸方法
  export default {
    data() {
      return {
        size: changeSize(), // 组件尺寸
        pageNum: 1,
        pageSize: 10,
        pageFormNum:1,
        pageFormSize:10,
        ruleNumber:null,//总积分数
        userIds:null,//人员id
        totalForm:0,
        search:{},//查询条件
        optionsUser:[],//人员
        searchForm:{},//弹框中的查询条件
        total: 0,
        disabled:false,
        loading: false,
        dataList: [], //积分明细信息列表
        dataFormList:[],//弹框中的列表
        imageList:[],
        asyncTitle: true, // 对话框title 新增:true  修改:false
        asyncVisible: false, // 添加 修改对话框
        typeLists:[
        optionsType:[
            {
                label:'管理人员',
                value:1
            },
            {
                label:'劳务人员',
                value:2
            },
        ],
        optionsFormType:[
            {
                label:'获取',
                value:1
@@ -91,7 +194,7 @@
                label:'消耗',
                value:2
            }
        ]
        ],
      }
    },
    watch: {
@@ -110,6 +213,17 @@
      }
    },
    methods: {
        //通过修改人员类型获取对应的人员名称
        changeType(val){
            this.$set(this.search,'userId','')
            this.$api.Engineer.getPersonsList({userType:val}).then(res=>{
                if(res.statusMsg === 'ok'){
                    this.optionsUser = res.data
                }else{
                    this.$message.warning(res.statusMsg)
                }
            })
        },
      // 查询按钮列表信息
      searchButtonInfo(bol) {
        if(bol) {
@@ -123,7 +237,7 @@
        params.endTime = this.search.time&&this.search.time[1]
        delete params.time
        this.loading = true;
        this.$api.Safety.searchHiddenLists(params).then((res) => {
        this.$api.Safety.searchIntegralLists(params).then((res) => {
          if(res.statusMsg === 'ok') {
            this.total = res.data.total;
            this.dataList = res.data.list;
@@ -131,8 +245,59 @@
          this.loading = false;
        })
      },
      //查询弹框中的列表
      searchFormButtonInfo(bol,userId){
        if(bol) {
          this.pageFormNum = 1;
        }
        let params = Object.assign({},this.searchForm,{
          pageNum: this.pageFormNum,
          pageSize: this.pageFormSize,
          userId:userId
        })
        params.startTime = this.searchForm.time&&this.searchForm.time[0]
        params.endTime = this.searchForm.time&&this.searchForm.time[1]
        delete params.time
        this.loading = true;
        this.$api.Safety.searchPersonLists(params).then((res) => {
          if(res.statusMsg === 'ok') {
            this.totalForm = res.data.data.total;
            this.ruleNumber = res.data.integral
            this.dataFormList = res.data.data.list;
          }
          this.loading = false;
        })
      },
      //导出excel
      exportFiles(){},
      exportFiles(){
        let params = {}
        params.startTime = this.search.time&&this.search.time[0]
        params.endTime = this.search.time&&this.search.time[1]
        delete params.time
        this.functionLoading();
        this.$api.Safety.exportMarketFiles(params).then(res => {
            downFiles(res, '积分明细信息', 'xls')
            this.loadingView.close()
        })
        .catch(() => {
            this.loadingView.close();
        })
      },
      // 转圈圈
      functionLoading() {
          this.loadingView = this.$loading({
              lock: true,
              text: '请稍后...',
              spinner: 'el-icon-loading',
              background: 'rgba(0, 0, 0, 0.7)'
          });
      },
      //个人积分明细弹框
      updateProp(row){
        this.userIds = row.userId
        this.asyncVisible = true;
        this.searchFormButtonInfo(true,row.userId)
      },
      // 判断按钮权限信息
      showButton(str) {
        const pinia = buttonPinia();
@@ -147,7 +312,17 @@
      changePageSize(size) {
        this.pageSize = size;
        this.searchButtonInfo();
      }
      },
      //切换弹框页数
      changeFormPageNum(page){
        this.pageFormNum = page;
        this.searchFormButtonInfo();
      },
      // 切换弹框每页条数
      changeFormPageSize(size) {
        this.pageFormSize = size;
        this.searchFormButtonInfo();
      },
    }
  }
</script>
web/src/views/SecureManage/NipCheck/components/ScoreMarket.vue
@@ -1,6 +1,28 @@
<template>
  <div class="main" style="height:89%">
    <div class="main_header">
        <div class="header_item">
            <span class="header_label">人员类型:</span>
            <el-select v-model="search.userType" clearable placeholder="请选择人员类型" @change="changeType">
                <el-option
                    v-for="item in optionsType"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value">
                </el-option>
            </el-select>
        </div>
        <div class="header_item">
            <span class="header_label">人员姓名:</span>
            <el-select v-model="search.userId" filterable clearable placeholder="请选择人员名称">
                <el-option
                    v-for="item in optionsUser"
                    :key="item.userId"
                    :label="item.realName"
                    :value="item.userId">
                </el-option>
            </el-select>
        </div>
      <div class="header_item">
        <span class="header_label">时间范围:</span>
        <el-date-picker
@@ -15,6 +37,7 @@
      </div>
      <div class="header_item">
        <el-button icon="el-icon-search" v-if="showButton('search')" @click="searchButtonInfo(true)">查询</el-button>
        <el-button class="search_btn" icon="el-icon-plus" v-if="showButton('insert')" @click="insertProp">新增</el-button>
        <el-button class="search_btn" icon="el-icon-plus" v-if="showButton('export')" @click="exportFiles">导出Excel</el-button>
      </div>
    </div>
@@ -29,8 +52,19 @@
          </template>
        </el-table-column>
        <el-table-column prop="createTime" label="时间" align="center" width="150"></el-table-column>
        <el-table-column prop="dangerLocation" label="积分分值" align="center" ></el-table-column>
        <el-table-column prop="title" label="说明" align="center" show-overflow-tooltip></el-table-column>
        <el-table-column prop="realName" label="人员姓名" align="center" ></el-table-column>
        <el-table-column prop="integralWater" label="积分分值" align="center" >
            <template #default="{row}">
                -{{row.integralWater}}
            </template>
        </el-table-column>
        <el-table-column prop="remark" label="说明" align="center" show-overflow-tooltip></el-table-column>
        <el-table-column label="操作" align="center">
          <template #default="{ row }">
            <!-- <el-button class="table_btn" size="mini" v-if="showButton('update')" @click="updateProp(row)">修改</el-button> -->
            <el-button class="delete_btn" size="mini" v-if="showButton('delete')" @click="deleteInfo(row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
    <div class="main_footer">
@@ -45,12 +79,51 @@
        :total="total">
      </el-pagination>
    </div>
    <el-dialog
      class="prop_dialog"
      :title="asyncTitle ? '新增' : '修改'"
      :close-on-click-modal="false"
      :visible.sync="asyncVisible"
      width="35%">
      <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="auto" class="rule_form">
        <el-form-item label="类型:" prop="userType">
            <el-select v-model="ruleForm.userType" clearable placeholder="请选择人员类型" @change="changeType">
                <el-option
                    v-for="item in optionsType"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value">
                </el-option>
            </el-select>
        </el-form-item>
        <el-form-item label="人员姓名:" prop="userId">
            <el-select v-model="ruleForm.userId" filterable clearable placeholder="请选择人员名称">
                <el-option
                    v-for="item in optionsUser"
                    :key="item.userId"
                    :label="item.realName"
                    :value="item.userId">
                </el-option>
            </el-select>
        </el-form-item>
        <el-form-item label="扣除积分:" prop="integralWater">
          <el-input v-model="ruleForm.integralWater" :size="size" type="number" clearable placeholder="请输入扣除积分"></el-input>
        </el-form-item>
        <el-form-item label="说明:" prop="remark">
          <el-input v-model="ruleForm.remark" type="textarea" :rows="5" :size="size" clearable placeholder="请输入说明"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer">
        <el-button @click="asyncVisible = false">取 消</el-button>
        <el-button class="submit_btn" @click="asyncTitle ? submitInsert() : submitUpdate()">提 交</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import { buttonPinia } from '../../../../pinia/index';
import { changeSize } from '../../../../plugins/public'; // 导入节流、动态切换组件尺寸方法
import { changeSize,throttle,downFiles } from '../../../../plugins/public'; // 导入节流、动态切换组件尺寸方法
  export default {
    data() {
      return {
@@ -61,10 +134,44 @@
        total: 0,
        disabled:false,
        loading: false,
        dataList: [], //举报隐患信息列表
        dataList: [], //安全积分超市
        optionsUser:[],//所有人员
        imageList:[],
        asyncTitle: true, // 对话框title 新增:true  修改:false
        asyncVisible: false, // 添加 修改对话框
        ruleForm: {}, // 按钮表单
        rules: {
          userType: [{
            required: true,
            message: '请选择人员类型',
            trigger: 'change'
          }],
          userId: [{
            required: true,
            message: '请选择人员姓名',
            trigger: 'change'
          }],
          integralWater: [{
            required: true,
            message: '请输入扣除积分',
            trigger: 'blur'
          }],
          remark: [{
            required: true,
            message: '请输入说明',
            trigger: 'blur'
          }],
        },
        optionsType:[
            {
                label:'劳务人员',
                value:2
            },
            {
                label:'管理人员',
                value:1
            }
        ]
      }
    },
    watch: {
@@ -83,6 +190,85 @@
      }
    },
    methods: {
    //通过修改人员类型获取对应的人员名称
    changeType(val){
        this.$set(this.search,'userId','')
        this.$set(this.ruleForm,'userId','')
        this.$api.Engineer.getPersonsList({userType:val}).then(res=>{
            if(res.statusMsg === 'ok'){
                this.optionsUser = res.data
            }else{
                this.$message.warning(res.statusMsg)
            }
        })
    },
    // 新增按钮信息
      insertProp() {
        this.asyncTitle = true;
        this.asyncVisible = true;
      },
      // 修改按钮信息
      updateProp(row) {
        this.asyncTitle = false;
        this.asyncVisible = true;
        this.ruleForm = row
      },
      // 删除按钮信息
      deleteInfo(row) {
        this.$confirm("该操作将删除该信息,是否继续删除?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
       })
       .then(() => {
         this.$api.Safety.deleteMarketInfo({id: row.id})
        .then(res => {
          if(res.statusMsg === 'ok') {
            this.searchButtonInfo(true);
            this.$message.success("删除成功!");
          } else {
            this.$message.warning(res.statusMsg);
          }
        })
       })
       .catch(() => {
         this.$message.warning("您已取消");
       })
      },
      // 提交添加按钮信息
      submitInsert: throttle(function() {
        this.$refs.ruleForm.validate((valid) => {
          if(valid) {
            const params = Object.assign({}, this.ruleForm);
            this.$api.Safety.addUpdateMarketInfo(params).then((res) => {
              if(res.statusMsg === 'ok') {
                this.asyncVisible = false;
                this.searchButtonInfo(true);
                this.$message.success('添加成功!');
              } else {
                this.$message.warning(res.statusMsg);
              }
            })
          }
        })
      }, 3000),
      // 提交修改按钮信息
      submitUpdate: throttle(function() {
        this.$refs.ruleForm.validate((valid) => {
          if(valid) {
            const params = Object.assign({}, this.ruleForm);
            this.$api.Safety.addUpdateMarketInfo(params).then((res) => {
              if(res.statusMsg === 'ok') {
                this.asyncVisible = false;
                this.searchButtonInfo(true);
                this.$message.success('修改成功!');
              } else {
                this.$message.warning(res.statusMsg);
              }
            })
          }
        })
      }, 3000),
      // 查询按钮列表信息
      searchButtonInfo(bol) {
        if(bol) {
@@ -96,7 +282,7 @@
        params.endTime = this.search.time&&this.search.time[1]
        delete params.time
        this.loading = true;
        this.$api.Safety.searchHiddenLists(params).then((res) => {
        this.$api.Safety.searchMarketLists(params).then((res) => {
          if(res.statusMsg === 'ok') {
            this.total = res.data.total;
            this.dataList = res.data.list;
@@ -105,7 +291,29 @@
        })
      },
      //导出excel
      exportFiles(){},
      exportFiles(){
        let params = {}
        params.startTime = this.search.time&&this.search.time[0]
        params.endTime = this.search.time&&this.search.time[1]
        delete params.time
        this.functionLoading();
        this.$api.Safety.exportMarketFiles(params).then(res => {
            downFiles(res, '安全积分超市信息', 'xls')
            this.loadingView.close()
        })
        .catch(() => {
            this.loadingView.close();
        })
      },
      // 转圈圈
      functionLoading() {
          this.loadingView = this.$loading({
              lock: true,
              text: '请稍后...',
              spinner: 'el-icon-loading',
              background: 'rgba(0, 0, 0, 0.7)'
          });
      },
      // 判断按钮权限信息
      showButton(str) {
        const pinia = buttonPinia();
xcx/robePages/safeManage/approveHidden.vue
@@ -92,6 +92,7 @@
        data(){
            return{
                hiddenBtn:0,//是否展示提交按钮 0:展示
                createUser:null,//创建人
                checkShow:false,//展示隐患等级和积分值是否可修改
                showLever: false,//隐患等级弹框显隐
                leverColumns: [
@@ -132,6 +133,7 @@
        },
        onLoad(option) {
            this.hiddenBtn = option.status
            this.createUser = option.createUser
            if(option.status==='0'){//0为审批页面、其他为详情页面
                this.checkShow = false
                this.getDetailsInfo(option.id,0)
@@ -175,6 +177,7 @@
                        const params = Object.assign({},this.hiddenDetails);
                        params.level = this.formCheck.levelId
                        params.integral = this.formCheck.integral
                        params.createUser = this.createUser
                        this.$api.reboSystem.checkHiddenInfo(params).then((res) => {
                            if(res.success) {
                                uni.$u.toast("提交成功!");
xcx/robePages/safeManage/checkHidden.vue
@@ -113,7 +113,7 @@
            //跳转隐患审批或详情页面
            goDetailsPage(val){
                uni.navigateTo({
                    url: `./approveHidden?id=${val.id}&status=${val.auditStatus}`
                    url: `./approveHidden?id=${val.id}&status=${val.auditStatus}&createUser=${val.createUser}`
                })
            },
            //查询列表