|
@@ -8,7 +8,6 @@
|
|
|
:before-close="closePopup"
|
|
|
width="600px">
|
|
|
<div>
|
|
|
- <!-- {{dialogData}} -->
|
|
|
<el-form :model="dialogData" ref="dialogData" label-width="80px" v-loading="loading">
|
|
|
<el-form-item label="录入对象" prop="members" :rules="[{ required: true, message: '请选择录入对象', trigger: 'change' }]">
|
|
|
<el-row>
|
|
@@ -23,16 +22,6 @@
|
|
|
<div v-if="employee_list.length == 0" @click="noPersonnelListTips" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
- <!-- <EmployeeSelector
|
|
|
- :employee_not_select="employee_not_select"
|
|
|
- :employee_list="employee_list"
|
|
|
- :can_select_employee="true"
|
|
|
- :can_select_dept="false"
|
|
|
- :close_clear_data="false"
|
|
|
- :selected="employee_selected"
|
|
|
- :visible.sync="show_employee_selector"
|
|
|
- @confirm="move_employee_confirm"/> -->
|
|
|
-
|
|
|
<EmployeeSelector
|
|
|
:employee_not_select="employee_not_select"
|
|
|
:user_employee_list="true"
|
|
@@ -43,7 +32,7 @@
|
|
|
@confirm="move_employee_confirm"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
-
|
|
|
+
|
|
|
<div v-for="(item,index) in dialogData.items" :key="index" @click.stop="itemIndex = index">
|
|
|
<div style="overflow: hidden;">
|
|
|
<span style="line-height: 36px;">录入明细({{index+1}})</span>
|
|
@@ -66,11 +55,17 @@
|
|
|
:options="rule_list"
|
|
|
@change="ruleChange"
|
|
|
:props="{ children: 'child', label: 'name', value: 'id', checkStrictly: true }"
|
|
|
- ></el-cascader>
|
|
|
+ ></el-cascader>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <el-form-item label="选择规则" v-show="item.rule_switch" :prop="'items.'+ index +'.rule_item_list_value'" :rules="[item.rule_switch?{ required: true, message: '请选择规则', trigger: 'blur' }:{}]">
|
|
|
- <el-cascader
|
|
|
+ <el-form-item label="选择规则" v-show="item.rule_switch" :prop="'items.'+ index +'.item_id'" :rules="[item.rule_switch?{ required: true, message: '请选择规则', trigger: 'blur' }:{}]">
|
|
|
+
|
|
|
+ <div class="inputBox" @click="openIsshowItem(item)">
|
|
|
+ <span v-if="item.item_id">已选择</span>
|
|
|
+ <span v-else style="color: #909399;">请选择</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+<!-- <el-cascader
|
|
|
v-model="item.rule_item_list_value"
|
|
|
ref="ruleItem"
|
|
|
:popper-class="'itemClass'"
|
|
@@ -78,13 +73,13 @@
|
|
|
@change="ruleItemChange"
|
|
|
:show-all-levels="false"
|
|
|
:props="{ children: 'child', label: 'name', value: 'id'}"
|
|
|
- ></el-cascader>
|
|
|
+ ></el-cascader> -->
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item>
|
|
|
<div v-show="item.rule_item_details.range_type == 1">{{get_point_name(ptid)}} {{item.rule_item_details.min_point}}</div>
|
|
|
<div v-show="item.rule_item_details.range_type == 2">{{get_point_name(ptid)}} {{item.rule_item_details.min_point}} ~ {{item.rule_item_details.max_point}}</div>
|
|
|
- <div>{{item.rule_item_details.name}}</div>
|
|
|
+ <div>{{item.rule_item_details.remark}}</div>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="积分" :prop="'items.'+ index +'.point'" :rules="[{ required: true, message: '请输入分值', trigger: 'blur' }]">
|
|
|
<el-input-number v-if="item.rule_item_details.range_type == 2" :min="item.min" :max="item.max" v-model="item.point" type="number"></el-input-number>
|
|
@@ -98,7 +93,7 @@
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</el-form-item>
|
|
|
-
|
|
|
+
|
|
|
<el-form-item label="事件内容" :prop="'items.'+ index +'.remark'" :rules="[{ required: true, message: '请输入事件内容', trigger: 'blur' },{ min: 3, max: 100, message: '长度在 3 到 100 个字符', trigger: 'blur' }]">
|
|
|
<el-row>
|
|
|
<el-col :span="18">
|
|
@@ -107,12 +102,11 @@
|
|
|
</el-row>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <!-- 20200831 未处理完成 -->
|
|
|
<el-form-item label="图片">
|
|
|
<uploadOss
|
|
|
:headers="Xtoken"
|
|
|
class="avatar-uploader"
|
|
|
- :action="'https://'+'integralsys.oss-cn-shenzhen.aliyuncs.com'"
|
|
|
+ :action="'https://integralsys.oss-cn-shenzhen.aliyuncs.com'"
|
|
|
:show-file-list="true"
|
|
|
:file-list="item.fileList"
|
|
|
:on-success="handleFilesSuccess"
|
|
@@ -124,7 +118,6 @@
|
|
|
ref="clearPicture"
|
|
|
>
|
|
|
<el-button size="small" type="primary" >点击上传</el-button>(最多选择3张)
|
|
|
- <!-- <span>{{imageState}}</span> -->
|
|
|
</uploadOss>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="递交审批">
|
|
@@ -137,16 +130,6 @@
|
|
|
<div v-if="item.approvalName==''" @click="item.show_approval_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
- <!-- <EmployeeSelector
|
|
|
- :employee_not_select="item.approval_not_select"
|
|
|
- :can_select_employee="true"
|
|
|
- :can_select_dept="false"
|
|
|
- :multi="false"
|
|
|
- :employee_list="employee_lists"
|
|
|
- :selected="item.approval_selected"
|
|
|
- :visible.sync="item.show_approval_selector"
|
|
|
- @confirm="approval_confirm"/> -->
|
|
|
-
|
|
|
<EmployeeSelector
|
|
|
:employee_not_select="item.approval_not_select"
|
|
|
:multi="false"
|
|
@@ -174,36 +157,36 @@
|
|
|
</el-form>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
-
|
|
|
- <el-dialog
|
|
|
- :title="'提交结果'"
|
|
|
- :visible.sync="error_list_show"
|
|
|
- :append-to-body='true'
|
|
|
- @close='error_list_SX'
|
|
|
- width="700px">
|
|
|
- <el-table :data="error_list">
|
|
|
- <el-table-column prop="target" label="员工">
|
|
|
- <template slot-scope="scope">
|
|
|
- <WWOpenData type="userName" :openid="scope.row.target"></WWOpenData>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="point" label="积分"></el-table-column>
|
|
|
- <el-table-column prop="status" label="处理状态">
|
|
|
- <template slot-scope="scope">
|
|
|
- <span :style="'color:'+(scope.row.status==0?'#f70000':'#47bf47')">{{scope.row.status==0?'提交失败':'提交成功'}}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="msg" label="备注信息"></el-table-column>
|
|
|
- </el-table>
|
|
|
- </el-dialog>
|
|
|
|
|
|
+ <el-dialog
|
|
|
+ :title="'提交结果'"
|
|
|
+ :visible.sync="error_list_show"
|
|
|
+ :append-to-body='true'
|
|
|
+ @close='error_list_SX'
|
|
|
+ width="700px">
|
|
|
+ <el-table :data="error_list">
|
|
|
+ <el-table-column prop="target" label="员工">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <WWOpenData type="userName" :openid="scope.row.target"></WWOpenData>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="point" label="积分"></el-table-column>
|
|
|
+ <el-table-column prop="status" label="处理状态">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span :style="'color:'+(scope.row.status==0?'#f70000':'#47bf47')">{{scope.row.status==0?'提交失败':'提交成功'}}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="msg" label="备注信息"></el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-dialog>
|
|
|
+ <SelectRule :visible.sync="isShowRule" @confirm="ruleConfirm" :ptId="integralType" :selectItems="selectItem"></SelectRule>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import moment from 'moment'
|
|
|
import EmployeeSelector from '@/views/common/EmployeeSelector'
|
|
|
- // import EmployeeSelector from '@/views/common/EmployeeSelectorVTwo'
|
|
|
+ import SelectRule from '@/components/SelectRule';
|
|
|
import uploadOss from "@/views/upload_oss/upload"
|
|
|
import { getToken } from '@/utils/auth'
|
|
|
|
|
@@ -246,7 +229,7 @@
|
|
|
Xtoken: { 'X-Token': getToken() },
|
|
|
btn_loading: false,
|
|
|
loading: false,
|
|
|
- dialogData:{
|
|
|
+ dialogData:{
|
|
|
members: [],
|
|
|
items: [{
|
|
|
rule_switch: true,
|
|
@@ -292,19 +275,21 @@
|
|
|
rule_list: [],
|
|
|
// 规则细则
|
|
|
rule_item_list: [],
|
|
|
- flatteningIntegralRules: null,
|
|
|
ptid: 0,
|
|
|
point_types: JSON.parse(localStorage.getItem('SET_POINT_TYPES')),
|
|
|
itemIndex: 0,
|
|
|
+
|
|
|
+ isShowRule: false,
|
|
|
+ selectItem: [],
|
|
|
}
|
|
|
},
|
|
|
- components: {EmployeeSelector,uploadOss},
|
|
|
+ components: {EmployeeSelector,uploadOss,SelectRule},
|
|
|
watch:{
|
|
|
integralType(val){
|
|
|
this.dialogData.items[0].pt_id = val
|
|
|
this.ptid = val
|
|
|
this.getRuleData()
|
|
|
- this.getRuleItemData()
|
|
|
+ // this.getRuleItemData()
|
|
|
},
|
|
|
'dialogData.members'(val){
|
|
|
if(val.length == 0){
|
|
@@ -327,7 +312,22 @@
|
|
|
})
|
|
|
},
|
|
|
methods: {
|
|
|
- // 20200831 图片上传 未完成
|
|
|
+ openIsshowItem(item){
|
|
|
+ this.selectItem = [item.rule_item_details];
|
|
|
+ this.isShowRule = true
|
|
|
+ },
|
|
|
+ //选择规则
|
|
|
+ ruleConfirm(rules) {
|
|
|
+ let item = this.dialogData.items[this.itemIndex]
|
|
|
+ let ruleItemDetails = JSON.parse(JSON.stringify(rules))
|
|
|
+ item.rule_item_details = ruleItemDetails
|
|
|
+ item.remark = ruleItemDetails.remark
|
|
|
+ item.rule_id = ruleItemDetails.rule_id
|
|
|
+ item.item_id = ruleItemDetails.id
|
|
|
+ item.max = ruleItemDetails.max_point * 1
|
|
|
+ item.min = ruleItemDetails.min_point * 1
|
|
|
+ item.point = ruleItemDetails.min_point
|
|
|
+ },
|
|
|
// 附件上传
|
|
|
beforeUpload(file){
|
|
|
const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type)
|
|
@@ -338,34 +338,10 @@
|
|
|
if (!isLt2M) {
|
|
|
this.$message.error('上传头像图片大小不能超过 2MB!')
|
|
|
}
|
|
|
- return isJPG && isLt2M
|
|
|
+ return isJPG && isLt2M
|
|
|
},
|
|
|
onFilePreView(file) {
|
|
|
window.open(file.response.url,'_blank')
|
|
|
- // // 点击时查看文件
|
|
|
- // debugger
|
|
|
- // const $ext_list = ['doc', 'docx', 'pptx', 'xls', 'xlsx', 'ppt', 'txt']
|
|
|
- // const $ext_name = file.name.split('.')[1]
|
|
|
- // if ($ext_list.indexOf($ext_name) >= 0) {
|
|
|
- // window.open(file.response.url,'_blank')
|
|
|
- // }
|
|
|
- // // 点击时查看图片
|
|
|
- // const $ext_list1 = ['jpg', 'png', 'bmp', 'jpeg','JPG','PNG']
|
|
|
- // const $ext_name1 = file.name.split('.')[1]
|
|
|
- // if ($ext_list1.indexOf($ext_name1) >= 0) {
|
|
|
- // let ii = 0
|
|
|
- // for (const i in this.dialogData.items[this.itemIndex].files) {
|
|
|
- // console.log(this.dialogData.items[this.itemIndex].files[i].split('.')[1])
|
|
|
- // debugger
|
|
|
- // if (['jpg', 'png', 'bmp', 'jpeg','JPG','PNG'].indexOf(this.dialogData.items[this.itemIndex].files[i].split('.')[1]) >= 0) {
|
|
|
- // if (this.dialogData.items[this.itemIndex].files[i] == file) {
|
|
|
- // this.openPhotoSwipe(ii,document.querySelectorAll('img[preview]'))
|
|
|
- // return
|
|
|
- // }
|
|
|
- // ii++
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
},
|
|
|
onFileRemove(file, fileList) {
|
|
|
this.dialogData.items[this.itemIndex].fileList = fileList
|
|
@@ -382,8 +358,6 @@
|
|
|
this.dialogData.items[this.itemIndex].files.push(element.url)
|
|
|
});
|
|
|
},
|
|
|
- // 图片上传
|
|
|
-
|
|
|
|
|
|
// 没有人员提示
|
|
|
noPersonnelListTips(){
|
|
@@ -405,7 +379,6 @@
|
|
|
},
|
|
|
// 选择录入对象
|
|
|
move_employee_confirm(data){
|
|
|
- console.log(data)
|
|
|
this.employeeNames = []
|
|
|
this.employee_selected = {dept: [],employee:[]}
|
|
|
this.employeeName = ''
|
|
@@ -422,76 +395,44 @@
|
|
|
},
|
|
|
// 获取规则信息
|
|
|
getRuleData(){
|
|
|
- let self = this
|
|
|
let data = {
|
|
|
cycle_type: '1',
|
|
|
pt_id: 2
|
|
|
}
|
|
|
- this.integralType === 1?data.pt_id = '1':this.integralType === 2?data.pt_id = '2':data.pt_id = '3'
|
|
|
- self.$http('get','/api/integral/rule/trees',data
|
|
|
- ).then(res => {
|
|
|
- if (res.data.code == 1) {
|
|
|
- const resultData = res.data.data
|
|
|
- self.rule_list = resultData.rule_tree
|
|
|
- }
|
|
|
- self.rule_list = self.getTreeData(self.rule_list)
|
|
|
- }).catch(e => {self.$message.error(e.data.msg)})
|
|
|
+ this.integralType === 1?data.pt_id = '1':this.integralType === 2?data.pt_id = '2':data.pt_id = '3';
|
|
|
+ this.$http('get','/api/integral/rule/trees',data).then(res => {
|
|
|
+ this.rule_list = this.getTreeData(res.data.data.rule_tree)
|
|
|
+ })
|
|
|
},
|
|
|
// 获取规则细则
|
|
|
getRuleItemData(){
|
|
|
- let self = this
|
|
|
let data = {
|
|
|
cycle_type: '1',
|
|
|
pt_id: '1'
|
|
|
}
|
|
|
- self.loading = true
|
|
|
+ this.loading = true
|
|
|
this.integralType === 1?data.pt_id = '1':this.integralType === 2?data.pt_id = '2':data.pt_id = '3'
|
|
|
- // const headers = {'Accept':'application/vnd.test.v2+json'}
|
|
|
- self.$http('get','/api/integral/rule/trees',data,'v2').then(res => {
|
|
|
+ this.$http('get','/api/integral/rule/trees',data,'v2').then(res => {
|
|
|
if (res.data.code == 1) {
|
|
|
const resultData = res.data.data
|
|
|
- self.rule_item_list = resultData.tree
|
|
|
- self.flatteningIntegralRules = self.getItemDetail(self.rule_item_list)
|
|
|
- self.loading = false
|
|
|
+ this.rule_item_list = resultData.tree
|
|
|
+ this.loading = false
|
|
|
}
|
|
|
- }).catch(e => {self.$message.error(e.data.msg)})
|
|
|
+ })
|
|
|
},
|
|
|
// 规则细则变化关闭down
|
|
|
ruleItemChange(value){
|
|
|
let item = this.dialogData.items[this.itemIndex]
|
|
|
let ruleItemDetails = null
|
|
|
- // this.flatteningIntegralRules.forEach(element => {
|
|
|
- // if (element.id == value[value.length - 1]) {
|
|
|
- // ruleItemDetails = {...element}
|
|
|
- // }
|
|
|
- // })
|
|
|
ruleItemDetails = this.$refs["ruleItem"][this.itemIndex].getCheckedNodes()[0].data
|
|
|
- console.log(ruleItemDetails)
|
|
|
-
|
|
|
if(ruleItemDetails){
|
|
|
item.rule_item_details = ruleItemDetails
|
|
|
item.remark = ruleItemDetails.name
|
|
|
item.rule_id = ruleItemDetails.pid
|
|
|
item.item_id = value[value.length - 1]
|
|
|
}
|
|
|
-
|
|
|
- const user_info = this.$store.getters.user_info
|
|
|
- // if(item.reviewer_id){
|
|
|
- // item.pointShow = 2
|
|
|
- // }else{
|
|
|
- // item.pointShow = 1
|
|
|
- // if (ruleItemDetails.min_point === ruleItemDetails.max_point) {
|
|
|
- // user_info.point_config.point_limit.forEach(element => {
|
|
|
- // if(this.ptid == this.integralType){
|
|
|
- // item.max = element.point * 1
|
|
|
- // item.min = element.point * -1
|
|
|
- // }
|
|
|
- // });
|
|
|
- // }else{
|
|
|
- item.max = ruleItemDetails.max_point * 1
|
|
|
- item.min = ruleItemDetails.min_point * 1
|
|
|
- // }
|
|
|
- // }
|
|
|
+ item.max = ruleItemDetails.max_point * 1
|
|
|
+ item.min = ruleItemDetails.min_point * 1
|
|
|
item.point = ruleItemDetails.min_point
|
|
|
},
|
|
|
// 规则分类变化关闭dewn
|
|
@@ -612,7 +553,6 @@
|
|
|
}
|
|
|
const user_info = this.$store.getters.user_info
|
|
|
const index = user_info.point_config.point_limit.findIndex(o => o.pt_id === this.integralType)
|
|
|
- console.log(this.dialogData)
|
|
|
let employeePointLimitMin = null
|
|
|
let employeePointLimitMax = null
|
|
|
user_info.point_config.point_limit.forEach(element => {
|
|
@@ -649,9 +589,9 @@
|
|
|
!element.reviewer_id?element.reviewer_id = 0:''
|
|
|
!element.item_id?element.item_id = 0:''
|
|
|
if(
|
|
|
- (element.reviewer_id && element.point !== 0 && element.rule_id > 0) ||
|
|
|
- (element.reviewer_id <= 0 && element.item_id > 0 && ruleLimitCheck && element.point !== 0 && element.point <= maxPointPermission && Math.abs(element.point) <= maxPointPermission) ||
|
|
|
- (element.reviewer_id <= 0 && !ruleLimitCheck && this.integralType == 3 && element.rule_id > 0) ||
|
|
|
+ (element.reviewer_id && element.point !== 0 && element.rule_id > 0) ||
|
|
|
+ (element.reviewer_id <= 0 && element.item_id > 0 && ruleLimitCheck && element.point !== 0 && element.point <= maxPointPermission && Math.abs(element.point) <= maxPointPermission) ||
|
|
|
+ (element.reviewer_id <= 0 && !ruleLimitCheck && this.integralType == 3 && element.rule_id > 0) ||
|
|
|
(element.reviewer_id <= 0 && element.item_id >= 0 && element.point !== 0 && element.point <= maxPointPermission && Math.abs(element.point) <= maxPointPermission && element.rule_id > 0 )
|
|
|
){
|
|
|
data.items.push({rule_id: element.rule_id || 0, item_id: element.item_id || 0, point: element.point, remark: element.remark, event_time: element.event_time, pt_id: self.ptid, reviewer_id: element.reviewer_id || 0, files: element.files})
|
|
@@ -669,6 +609,7 @@
|
|
|
this.btn_loading = false
|
|
|
return false
|
|
|
}
|
|
|
+ console.log(data)
|
|
|
self.$http('post',this.integralType === 1?'':this.integralType === 2?'/api/integral/review/a/entry':'/api/integral/point/entry',data
|
|
|
).then(res => {
|
|
|
if(res.data.code == 1){
|
|
@@ -688,7 +629,7 @@
|
|
|
}).catch(e => {self.$message.close()})
|
|
|
this.$nextTick(() => {
|
|
|
self.btn_loading = false
|
|
|
- })
|
|
|
+ })
|
|
|
},
|
|
|
//关闭错误信息时的回调
|
|
|
error_list_SX(){
|
|
@@ -794,7 +735,25 @@
|
|
|
padding-left:15px;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
-
|
|
|
- // ruleClass
|
|
|
- // itemClass
|
|
|
-</style>
|
|
|
+ .inputBox {
|
|
|
+ height: 36px;
|
|
|
+ line-height: 36px;
|
|
|
+ padding-right: 30px;
|
|
|
+ -webkit-appearance: none;
|
|
|
+ background-color: #fff;
|
|
|
+ background-image: none;
|
|
|
+ border-radius: 4px;
|
|
|
+ border: 1px solid #dcdfe6;
|
|
|
+ -webkit-box-sizing: border-box;
|
|
|
+ box-sizing: border-box;
|
|
|
+ color: #606266;
|
|
|
+ display: inline-block;
|
|
|
+ font-size: inherit;
|
|
|
+ width: 230px;
|
|
|
+ outline: 0;
|
|
|
+ padding: 0 15px;
|
|
|
+ cursor: pointer;
|
|
|
+ -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
|
|
|
+ transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
|
|
|
+ }
|
|
|
+</style>
|