Commit 1e079817 authored by 高宇's avatar 高宇

修复兼容性问题;

parent 9cc5af01
...@@ -56,6 +56,14 @@ ...@@ -56,6 +56,14 @@
isRouteShow: 1, isRouteShow: 1,
title: "通讯录", title: "通讯录",
url: "/addressBook" url: "/addressBook"
},
{
appName: "rating",
icon: "fa-ticket",
id: 1,
isRouteShow: 1,
title: "评测投票",
url: "/rating"
} }
], ],
homePage: { homePage: {
......
...@@ -3,6 +3,7 @@ import sales from './apis/sales' ...@@ -3,6 +3,7 @@ import sales from './apis/sales'
import contract from './apis/contract' import contract from './apis/contract'
import product from './apis/product' import product from './apis/product'
import addressBook from './apis/addressBook' import addressBook from './apis/addressBook'
import rating from './apis/rating'
const usingJSONP = process.env.NODE_ENV !== 'production' const usingJSONP = process.env.NODE_ENV !== 'production'
const API_HOST = process.env.API_HOST const API_HOST = process.env.API_HOST
const API_PORT = process.env.API_PORT const API_PORT = process.env.API_PORT
...@@ -27,7 +28,7 @@ const option = { ...@@ -27,7 +28,7 @@ const option = {
} }
let apis = {} let apis = {}
apis = Object.assign(apis, ElementApi, sales, contract, product, addressBook) apis = Object.assign(apis, ElementApi, sales, contract, product, addressBook, rating)
export default { export default {
option, option,
...apis ...apis
......
export default {
// 获取测评投票列表
getRatingList: {
url: '/vue/rating/list'
},
// 获取测评新建
getRatingNew: {
url: '/vue/rating/get-new-rating'
},
// 保存测评新建
saveRatingNew: {
url: '/vue/rating/save-new-rating'
},
// 获取测评编辑
getRatingEdit: {
url: '/vue/rating/get-edit-rating'
},
// 保存测评编辑
saveRatingEdit: {
url: '/vue/rating/save-edit-rating'
},
// 获取评测新建
getRatingVoteNew: {
url: '/vue/rating/get-new-vote'
},
// 保存评测新建
saveRatingVoteNew: {
url: '/vue/rating/save-new-vote'
},
// 获取评测编辑
getRatingVoteEdit: {
url: '/vue/rating/get-edit-vote'
},
// 保存评测编辑
saveRatingVoteEdit: {
url: '/vue/rating/save-edit-vote'
},
// 删除评测
delRatingVote: {
url: '/vue/rating/delete'
},
// 停止评测
stopRatingVote: {
url: '/vue/rating/stop'
},
// 获取评测页面筛选
getRatingVoteFilter: {
url: '/vue/rating/get-filter-cast-rating'
},
// 获取评测页面
getRating: {
url: '/vue/rating/get-cast-rating'
},
// 进行评测投票操作
operationRating: {
url: '/vue/rating/save-cast-rating'
},
// 全部投票完成后提交评测
saveRatingComplete: {
url: '/vue/rating/save-rating-complete'
},
// 获取投票页面
getRatingVote: {
url: '/vue/rating/get-cost-vote'
},
// 进行投票选择操作
operationRatingVote: {
url: '/vue/rating/save-cost-vote'
},
// 获取评测结果
getRatingResult: {
url: '/vue/rating/result-rating'
},
// 获取投票结果
getRatingVoteResult: {
url: '/vue/rating/result-vote'
},
// 获取投票评测人的投票状态
getRatingProgress: {
url: '/vue/rating/progress'
}
}
...@@ -209,7 +209,7 @@ ...@@ -209,7 +209,7 @@
</style> </style>
<style> <style>
.form-content .el-form-item__label { .form-content .el-form-item__label {
font-size: .875rem; font-size: 12px;
font-weight: normal; font-weight: normal;
padding: 0 2px 0 0; padding: 0 2px 0 0;
} }
......
...@@ -81,6 +81,7 @@ ...@@ -81,6 +81,7 @@
this.getList() this.getList()
}, },
resetForm () { resetForm () {
this.pagenation.page = 1
this.$refs.clientForm.resetForm() this.$refs.clientForm.resetForm()
Object.keys(this.form).forEach(item => { Object.keys(this.form).forEach(item => {
this.form[item] = '' this.form[item] = ''
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
<span>{{label}}</span> <span>{{label}}</span>
</el-col> </el-col>
<el-col :span="14"> <el-col :span="14">
<el-checkbox v-model="checkAll">全选</el-checkbox>
<span v-for="(item, key) in groupOptionsList" <span v-for="(item, key) in groupOptionsList"
:key="key"> :key="key">
<el-card class="box-card" <el-card class="box-card"
...@@ -37,7 +38,24 @@ ...@@ -37,7 +38,24 @@
export default { export default {
name: 'multiple-check-group', name: 'multiple-check-group',
mixins: [itemMixin], mixins: [itemMixin],
methods: {} methods: {},
data () {
return {
checkAll: false
}
},
watch: {
'checkAll' (val) {
this.groupOptionsList.forEach(item => {
item.checkAll = val
if (val) {
item.checkItems = item.child.map(i => i.key)
} else {
item.checkItems = []
}
})
}
}
} }
</script> </script>
......
<template>
<section class="single-date-time-picker">
<el-row :gutter="10">
<el-col :span="4" :class="['client-label', 'text-right', {'required': required}]">
<span>{{startLabel}}</span>
</el-col>
<el-col :span="14">
<el-row :gutter="10">
<el-col :span="24" class="calc-timer">
<el-row :gutter="2">
<el-col :span="12">
<el-date-picker
size="mini"
:clearable="false"
v-model="startDateTime.date"
type="date"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
placeholder="选择日期">
</el-date-picker>
</el-col>
<el-col :span="12">
<el-time-select
size="mini"
:clearable="false"
v-model="startDateTime.time"
:picker-options="{start: '00:00', step: '00:15', end: '24:00'}"
placeholder="选择时间">
</el-time-select>
</el-col>
</el-row>
</el-col>
</el-row>
<span class="tips"><em>{{tips}}</em></span>
</el-col>
<el-col :span="6">
<slot name="formError"></slot>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="4" class="client-label text-right">
<span>{{calcLabel}}</span>
</el-col>
<el-col :span="14">
<div class="calc-input">
<div>
<el-button type="primary" size="mini" icon="el-icon-minus" @click="reduceMin"></el-button>
<el-input v-model="calcTime" size="mini" placeholder="间隔时间" @keyup.native="handleInput">
<template slot="append">分钟</template>
</el-input>
<el-button type="primary" size="mini" icon="el-icon-plus" @click="plusMin"></el-button>
</div>
</div>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="4" :class="['client-label', 'text-right', {'required': required}]">
<span>{{endLabel}}</span>
</el-col>
<el-col :span="14">
<el-row :gutter="10">
<el-col :span="24" class="calc-timer">
<el-row :gutter="2">
<el-col :span="12">
<el-date-picker
:clearable="false"
size="mini"
v-model="endDateTime.date"
type="date"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
placeholder="选择日期">
</el-date-picker>
</el-col>
<el-col :span="12">
<el-time-select
size="mini"
:clearable="false"
v-model="endDateTime.time"
:picker-options="{start: '00:00', step: '00:15', end: '24:00'}"
placeholder="选择时间">
</el-time-select>
</el-col>
</el-row>
</el-col>
</el-row>
</el-col>
<el-col :span="6">
<slot name="formError"></slot>
<span class="el-form-item__error">{{calcError}}</span>
</el-col>
</el-row>
</section>
</template>
<script>
import itemMixin from '../../lib/singleItemMixin'
export default {
name: 'single-date-time-picker',
mixins: [itemMixin],
data () {
return {
calcTime: 0,
calcError: ''
}
},
props: ['pickerType'],
methods: {
handleInput (e) {
this.calcTime = e.target.value.replace(/[^\d]/g, 0)
},
reduceMin () {
this.calcTime -= 15
if (this.calcTime < 0) {
this.calcTime = 0
return
}
},
plusMin () {
this.calcTime += 15
if (this.calcTime >= 1440) {
this.calcTime = 1440
}
},
compareTime () {
let start = new Date(this.start_at)
let end = new Date(this.end_at)
let diffTime = end.getTime() - start.getTime()
let days = Math.floor(diffTime / (24 * 3600 * 1000))
let level = diffTime % (24 * 3600 * 1000)
let hours = Math.floor(level / (3600 * 1000))
var leave2 = level % (3600 * 1000) // 计算小时数后剩余的毫秒数
var minutes = Math.floor(leave2 / (60 * 1000))
// console.log(minutes)
this.calcTime = minutes + hours * 60 + days * 24 * 60
if (this.calcTime < 0) {
this.calcTime = 0
}
if (start >= end) {
this.calcError = '结束时间的值必须大于"开始时间"。'
} else {
this.calcError = ''
}
},
updateTime (val) {
if (this.startDateTime.date === '' && this.startDateTime.time === '') {
return
}
if (val > 1440) {
this.calcError = '请检查结束时间,看起来您工作了超过24个小时!'
}
if (val === '') {
this.calcTime = 0
return
}
let start = new Date(this.start_at)
let min = start.getMinutes()
let minutes = (min + parseInt(val)) % 60
let hours = start.getHours() + Math.floor((min + parseInt(val)) / 60)
// let days = start.getDate() + Math.floor(start.getHours() / 24)
// console.log(start.getDate())
start.setMinutes(minutes)
if (hours === 24) {
start.setHours(0)
start.setMinutes(0)
start.setDate(start.getDate() + 1)
} else {
start.setHours(hours)
}
this.endDateTime.date = start.getFullYear() + '-' + ((start.getMonth() + 1) + 100).toString().slice(1, 3) + '-' + (start.getDate() + 100).toString().slice(1, 3)
this.endDateTime.time = (start.getHours() + 100).toString().slice(1, 3) + ':' + (start.getMinutes() + 100).toString().slice(1, 3)
// console.log(this.endDateTime.data)
}
},
watch: {
'startDateTimeItem' (val) {
if (val !== '') {
let t = val.split(' ')
this.startDateTime.date = t[0]
this.startDateTime.time = t[1]
}
},
'endDateTimeItem' (val) {
if (val !== '') {
let t = val.split(' ')
this.endDateTime.date = t[0]
this.endDateTime.time = t[1]
}
},
'startDateTime.date' (val) {
if (this.startDateTime.time !== '') {
this.start_at = val + ' ' + this.startDateTime.time
if (this.endDateTime.date === '' || this.endDateTime.date === '') {
this.endDateTime.date = val
this.endDateTime.time = this.startDateTime.time
}
}
},
'startDateTime.time' (val) {
if (this.startDateTime.date !== '') {
this.start_at = this.startDateTime.date + ' ' + val
if (this.endDateTime.date === '' || this.endDateTime.date === '') {
this.endDateTime.date = this.startDateTime.date
this.endDateTime.time = val
}
}
},
'endDateTime.date' (val) {
if (val) {
if (this.endDateTime.time !== '') {
this.end_at = val + ' ' + this.endDateTime.time
}
}
},
'endDateTime.time' (val) {
// console.log(val)
if (val) {
if (this.endDateTime.date !== '') {
this.end_at = this.endDateTime.date + ' ' + val
}
}
},
'start_at' (val) {
this.compareTime()
this.$emit('update:startItem', val)
},
'end_at' (val) {
if (this.start_at !== '') {
this.compareTime()
}
this.$emit('update:endItem', val)
},
'calcTime' (val) {
this.updateTime(val)
}
}
}
</script>
<style scoped>
.single-date-time-picker > .el-row:not(:last-child) {
margin-bottom: 15px;
}
</style>
<style>
.calc-input {
display: inline-block;
width: 100%;
}
.calc-input > div {
display: flex;
}
.calc-input > div > .el-button {
margin-right: 0;
color: #333;
background-color: #fff;
border-color: #ccc;
padding: 7px 9px;
}
.calc-input > div > .el-button:hover {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
}
.calc-input > div > .el-input {
border: 1px solid #DCDFE6;
}
.calc-input > div > .el-input input {
text-align: center;
border: none;
}
.calc-input > div > .el-input .el-input-group__append {
border: none;
}
.calc-timer .el-input {
width: 100%;
}
</style>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<el-col :span="14"> <el-col :span="14">
<span v-for="(i, key) in items" :key="key"> <span v-for="(i, key) in items" :key="key">
<el-input v-model="i[multipleKey]" :placeholder="label" size="mini"> <el-input v-model="i[multipleKey]" :placeholder="label" size="mini">
<template slot="prepend">{{setPerText(key)}}</template> <template slot="prepend" v-if="setPrepend">{{setPerText(key)}}</template>
<el-button slot="append" v-if="key === 0" icon="el-icon-plus" @click="addItem(items)"></el-button> <el-button slot="append" v-if="key === 0" icon="el-icon-plus" @click="addItem(items)"></el-button>
<el-button slot="append" v-else icon="el-icon-minus" @click="delItem(items, key)"></el-button> <el-button slot="append" v-else icon="el-icon-minus" @click="delItem(items, key)"></el-button>
</el-input> </el-input>
......
<template> <template>
<section class="single-date-time-picker"> <section class="single-date-picker">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="4" :class="['client-label', 'text-right', {'required': required}]"> <el-col :span="4" :class="['client-label', 'text-right', {'required': required}]">
<span>{{startLabel}}</span> <span>{{label}}</span>
</el-col> </el-col>
<el-col :span="14"> <el-col :span="14">
<el-row :gutter="10">
<el-col :span="24" class="calc-timer">
<el-row :gutter="2">
<el-col :span="12">
<el-date-picker <el-date-picker
size="mini" size="mini"
:clearable="false" v-model="timeItem"
v-model="startDateTime.date" type="datetime"
type="date" placeholder="选择日期时间"
format="yyyy-MM-dd" align="right"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:SS"
placeholder="选择日期"> :picker-options="pickerOptions">
</el-date-picker> </el-date-picker>
</el-col>
<el-col :span="12">
<el-time-select
size="mini"
:clearable="false"
v-model="startDateTime.time"
:picker-options="{start: '00:00', step: '00:15', end: '24:00'}"
placeholder="选择时间">
</el-time-select>
</el-col>
</el-row>
</el-col>
</el-row>
<span class="tips"><em>{{tips}}</em></span> <span class="tips"><em>{{tips}}</em></span>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<slot name="formError"></slot> <slot name="formError"></slot>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="10">
<el-col :span="4" class="client-label text-right">
<span>{{calcLabel}}</span>
</el-col>
<el-col :span="14">
<div class="calc-input">
<div>
<el-button type="primary" size="mini" icon="el-icon-minus" @click="reduceMin"></el-button>
<el-input v-model="calcTime" size="mini" placeholder="间隔时间" @keyup.native="handleInput">
<template slot="append">分钟</template>
</el-input>
<el-button type="primary" size="mini" icon="el-icon-plus" @click="plusMin"></el-button>
</div>
</div>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="4" :class="['client-label', 'text-right', {'required': required}]">
<span>{{endLabel}}</span>
</el-col>
<el-col :span="14">
<el-row :gutter="10">
<el-col :span="24" class="calc-timer">
<el-row :gutter="2">
<el-col :span="12">
<el-date-picker
:clearable="false"
size="mini"
v-model="endDateTime.date"
type="date"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
placeholder="选择日期">
</el-date-picker>
</el-col>
<el-col :span="12">
<el-time-select
size="mini"
:clearable="false"
v-model="endDateTime.time"
:picker-options="{start: '00:00', step: '00:15', end: '24:00'}"
placeholder="选择时间">
</el-time-select>
</el-col>
</el-row>
</el-col>
</el-row>
</el-col>
<el-col :span="6">
<slot name="formError"></slot>
<span class="el-form-item__error">{{calcError}}</span>
</el-col>
</el-row>
</section> </section>
</template> </template>
...@@ -101,187 +31,13 @@ ...@@ -101,187 +31,13 @@
mixins: [itemMixin], mixins: [itemMixin],
data () { data () {
return { return {
calcTime: 0,
calcError: ''
}
},
props: ['pickerType'],
methods: {
handleInput (e) {
this.calcTime = e.target.value.replace(/[^\d]/g, 0)
},
reduceMin () {
this.calcTime -= 15
if (this.calcTime < 0) {
this.calcTime = 0
return
}
},
plusMin () {
this.calcTime += 15
if (this.calcTime >= 1440) {
this.calcTime = 1440
}
},
compareTime () {
let start = new Date(this.start_at)
let end = new Date(this.end_at)
let diffTime = end.getTime() - start.getTime()
let days = Math.floor(diffTime / (24 * 3600 * 1000))
let level = diffTime % (24 * 3600 * 1000)
let hours = Math.floor(level / (3600 * 1000))
var leave2 = level % (3600 * 1000) // 计算小时数后剩余的毫秒数
var minutes = Math.floor(leave2 / (60 * 1000))
// console.log(minutes)
this.calcTime = minutes + hours * 60 + days * 24 * 60
if (this.calcTime < 0) {
this.calcTime = 0
}
if (start >= end) {
this.calcError = '结束时间的值必须大于"开始时间"。'
} else {
this.calcError = ''
}
},
updateTime (val) {
if (this.startDateTime.date === '' && this.startDateTime.time === '') {
return
}
if (val > 1440) {
this.calcError = '请检查结束时间,看起来您工作了超过24个小时!'
}
if (val === '') {
this.calcTime = 0
return
}
let start = new Date(this.start_at)
let min = start.getMinutes()
let minutes = (min + parseInt(val)) % 60
let hours = start.getHours() + Math.floor((min + parseInt(val)) / 60)
// let days = start.getDate() + Math.floor(start.getHours() / 24)
// console.log(start.getDate())
start.setMinutes(minutes)
if (hours === 24) {
start.setHours(0)
start.setMinutes(0)
start.setDate(start.getDate() + 1)
} else {
start.setHours(hours)
}
this.endDateTime.date = start.getFullYear() + '-' + ((start.getMonth() + 1) + 100).toString().slice(1, 3) + '-' + (start.getDate() + 100).toString().slice(1, 3)
this.endDateTime.time = (start.getHours() + 100).toString().slice(1, 3) + ':' + (start.getMinutes() + 100).toString().slice(1, 3)
// console.log(this.endDateTime.data)
}
},
watch: {
'startDateTimeItem' (val) {
if (val !== '') {
let t = val.split(' ')
this.startDateTime.date = t[0]
this.startDateTime.time = t[1]
}
},
'endDateTimeItem' (val) {
if (val !== '') {
let t = val.split(' ')
this.endDateTime.date = t[0]
this.endDateTime.time = t[1]
}
},
'startDateTime.date' (val) {
if (this.startDateTime.time !== '') {
this.start_at = val + ' ' + this.startDateTime.time
if (this.endDateTime.date === '' || this.endDateTime.date === '') {
this.endDateTime.date = val
this.endDateTime.time = this.startDateTime.time
}
}
},
'startDateTime.time' (val) {
if (this.startDateTime.date !== '') {
this.start_at = this.startDateTime.date + ' ' + val
if (this.endDateTime.date === '' || this.endDateTime.date === '') {
this.endDateTime.date = this.startDateTime.date
this.endDateTime.time = val
}
}
},
'endDateTime.date' (val) {
if (val) {
if (this.endDateTime.time !== '') {
this.end_at = val + ' ' + this.endDateTime.time
}
}
},
'endDateTime.time' (val) {
// console.log(val)
if (val) {
if (this.endDateTime.date !== '') {
this.end_at = this.endDateTime.date + ' ' + val
}
}
},
'start_at' (val) {
this.compareTime()
this.$emit('update:startItem', val)
},
'end_at' (val) {
if (this.start_at !== '') {
this.compareTime()
}
this.$emit('update:endItem', val)
},
'calcTime' (val) {
this.updateTime(val)
} }
} }
} }
</script> </script>
<style scoped> <style scoped>
.single-date-time-picker > .el-row:not(:last-child) { .el-date-editor.el-input, .el-date-editor.el-input__inner {
margin-bottom: 15px;
}
</style>
<style>
.calc-input {
display: inline-block;
width: 100%;
}
.calc-input > div {
display: flex;
}
.calc-input > div > .el-button {
margin-right: 0;
color: #333;
background-color: #fff;
border-color: #ccc;
padding: 7px 9px;
}
.calc-input > div > .el-button:hover {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
}
.calc-input > div > .el-input {
border: 1px solid #DCDFE6;
}
.calc-input > div > .el-input input {
text-align: center;
border: none;
}
.calc-input > div > .el-input .el-input-group__append {
border: none;
}
.calc-timer .el-input {
width: 100%; width: 100%;
} }
</style> </style>
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
v-click-outside="lmClose" v-click-outside="lmClose"
ref="leaveMessage" ref="leaveMessage"
:lmTemplate="lmTemplate" :lmTemplate="lmTemplate"
:type="1"> :type="7">
</leave-message> </leave-message>
</div> </div>
</div> </div>
...@@ -247,6 +247,7 @@ ...@@ -247,6 +247,7 @@
return list return list
}, },
resetForm () { resetForm () {
this.pagenation.page = 1
this.$refs.clientForm.resetForm() this.$refs.clientForm.resetForm()
Object.keys(this.form).forEach(item => { Object.keys(this.form).forEach(item => {
this.form[item] = '' this.form[item] = ''
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
} from '@/lib/commonMixin' } from '@/lib/commonMixin'
import operationContract from './operationContract' import operationContract from './operationContract'
import {setModule} from '../../../lib/viewHelper' import {setModule} from '../../../lib/viewHelper'
export default { export default {
name: '', name: '',
components: { components: {
...@@ -34,7 +35,9 @@ ...@@ -34,7 +35,9 @@
let form = this.$refs.operationContract.getForm() let form = this.$refs.operationContract.getForm()
let subData = setModule(form.SalesContracts, 'SalesContracts') let subData = setModule(form.SalesContracts, 'SalesContracts')
requestAPI(api.saveContractEdit, { requestAPI(api.saveContractEdit, {
data: {...subData} data: {
...subData
}
}).then(res => { }).then(res => {
this.$message({ this.$message({
message: '保存成功!', message: '保存成功!',
......
...@@ -400,7 +400,17 @@ ...@@ -400,7 +400,17 @@
this.$set(this.options, key, res.options[key]) this.$set(this.options, key, res.options[key])
}) })
Object.keys(this.SalesContracts).forEach(item => { Object.keys(this.SalesContracts).forEach(item => {
if (item === 'salesContractPaymentCollectionRemindDates') {
if (res.model[item].length > 0) {
this.SalesContracts[item] = res.model[item] this.SalesContracts[item] = res.model[item]
}
} else if (item === 'serviceContractRemindDates') {
if (res.model[item].length > 0) {
this.SalesContracts[item] = res.model[item]
}
} else {
this.SalesContracts[item] = res.model[item]
}
}) })
Object.keys(this.files).forEach(item => { Object.keys(this.files).forEach(item => {
this.files[item].name = res.model[item].orig_name this.files[item].name = res.model[item].orig_name
......
...@@ -214,6 +214,7 @@ ...@@ -214,6 +214,7 @@
this.getList(true) this.getList(true)
}, },
resetForm () { resetForm () {
this.pagenation.page = 1
this.$refs.clientForm.resetForm() this.$refs.clientForm.resetForm()
Object.keys(this.form).forEach(item => { Object.keys(this.form).forEach(item => {
this.form[item] = '' this.form[item] = ''
......
...@@ -89,6 +89,7 @@ ...@@ -89,6 +89,7 @@
}, },
methods: { methods: {
resetForm () { resetForm () {
this.pagenation.page = 1
Object.keys(this.form).forEach(item => { Object.keys(this.form).forEach(item => {
this.form[item] = '' this.form[item] = ''
}) })
......
...@@ -94,6 +94,7 @@ ...@@ -94,6 +94,7 @@
}, },
methods: { methods: {
resetForm () { resetForm () {
this.pagenation.page = 1
Object.keys(this.form).forEach(item => { Object.keys(this.form).forEach(item => {
this.form[item] = '' this.form[item] = ''
}) })
......
...@@ -89,6 +89,7 @@ ...@@ -89,6 +89,7 @@
}, },
methods: { methods: {
resetForm () { resetForm () {
this.pagenation.page = 1
Object.keys(this.form).forEach(item => { Object.keys(this.form).forEach(item => {
this.form[item] = '' this.form[item] = ''
}) })
......
...@@ -89,6 +89,7 @@ ...@@ -89,6 +89,7 @@
}, },
methods: { methods: {
resetForm () { resetForm () {
this.pagenation.page = 1
Object.keys(this.form).forEach(item => { Object.keys(this.form).forEach(item => {
this.form[item] = '' this.form[item] = ''
}) })
......
...@@ -91,6 +91,7 @@ ...@@ -91,6 +91,7 @@
}, },
methods: { methods: {
resetForm () { resetForm () {
this.pagenation.page = 1
Object.keys(this.form).forEach(item => { Object.keys(this.form).forEach(item => {
this.form[item] = '' this.form[item] = ''
}) })
......
...@@ -99,6 +99,7 @@ ...@@ -99,6 +99,7 @@
}, },
methods: { methods: {
resetForm () { resetForm () {
this.pagenation.page = 1
Object.keys(this.form).forEach(item => { Object.keys(this.form).forEach(item => {
this.form[item] = '' this.form[item] = ''
}) })
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
:item="item" :item="item"
:key="key" :key="key"
@update:image="imgs => {setImage(imgs)}"> @update:image="imgs => {setImage(imgs)}">
<span slot="opearate"> <div slot="opearate">
<el-button class="pull-right" <el-button class="pull-right"
type="primary" type="primary"
size="mini" size="mini"
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
v-if="item.commentCount">{{item.commentCount.comment}}</span> v-if="item.commentCount">{{item.commentCount.comment}}</span>
<i class="fa fa-commenting"></i> 留言 <i class="fa fa-commenting"></i> 留言
</el-button> </el-button>
</span> </div>
</ScheduleItem> </ScheduleItem>
<div v-if="result.list.length === 0"> <div v-if="result.list.length === 0">
<el-card class="box-card"> <el-card class="box-card">
...@@ -256,6 +256,7 @@ ...@@ -256,6 +256,7 @@
this.getList() this.getList()
}, },
resetForm () { resetForm () {
this.pagenation.page = 1
this.$refs.clientForm.resetForm() this.$refs.clientForm.resetForm()
Object.keys(this.form).forEach(item => { Object.keys(this.form).forEach(item => {
this.form[item] = '' this.form[item] = ''
...@@ -266,6 +267,13 @@ ...@@ -266,6 +267,13 @@
Object.assign(this.pagenation, pager) Object.assign(this.pagenation, pager)
this.getList(true) this.getList(true)
}, },
updateList (list) {
list.forEach(item => {
item.budget = item.budget.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$& ')
})
console.log(list)
return list
},
getList (toTop) { getList (toTop) {
if (this.loading) { if (this.loading) {
return return
...@@ -277,7 +285,7 @@ ...@@ -277,7 +285,7 @@
page: this.pagenation.page page: this.pagenation.page
} }
}).then(res => { }).then(res => {
this.result.list = res.list this.result.list = this.updateList(res.list)
// this.pagenation.page = res.pagenation.thispage // this.pagenation.page = res.pagenation.thispage
this.totalcount = res.pagenation.totalcount this.totalcount = res.pagenation.totalcount
// this.totalcount = 8 // this.totalcount = 8
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
</el-form> </el-form>
<el-form ref="clientTimeRange" :model="clientTimeRange" size="mini"> <el-form ref="clientTimeRange" :model="clientTimeRange" size="mini">
<el-col :span="8" :offset="8" :xs="{span: 24, offset: 0}" class="form-content-time-range"> <el-col :span="8" :offset="8" :xs="{span: 24, offset: 0}" class="form-content-time-range">
<el-form-item label-width="0"> <el-form-item label-width="0" class="pull-right">
<el-date-picker <el-date-picker
size="mini" size="mini"
v-model="clientTimeRange.from" v-model="clientTimeRange.from"
...@@ -249,7 +249,7 @@ ...@@ -249,7 +249,7 @@
</style> </style>
<style> <style>
.form-content .el-form-item__label { .form-content .el-form-item__label {
font-size: .875rem; font-size: 12px;
font-weight: normal; font-weight: normal;
padding: 0 2px 0 0; padding: 0 2px 0 0;
} }
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
{{item.budget}} {{item.budget}}
</el-col> </el-col>
<el-col :span="6" :xs="24"> <el-col :span="6" :xs="24">
利润率: {{item.profit_pct}} 利润率: {{item.profit_pct}}%
</el-col> </el-col>
<el-col :span="6" :xs="24"> <el-col :span="6" :xs="24">
销售预测: {{Object.keys(item.salesForecast).length === 0 ? noneText : item.salesForecast.name}} 销售预测: {{Object.keys(item.salesForecast).length === 0 ? noneText : item.salesForecast.name}}
...@@ -94,12 +94,12 @@ ...@@ -94,12 +94,12 @@
<span v-html="setBr(item.description)"></span> <span v-html="setBr(item.description)"></span>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="10"> <el-row :gutter="10" style="display: flex;flex-wrap: wrap;">
<el-col :span="12" :xs="24"> <el-col :span="12" :xs="24" style="flex: 0 0 50%;">
<span class="border border-danger text-danger rounded px-1">商机批注</span>: <span class="border border-danger text-danger rounded px-1">商机批注</span>:
<span v-html="setBr(item.comment)"></span> <span v-html="setBr(item.comment)"></span>
</el-col> </el-col>
<el-col :span="12" :xs="24"> <el-col :span="12" :xs="24" style="flex: 0 0 50%;" class="d-flex align-items-end justify-content-end">
<slot name="opearate"> <slot name="opearate">
</slot> </slot>
</el-col> </el-col>
...@@ -320,5 +320,17 @@ ...@@ -320,5 +320,17 @@
color: red; color: red;
} }
} }
.d-flex {
display: -ms-flexbox!important;
display: flex!important;
}
.justify-content-end {
-ms-flex-pack: end!important;
justify-content: flex-end!important;
}
.align-items-end {
-ms-flex-align: end!important;
align-items: flex-end!important;
}
</style> </style>
<template>
<section class="result-rating">
<el-table
:data="tableList"
border
stripe
style="width: 100%">
<el-table-column
type="index"
label="名次"
align="center"
width="70">
</el-table-column>
<el-table-column
prop="name"
align="center"
label="被投票人">
</el-table-column>
<el-table-column
prop="address"
align="center"
label="部门">
<template slot="header" slot-scope="scope">
<div>部门</div>
<el-select v-model="department" size="mini" placeholder="请选择">
<el-option
v-for="item in departmentData"
:key="item.key"
:label="item.name"
:value="item.key">
</el-option>
</el-select>
</template>
<template slot-scope="scope">{{scope.row.department}}</template>
</el-table-column>
<el-table-column
prop="address"
align="center"
label="职位">
<template slot="header" slot-scope="scope">
<div>职位</div>
<el-select v-model="departmentPosition" size="mini" placeholder="请选择">
<el-option
v-for="item in departmentPositionData"
:key="item.key"
:label="item.name"
:value="item.key">
</el-option>
</el-select>
</template>
<template slot-scope="scope">{{scope.row.department_position }}</template>
</el-table-column>
<el-table-column
prop="score"
align="center"
label="分数">
<template slot-scope="scope">{{scope.row.result[0].score}}</template>
</el-table-column>
<el-table-column
prop="address"
align="center"
label="各维度平均分数">
<template slot-scope="scope">{{scope.row.result[0].dimension}}</template>
</el-table-column>
</el-table>
</section>
</template>
<script>
import {
requestAPI,
api
} from '@/lib/commonMixin'
export default {
name: '',
data () {
return {
department: '',
departmentPosition: '',
departmentData: [],
departmentPositionData: [],
tableList: []
}
},
methods: {
init (id) {
requestAPI(api.getRatingVoteFilter).then(res => {
this.departmentData = res[0].value
res[0].value.forEach(item => {
// console.log(item)
this.departmentPositionData = this.departmentPositionData.concat(item.departmentPositions)
})
}).finally(() => {
requestAPI(api.getRatingResult, {
data: {
id
}
}).then(res => {
this.tableList = res.list
})
})
},
reset () {
this.departmentData = []
this.departmentPositionData = []
}
},
created () {
}
}
</script>
<style>
.result-rating th{
color: #212529;
}
.result-rating .cell{
font-size: 12px;
}
.result-rating .el-select, .result-rating .el-input{
padding: 0;
}
.result-rating .el-table td, .result-rating .el-table th{
padding: 10px;
vertical-align: top;
}
.result-rating .el-table th div{
line-height: 20px;
display: block;
}
</style>
<template>
<section class="result-vote">
<el-table
:data="tableList"
border
stripe
style="width: 100%">
<el-table-column
align="center"
label="名次"
type="index"
width="70">
</el-table-column>
<el-table-column
align="center"
prop="title"
label="标题">
</el-table-column>
<el-table-column
align="center"
label="票数">
<template slot-scope="scope">
<el-progress :percentage="(parseFloat(scope.row.count) / count) * 100" :text-inside="true" :stroke-width="18">
</el-progress>
</template>
</el-table-column>
</el-table>
</section>
</template>
<script>
import {
requestAPI,
api
} from '@/lib/commonMixin'
export default {
name: '',
data () {
return {
tableList: [],
count: 0
}
},
methods: {
init (id) {
this.tableList = []
this.count = 0
requestAPI(api.getRatingVoteResult, {
data: {
id
}
}).then(res => {
this.tableList = res.list
res.list.forEach(item => {
this.count += parseFloat(item.count)
})
})
},
reset () {
this.tableList = []
this.count = 0
}
},
created () {
}
}
</script>
<style>
.result-vote th {
color: #212529;
}
.result-vote .cell{
font-size: 12px;
}
.result-vote .el-table td, .result-vote .el-table th{
padding: 10px;
}
</style>
<template>
<section>
<div class="content">
<client-header ref="clientHeader"
title="评测投票"
:title-span="6"
:model="form"
type="keyword"
button-title="新建评测投票 "
:reset-form="resetForm"
:create-disabled="createDisabled"
:add-new-user="addNewRating"></client-header>
<div class="page-body-content">
<div v-loading="loading">
<ScheduleItem
v-for="(item, key) in result.list"
:item="item"
:key="key"
@update:toRatingDetail="item => {toDetail(item)}"
@update:toVote="item => {toVote(item)}">
<span slot="opearate">
<el-button class="pull-right"
type="primary"
size="mini"
:disabled="!item.can_delete"
@click="delRating(item.id)">
<i class="fa fa-trash-o faa-shake"></i> 删除
</el-button>
<el-button class="pull-right"
type="primary"
size="mini"
:disabled="!item.can_stop"
@click="stopRating(item.id)">
<i class="fa fa-fw fa-clock-o"></i> 停止
</el-button>
<el-button class="pull-right"
type="primary"
size="mini"
:disabled="!item.can_update"
@click.prevent.stop="editRating(item)">
<i class="fa fa-edit"></i> 编辑
</el-button>
<el-button class="pull-right"
type="primary"
size="mini" v-show="item.can_stop"
@click.prevent.stop="statusRating(item)">
<i class="fa fa-fw fa-asl-interpreting"></i> 投票情况
</el-button>
<el-button class="pull-right"
type="primary"
size="mini" v-show="item.can_progress"
@click.prevent.stop="voteRating(item)">
<i class="fa fa-fw fa-tag"></i> 投票
</el-button>
</span>
</ScheduleItem>
<div v-if="result.list.length === 0">
<el-card class="box-card">
未查询到数据!
</el-card>
</div>
</div>
<Pagenation
@update:pager="pager => {updatePage(pager)}"
:pager.sync="pagenation"
:total="totalcount">
</Pagenation>
</div>
</div>
<side-popup ref="sidePopup" :title="operationTitle" v-click-outside="popupClose">
<component :is="operationPage" :ref="operationPage" @close="getList => {close(getList)}"></component>
</side-popup>
</section>
</template>
<script>
import clientHeader from '../common/clientHeader'
import Pagenation from '../common/schedulePagenation'
import ScheduleItem from './scheduleItem'
import clickOutside from '@/lib/bind'
import progressRating from './progress/progressRatingTable'
import resultRating from './detailRating/resultRating'
import resultVote from './detailRating/resultVote'
import vote from './vote/vote'
import voteRating from './vote/voteRating'
import addVote from './operatinoRating/addVote'
import operation from './operatinoRating/operation'
import operationVote from './operatinoRating/operationVote'
import {
requestAPI,
api
} from '@/lib/commonMixin'
export default {
name: '',
components: {
clientHeader,
Pagenation,
ScheduleItem,
progressRating,
resultRating,
resultVote,
vote,
voteRating,
addVote,
operation,
operationVote
},
directives: {
clickOutside
},
data () {
return {
operationPage: '',
operationTitle: '',
result: {
list: []
},
form: {},
pagenation: {
page: 1
},
totalcount: 0,
loading: false,
createDisabled: true
}
},
methods: {
toVote (item) {
this.voteRating(item)
},
toDetail (row) {
if (row.rating_type === 1) {
// 跳转到测评
this.operationPage = 'resultRating'
this.operationTitle = row.title
// this.$router.push({name: 'editProject', params: {id: row.id}})
this.$nextTick(() => {
this.$refs.sidePopup.show(this.$refs[this.operationPage].init(row.id))
})
} else if (row.rating_type === 2) {
// 跳转到投票
this.operationPage = 'resultVote'
this.operationTitle = row.title
// this.$router.push({name: 'editProject', params: {id: row.id}})
this.$nextTick(() => {
this.$refs.sidePopup.show(this.$refs[this.operationPage].init(row.id))
})
}
},
close (getList) {
this.$refs.sidePopup &&
this.$refs.sidePopup.close()
if (getList) {
this.getList()
}
},
popupClose () {
this.$refs.sidePopup &&
this.$refs.sidePopup.close()
this.$refs[this.operationPage].reset && this.$refs[this.operationPage].reset()
},
resetForm () {
this.pagenation.page = 1
this.getList()
},
addNewRating () {
this.operationPage = 'addVote'
this.operationTitle = '评测投票'
// this.$router.push({name: 'editProject', params: {id: row.id}})
this.$nextTick(() => {
this.$refs.sidePopup.show(this.$refs[this.operationPage].init())
})
},
editRating (row) {
if (row.rating_type === 1) {
this.operationPage = 'operation'
this.operationTitle = '评测投票'
// this.$router.push({name: 'editProject', params: {id: row.id}})
this.$nextTick(() => {
this.$refs.sidePopup.show(this.$refs[this.operationPage].initEdit(row.id))
})
} else {
this.operationPage = 'operationVote'
this.operationTitle = '评测投票'
// this.$router.push({name: 'editProject', params: {id: row.id}})
this.$nextTick(() => {
this.$refs.sidePopup.show(this.$refs[this.operationPage].initEdit(row.id))
})
}
// this.operationPage = 'operation'
},
delRating (id) {
this.$confirm('确认删除吗?', '提示').then(() => {
requestAPI(api.delRatingVote, {
data: {
id
}
}).then(res => {
this.$message({
type: 'success',
message: '删除成功!'
})
this.getList()
})
}).catch(_ => {})
},
stopRating (id) {
this.$confirm('确认停止吗?', '提示').then(() => {
requestAPI(api.stopRatingVote, {
data: {
id
}
}).then(res => {
this.$message({
type: 'success',
message: '停止成功!'
})
this.getList()
})
}).catch(_ => {})
},
statusRating (row) {
this.operationPage = 'progressRating'
this.operationTitle = '投票情况(' + row.title + ')'
// this.$router.push({name: 'editProject', params: {id: row.id}})
this.$nextTick(() => {
this.$refs.sidePopup.show(this.$refs[this.operationPage].init(row.id))
})
},
voteRating (row) {
if (row.rating_type === 1) {
// 跳转到测评
this.operationPage = 'voteRating'
this.operationTitle = '投票(' + row.title + ')'
// this.$router.push({name: 'editProject', params: {id: row.id}})
this.$nextTick(() => {
this.$refs.sidePopup.show(this.$refs[this.operationPage].init(row.id))
})
} else if (row.rating_type === 2) {
// 跳转到投票
this.operationPage = 'vote'
this.operationTitle = '评测投票(' + row.title + ')'
// this.$router.push({name: 'editProject', params: {id: row.id}})
this.$nextTick(() => {
this.$refs.sidePopup.show(this.$refs[this.operationPage].init(row.id))
})
}
},
updatePage (pager) {
Object.assign(this.pagenation, pager)
this.getList(true)
},
getList (toTop) {
if (this.loading) {
return
}
this.loading = true
requestAPI(api.getRatingList, {
data: {
...this.form,
page: this.pagenation.page
}
}).then(res => {
this.result.list = res.list
// this.pagenation.page = res.pagenation.thispage
this.totalcount = res.pagenation.totalcount
// this.totalcount = 8
if (toTop) {
this.$el.querySelector('.page-body-content').scrollTo(0, 0)
}
this.createDisabled = !res.can_create
}).finally(_ => {
this.loading = false
})
}
},
created () {
this.getList()
}
}
</script>
<style scoped lang="scss">
@include c('schedule-right') {
> .el-row {
> .el-col {
margin-bottom: 4px;
.el-button {
margin: 0 2px;
padding: 7px;
}
.date-time {
color: #649FD7;
}
}
}
.badge {
border-radius: 2px;
color: #333744;
background: #ffffff;
vertical-align: baseline;
display: inline;
padding: 2px 6px;
}
span.badge-unread {
&:hover {
border-color: #de321d
}
color: #fff;
background-color: #e54c3a;
border-color: #a32516
}
}
</style>
<template>
<section>
<el-row :gutter="10">
<el-col :span="24" class="nav-btn-content">
<el-button :type="setRatingType()" :class="setRatingClass()" size="mini" @click="goToRating">新建评测</el-button>
<el-button :type="setVoteType()" :class="setVoteClass()" size="mini" @click="goToVote">新建投票</el-button>
</el-col>
<el-col :span="24">
<component :is="operationPage" :ref="operationPage"></component>
</el-col>
</el-row>
</section>
</template>
<script>
import operation from './operation'
import operationVote from './operationVote'
export default {
name: '',
components: {
operation,
operationVote
},
data () {
return {
activeName: 'rating',
activeClass: ['disabled', 'btn-info'],
operationPage: 'operation'
}
},
methods: {
handleClick () {
},
init () {
this.$refs[this.operationPage].init()
},
goToRating () {
if (this.activeName === 'rating') {
return
}
this.activeName = 'rating'
this.operationPage = 'operation'
this.$nextTick(() => {
this.$refs[this.operationPage].init()
})
},
goToVote () {
if (this.activeName === 'vote') {
return
}
this.activeName = 'vote'
this.operationPage = 'operationVote'
this.$nextTick(() => {
this.$refs[this.operationPage].init()
})
},
setRatingType () {
return this.activeName === 'rating' ? 'info' : 'primary'
},
setVoteType () {
return this.activeName === 'vote' ? 'info' : 'primary'
},
setRatingClass () {
return this.activeName === 'rating' ? this.activeClass : ''
},
setVoteClass () {
return this.activeName === 'vote' ? this.activeClass : ''
}
},
created () {
}
}
</script>
<style scoped>
.btn-info.disabled {
color: #fff;
background-color: #17a2b8;
border-color: #17a2b8;
}
.nav-btn-content{
background: #7e858d;
padding: 5px;
border-radius: 5px;
}
</style>
<style lang="scss">
.auto-template-form {
.el-form-item {
margin-bottom: 15px;
}
.client-label {
position: relative;
font-size: 12px;
}
.client-label span {
padding-right: 10px;
}
.client-label.required:after {
content: "*";
color: #eb7567;
position: absolute;
top: 3px;
right: 6px;
}
.el-form-item__error {
position: static;
}
}
</style>
<template>
<div>
</div>
</template>
<script>
// 评测编辑
export default {
name: '',
data () {
return {}
},
methods: {},
created () {
}
}
</script>
<style scoped>
</style>
<template>
<div>
</div>
</template>
<script>
// 投票编辑
export default {
name: '',
data () {
return {}
},
methods: {},
created () {
}
}
</script>
<style scoped>
</style>
<template>
<div class="rating-add-form auto-template-form">
<el-form ref="form" :model="Ratings">
<el-form-item :show-message="false" :error="setError('title')">
<single-input
label="标题"
:required="true"
:form-item="Ratings.title"
@update:item="val => {Ratings.title = val}">
<span slot="formError" class="el-form-item__error">
{{errorData['title']}}
</span>
</single-input>
</el-form-item>
<el-form-item :show-message="false" :error="setError('strategy_id')">
<single-select
:form-item="Ratings.strategy_id"
label="评测模板"
:required="true"
:options-list="getOptions('strategy_id')"
@update:item="val => {Ratings.strategy_id = val}">
<span slot="formError" class="el-form-item__error">
{{errorData['strategy_id']}}
</span>
</single-select>
</el-form-item>
<el-form-item :show-message="false" :error="setError('open_from')">
<single-date-time-picker
:form-time-item="Ratings.open_from"
label="投票开启时间"
:required="true"
:picker-options="pickerOption"
@update:item="val => {Ratings.open_from = val}">
<span slot="formError" class="el-form-item__error">
{{errorData['open_from']}}
</span>
</single-date-time-picker>
</el-form-item>
<el-form-item :show-message="false" :error="setError('close_at')">
<single-date-time-picker
:form-time-item="Ratings.close_at"
label="投票关闭时间"
:required="true"
:picker-options="pickerOption"
@update:item="val => {Ratings.close_at = val}">
<span slot="formError" class="el-form-item__error">
{{errorData['close_at']}}
</span>
</single-date-time-picker>
</el-form-item>
<el-form-item :show-message="false" :error="setError('voterUsers')">
<multiple-check-group
:check-group-form-item="Ratings.voterUsers"
label="评价人"
:check-group-options-list="getOptions('Ratings[voterDepartments]')"
@update:item="val => {Ratings.voterUsers = val}"
@update:group="val => {Ratings.voterDepartments = val}">
<span slot="formError" class="el-form-item__error">
{{errorData['voterUsers']}}
</span>
</multiple-check-group>
</el-form-item>
<el-form-item :show-message="false" :error="setError('candidateUsers')">
<multiple-check-group
:check-group-form-item="Ratings.candidateUsers"
label="被评价人"
:check-group-options-list="getOptions('Ratings[candidateDepartments]')"
@update:item="val => {Ratings.candidateUsers = val}"
@update:group="val => {Ratings.candidateDepartments = val}">
<span slot="formError" class="el-form-item__error">
{{errorData['candidateUsers']}}
</span>
</multiple-check-group>
</el-form-item>
<el-form-item>
<el-row :gutter="10">
<el-col :offset="4" :span="14">
<el-button type="primary" @click="saveRating" size="mini">保存</el-button>
<el-button @click="close()" size="mini">关闭</el-button>
<!--<el-button type="primary" @click="test">测试</el-button>-->
</el-col>
</el-row>
</el-form-item>
</el-form>
</div>
</template>
<script>
// 评测表单
import {
requestAPI,
api
} from '@/lib/commonMixin'
import operationMixins from '../../../lib/operationMixins'
import {setModule} from '../../../lib/viewHelper'
export default {
name: '',
mixins: [operationMixins],
data () {
return {
Ratings: {
title: '', // 投票
open_from: '', // 开始时间
close_at: '', // 关闭时间
strategy_id: '', // 评测模板
voterDepartments: [], // 投票部门
voterUsers: [], // 投票人
candidateDepartments: [], // 被投票部门
candidateUsers: [] // 被投票人
},
pickerOption: {
disabledDate (time) {
return time.getTime() < Date.now() - 8.64e7
}
},
options: {
'Ratings[candidateDepartments]': {
value: []
},
'Ratings[voterDepartments]': {
value: []
}
},
optionsKey: 'Ratings',
errorData: {}
}
},
methods: {
saveRating () {
let subData = setModule(this.Ratings, 'Ratings')
requestAPI(api.saveRatingNew, {
data: {...subData}
}).then(res => {
this.$message({
message: '保存成功!',
type: 'success'
})
this.close(true)
})
},
setError (error) {
return this.errorData[error] ? this.errorData[error] : ''
},
getOptions (key) {
let option = {}
if (key.indexOf('[') !== -1 && key.indexOf(']') !== -1) {
option = this.options[key]
} else {
option = this.options[this.optionsKey + '[' + key + ']']
}
if (option) {
return option.value
}
return []
},
close (getList) {
this.$emit('close', getList)
},
init () {
requestAPI(api.getRatingNew).then(res => {
Object.keys(res.options).forEach(key => {
this.$set(this.options, key, res.options[key])
})
})
},
initEdit (id) {
requestAPI(api.getRatingEdit, {
data: {
id
}
}).then(res => {
Object.keys(res.options).forEach(key => {
this.$set(this.options, key, res.options[key])
})
this.$nextTick(() => {
Object.keys(this.Ratings).forEach(item => {
this.Ratings[item] = res.model[item]
})
})
})
}
},
created () {
}
}
</script>
<style lang="scss">
.auto-template-form {
margin-top: 16px;
.el-form-item {
margin-bottom: 15px;
}
.client-label {
position: relative;
font-size: 12px;
}
.client-label span {
padding-right: 10px;
}
.client-label.required:after {
content: "*";
color: #eb7567;
position: absolute;
top: 3px;
right: 6px;
}
.el-form-item__error {
position: static;
}
}
</style>
<template>
<div class="rating-add-form auto-template-form">
<el-form ref="form" :model="Ratings">
<el-form-item :show-message="false" :error="setError('title')">
<single-input
label="标题"
:required="true"
:form-item="Ratings.title"
@update:item="val => {Ratings.title = val}">
<span slot="formError" class="el-form-item__error">
{{errorData['title']}}
</span>
</single-input>
</el-form-item>
<el-form-item :show-message="false" :error="setError('voteOptions')">
<multiple-input
label="选项"
:required="true"
:form-item="Ratings.voteOptions"
multiple-key="name"
:min-item="2"
@update:item="val => {Ratings.voteOptions = val}">
<span slot="formError" class="el-form-item__error">
{{errorData['voteOptions']}}
</span>
</multiple-input>
</el-form-item>
<el-form-item :show-message="false" :error="setError('choice')">
<!--clientFrom-->
<single-radio
:form-item="Ratings.choice"
label="是否多选"
:required="true"
:options-list="getOptions('choice')"
@update:item="val => {Ratings.choice = val}">
<span slot="formError" class="el-form-item__error">
{{errorData['choice']}}
</span>
</single-radio>
</el-form-item>
<el-form-item :show-message="false" :error="setError('open_from')">
<single-date-time-picker
:form-time-item="Ratings.open_from"
label="投票开启时间"
:required="true"
:picker-options="pickerOption"
@update:item="val => {Ratings.open_from = val}">
<span slot="formError" class="el-form-item__error">
{{errorData['open_from']}}
</span>
</single-date-time-picker>
</el-form-item>
<el-form-item :show-message="false" :error="setError('close_at')">
<single-date-time-picker
:form-time-item="Ratings.close_at"
label="投票关闭时间"
:required="true"
:picker-options="pickerOption"
@update:item="val => {Ratings.close_at = val}">
<span slot="formError" class="el-form-item__error">
{{errorData['close_at']}}
</span>
</single-date-time-picker>
</el-form-item>
<el-form-item :show-message="false" :error="setError('voterUsers')">
<multiple-check-group
:check-group-form-item="Ratings.voterUsers"
:check-group-form-group="Ratings.voterDepartments"
label="评价人"
:check-group-options-list="getOptions('Ratings[voterDepartments]')"
@update:item="val => {Ratings.voterUsers = val}"
@update:group="val => {Ratings.voterDepartments = val}">
<span slot="formError" class="el-form-item__error">
{{errorData['voterUsers']}}
</span>
</multiple-check-group>
</el-form-item>
<el-form-item>
<el-row :gutter="10">
<el-col :offset="4" :span="14">
<el-button type="primary" @click="saveRating" size="mini">保存</el-button>
<el-button @click="close()" size="mini">关闭</el-button>
<!--<el-button type="primary" @click="test">测试</el-button>-->
</el-col>
</el-row>
</el-form-item>
</el-form>
</div>
</template>
<script>
// 投票表单
import {
requestAPI,
api
} from '@/lib/commonMixin'
import operationMixins from '../../../lib/operationMixins'
import {setModule} from '../../../lib/viewHelper'
import deepCopy from '../../../lib/deepCopy'
export default {
name: '',
mixins: [operationMixins],
data () {
return {
Ratings: {
title: '', // 标题
open_from: '', // 开始时间
choice: 0, // 是否多选
close_at: '', // 关闭时间
voterDepartments: [], // 投票部门
voterUsers: [], // 投票人
voteOptions: [
{
key: 'new',
name: '是'
},
{
key: 'new',
name: '否'
}
] // 选项
},
pickerOption: {
disabledDate (time) {
return time.getTime() < Date.now() - 8.64e7
}
},
options: {
'Ratings[choice]': {
value: [
{
name: '否',
key: 0
},
{
name: '是',
key: 1
}
]
}
},
optionsKey: 'Ratings',
errorData: {}
}
},
methods: {
saveRating () {
let ratings = deepCopy(this.Ratings)
ratings.voteOptions = ratings.voteOptions.map(i => {
return {key: i.key ? i.key : 'new', name: i.name}
})
let subData = setModule(ratings, 'Ratings')
requestAPI(api.saveRatingVoteNew, {
data: {...subData}
}).then(res => {
this.$message({
message: '保存成功!',
type: 'success'
})
this.close(true)
})
},
setError (error) {
return this.errorData[error] ? this.errorData[error] : ''
},
getOptions (key) {
let option = {}
if (key.indexOf('[') !== -1 && key.indexOf(']') !== -1) {
option = this.options[key]
} else {
option = this.options[this.optionsKey + '[' + key + ']']
}
if (option) {
return option.value
}
return []
},
close (getList) {
this.$emit('close', getList)
},
init () {
requestAPI(api.getRatingVoteNew).then(res => {
Object.keys(res.options).forEach(key => {
this.$set(this.options, key, res.options[key])
})
})
},
initEdit (id) {
requestAPI(api.getRatingVoteEdit, {
data: {
id
}
}).then(res => {
console.log(res)
Object.keys(res.options).forEach(key => {
this.$set(this.options, key, res.options[key])
})
this.$nextTick(() => {
Object.keys(this.Ratings).forEach(item => {
this.Ratings[item] = res.model[item]
})
})
})
}
},
created () {
}
}
</script>
<style lang="scss">
.auto-template-form {
.el-form-item {
margin-bottom: 15px;
}
.client-label {
position: relative;
font-size: 12px;
}
.client-label span {
padding-right: 10px;
}
.client-label.required:after {
content: "*";
color: #eb7567;
position: absolute;
top: 3px;
right: 6px;
}
.el-form-item__error {
position: static;
}
}
</style>
<template>
<section class="rating-progress">
<el-table
class="rating-table"
:data="tableList"
border
stripe
style="width: 100%">
<el-table-column
align="center"
prop="name"
label="员工姓名">
</el-table-column>
<el-table-column
align="center"
label="部门">
<template slot-scope="scope">{{scope.row.department.name}}</template>
</el-table-column>
<el-table-column
align="center"
label="职位">
<template slot-scope="scope">{{scope.row.departmentPosition.name}}</template>
</el-table-column>
<el-table-column
align="center"
label="已投票">
<template slot-scope="scope">
<i :class="['fa', 'fa-fw', 'fa-check-circle', 'vote-status', scope.row.completed ? 'voted' : 'disabled']"></i>
</template>
</el-table-column>
</el-table>
</section>
</template>
<script>
import {
requestAPI,
api
} from '@/lib/commonMixin'
export default {
name: '',
data () {
return {
tableList: []
}
},
methods: {
init (id) {
requestAPI(api.getRatingProgress, {
data: {
id
}
}).then(res => {
this.tableList = res.list
})
}
},
created () {
}
}
</script>
<style scoped>
.rating-table .fa.vote-status.voted {
color: #89c541;
}
</style>
<style>
.rating-table th {
color: #212529;
}
.rating-progress .cell{
font-size: 12px;
}
.rating-progress .el-table td, .rating-progress .el-table th{
padding: 10px;
}
</style>
<template>
<section class="client-schedule-item">
<el-row class="client-schedule-row">
<el-col :span="4" :xs="24" class="client-schedule-left" :style="{'background-color': item.bgcolor}">
<el-row :gutter="10">
<el-col :span="24" class="entity-name">
<span style="cursor: pointer;" @click.prevent.stop="goToDetail(item)">{{ item.title }}</span>
</el-col>
</el-row>
</el-col>
<el-col :span="20" :xs="24" class="client-schedule-right">
<el-row :gutter="10">
<el-col :span="6" :xs="24">
状态:
<span>{{item.rating_status_display}}</span>
</el-col>
<el-col :span="6" :xs="24">
类型:
<span class="border border-info text-info rounded px-1">{{item.rating_type_display}}</span>
</el-col>
<el-col :span="6" :xs="24">
投票开启:
<span>{{item.open_from}}</span>
</el-col>
<el-col :span="6" :xs="24">
投票关闭:
<span>{{item.close_at}}</span>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="12" :xs="24" :offset="12">
<slot name="opearate">
</slot>
</el-col>
</el-row>
</el-col>
</el-row>
</section>
</template>
<script>
export default {
name: 'scheduleItem',
props: {
item: Object
},
data () {
return {
noneText: '(未设置)',
sexs: {
'F': '女',
'M': '男'
}
}
},
methods: {
goToDetail (item) {
if (item.can_result) {
this.$emit('update:toRatingDetail', item)
} else {
this.$emit('update:toVote', item)
}
},
showProject (project) {
this.$emit('update:showProject', project)
},
splitFileName (text) {
var pattern = /\.{1}[a-z]{1,}$/
if (pattern.exec(text) !== null) {
return (text.slice(0, pattern.exec(text).index))
} else {
return text
}
},
getScanUrl (item, key) {
let names = item[key].name.split('/')
let name = names[names.length - 1]
return '/attachment/view?name=' + this.splitFileName(name)
},
setBr (text) {
if (text === '') {
return this.noneText
} else {
return text.replace(/\n/g, '<br />')
}
}
},
computed: {
isNullClient () {
return !this.item.client
},
isPublic () {
return !!this.item.is_public
}
},
mounted () {
}
}
</script>
<style scoped lang="scss">
.text-info {
color: #17a2b8 !important;
}
.border-info {
border-color: #17a2b8 !important;
}
.colRed {
color: red;
border: 1px solid red;
}
.colGreen {
color: green;
border: 1px solid green;
}
.colRed, .colGreen, .col {
border-radius: .25rem;
padding: 0 .25rem;
}
.rounded-circle {
border-radius: 50% !important;
}
.user-avatar {
width: 16px;
max-width: 16px;
height: 16px;
max-height: 16px;
}
@include c('schedule-item') {
margin-bottom: 10px;
font-size: 12px;
.border {
border: 1px solid #dee2e6;
}
.border-success {
border-color: #28a745 !important;
}
.border-danger {
border-color: #dc3545;
}
.text-success {
color: #28a745 !important;
}
.text-danger {
color: #E45744;
}
.rounded {
border-radius: .25rem !important;
}
.px-1 {
padding: 0 .25rem;
}
}
@include c('schedule-item:first-child') {
.client-schedule-left {
border-radius: 5px 0 0 0;
}
}
@include c('schedule-row') {
background-color: white;
display: flex;
flex-wrap: wrap;
}
@include c('schedule-left') {
background-color: #FF6A6A;
min-height: 100%;
padding: 10px 15px 6px;
.fa-fw {
width: 1.28571429em;
}
> .el-row {
> .el-col {
margin-bottom: 4px;
}
}
.el-row div:first-child, .el-row div:first-child a, .entity-name, .entity-name a {
color: white;
}
.entity-name .black {
color: #000000;
}
span {
display: inline-block;
padding-left: 3px;
}
span.np {
padding-left: 0;
}
@include e('private') {
display: inline-block;
// border: 1px solid black;
padding-right: 5px;
border-radius: 5px;
width: 40px;
height: 20px;
}
}
@include c('schedule-right') {
height: 100%;
padding: 10px 15px 6px;
> .el-row {
> .el-col {
margin-bottom: 4px;
.el-button {
margin: 0 2px;
padding: 7px;
}
.date-time, .show-picture {
color: #649FD7;
}
.show-picture {
cursor: pointer;
}
}
}
.badge {
border-radius: 2px;
color: #333744;
background: #ffffff;
vertical-align: baseline;
display: inline;
padding: 2px 6px;
text-align: center;
}
span.badge-unread {
&:hover {
border-color: #de321d
}
color: #fff;
background-color: #e54c3a;
border-color: #a32516
}
@include e('item') {
display: flex;
flex-direction: column;
justify-content: space-around;
padding: 5px 0 5px 5px;
flex: 1;
}
@include e('status') {
color: red;
}
@include e('content') {
display: inline-block;
border: 1px solid red;
border-radius: 5px;
height: 20px;
padding: 0 5px 0 5px;
color: red;
}
}
</style>
<template>
<section class="vote">
</section>
</template>
<script>
import {
requestAPI,
api
} from '@/lib/commonMixin'
import operationMixins from '../../../lib/operationMixins'
export default {
name: '',
mixins: [operationMixins],
data () {
return {}
},
methods: {
init (id) {
requestAPI(api.getRatingVote, {
data: {
id
}
}).then(res => {
console.log(res)
})
}
},
created () {
}
}
</script>
<style scoped>
</style>
<template>
<section class="vote-rating">
<el-table
:data="tableList"
border
stripe
style="width: 100%">
<el-table-column
prop="name"
align="center"
label="员工姓名"
width="120">
</el-table-column>
<el-table-column
prop="address"
align="center"
label="部门"
width="200">
<template slot="header" slot-scope="scope">
<div>部门</div>
<el-select v-model="department" size="mini" placeholder="请选择">
<el-option
v-for="item in departmentData"
:key="item.key"
:label="item.name"
:value="item.key">
</el-option>
</el-select>
</template>
<template slot-scope="scope">
{{scope.row.department.name}}
</template>
</el-table-column>
<el-table-column
prop="address"
align="center"
label="职位"
width="200">
<template slot="header" slot-scope="scope">
<div>职位</div>
<el-select v-model="departmentPosition" size="mini" placeholder="请选择">
<el-option
v-for="item in departmentPositionData"
:key="item.key"
:label="item.name"
:value="item.key">
</el-option>
</el-select>
</template>
<template slot-scope="scope">
{{scope.row.departmentPosition.name}}
</template>
</el-table-column>
<el-table-column
align="center"
label="评测维度">
<template slot-scope="scope">
<el-row :gutter="2">
<el-col :span="12" class="text-right">
<strong>{{scope.row.ratingDimensions[0].name}}</strong>
</el-col>
<el-col :span="12">
<el-rate show-score v-model="scope.row.source" @change="setSource(scope)"></el-rate>
</el-col>
</el-row>
</template>
</el-table-column>
</el-table>
<el-row :gutter="10">
<el-col :span="14" style="padding: 10px;">
<!--<slot name="operationBtn">-->
<!--</slot>-->
<el-button size="small" type="primary" @click="saveVote">提交</el-button>
<el-button size="small" @click="close()">关闭</el-button>
</el-col>
</el-row>
</section>
</template>
<script>
import {
requestAPI,
api
} from '@/lib/commonMixin'
export default {
name: '',
data () {
return {
department: '',
departmentPosition: '',
departmentData: [],
departmentPositionData: [],
tableList: [],
voteId: ''
}
},
methods: {
init (id) {
this.tableList = []
this.voteId = id
requestAPI(api.getRatingVoteFilter).then(res => {
this.departmentData = res[0].value
res[0].value.forEach(item => {
// console.log(item)
this.departmentPositionData = this.departmentPositionData.concat(item.departmentPositions)
})
}).finally(() => {
requestAPI(api.getRating, {
data: {
id
}
}).then(res => {
res.list.forEach(item => {
item.source = parseInt(item.ratingDimensions[0].score)
})
this.tableList = res.list
})
})
},
setSource (scope) {
requestAPI(api.operationRating, {
data: {
id: this.voteId,
dimension_id: scope.row.ratingDimensions[0].key,
voted_for: scope.row.id,
score: scope.row.source
}
}).then(res => {
this.$message({
type: 'success',
message: '评分成功!'
})
}).catch(() => {
this.$message.error('评分失败!')
scope.source = parseInt(scope.row.ratingDimensions[0].source)
})
},
saveVote () {
if (this.tableList.every(i => {
return i.source > 0
})) {
requestAPI(api.saveRatingComplete, {
data: {
id: this.voteId
}
}).then(res => {
this.close(true)
})
} else {
this.$message.error('您还没有完全完成')
}
},
close (getList) {
this.$emit('close', getList)
}
},
created () {
}
}
</script>
<style>
.vote-rating th {
color: #212529;
}
.vote-rating .cell {
font-size: 12px;
}
.vote-rating .el-select, .vote-rating .el-input {
padding: 0;
}
.vote-rating .el-table td, .vote-rating .el-table th {
padding: 10px;
vertical-align: top;
}
.vote-rating .el-table th div {
line-height: 20px;
display: block;
}
</style>
...@@ -216,6 +216,7 @@ ...@@ -216,6 +216,7 @@
}) })
}, },
resetForm () { resetForm () {
this.pagenation.page = 1
this.$refs.clientForm.resetForm() this.$refs.clientForm.resetForm()
Object.keys(this.form).forEach(item => { Object.keys(this.form).forEach(item => {
this.form[item] = '' this.form[item] = ''
......
...@@ -209,7 +209,7 @@ ...@@ -209,7 +209,7 @@
</style> </style>
<style> <style>
.form-content .el-form-item__label { .form-content .el-form-item__label {
font-size: .875rem; font-size: 12px;
font-weight: normal; font-weight: normal;
padding: 0 2px 0 0; padding: 0 2px 0 0;
} }
......
export default function cloneDeep (obj) {
var refFrom = []
var refTo = []
return baseCopy(obj, refFrom, refTo)
}
var toString = Object.prototype.toString
var baseCopy = function (obj, refFrom, refTo) {
var type = toString.call(obj)
if (type === '[object Object]' || type === '[object Array]') {
return copyObj(obj, refFrom, refTo)
} else if (type === '[object Function]') {
return obj
} else if (type === '[object Date]') {
return new obj.constructor(obj)
} else {
return obj
}
}
var copyObj = function (value, refFrom, refTo) {
var copiedValue, idx
var duplicate = false
var len = refFrom.length
for (idx = 0; idx < len; idx++) {
if (value === refFrom[idx]) {
duplicate = true
break
}
}
if (duplicate) {
copiedValue = refTo[idx]
} else {
if (toString.call(value) === '[object Object]') {
copiedValue = {}
} else {
copiedValue = []
}
refFrom.push(value)
refTo.push(copiedValue)
for (var key in value) {
copiedValue[key] = baseCopy(value[key], refFrom, refTo)
}
}
return copiedValue
}
import singleSearchInput from '../components/common/singleSearchInput' import singleSearchInput from '../components/common/singleSearchInput'
import singleInput from '../components/common/singleInput' import singleInput from '../components/common/singleInput'
import multipleInput from '../components/common/multipleInput' import singleSelect from '../components/common/singleSelect'
import singleCalcInput from '../components/common/singleCalcInput' import singleCalcInput from '../components/common/singleCalcInput'
import singleRadio from '../components/common/singleRadio' import singleRadio from '../components/common/singleRadio'
import singleCheckbox from '../components/common/singleCheckbox'
import singleDatePicker from '../components/common/singleDatePicker' import singleDatePicker from '../components/common/singleDatePicker'
import singleUpload from '../components/common/singleUpload'
import multipleDateTimePicker from '../components/common/multipleDateTimePicker'
import singleDateTimePicker from '../components/common/singleDateTimePicker'
import multipleInput from '../components/common/multipleInput'
import multipleEngineer from '../components/common/multipleEngineer' import multipleEngineer from '../components/common/multipleEngineer'
import singleCheckbox from '../components/common/singleCheckbox'
import singleSelect from '../components/common/singleSelect'
import multipleCheckGroup from '../components/common/multipleCheckGroup' import multipleCheckGroup from '../components/common/multipleCheckGroup'
import singleUpload from '../components/common/singleUpload'
import multipleDateInput from '../components/common/multipleDateInput' import multipleDateInput from '../components/common/multipleDateInput'
import multipleDatePicker from '../components/common/multipleDatePicker' import multipleDatePicker from '../components/common/multipleDatePicker'
export default { export default {
...@@ -17,14 +19,16 @@ export default { ...@@ -17,14 +19,16 @@ export default {
singleDatePicker, singleDatePicker,
singleSearchInput, singleSearchInput,
singleInput, singleInput,
multipleInput, singleDateTimePicker,
singleCalcInput,
multipleEngineer,
singleCheckbox, singleCheckbox,
singleCalcInput,
singleSelect, singleSelect,
multipleCheckGroup,
singleUpload, singleUpload,
multipleInput,
multipleEngineer,
multipleCheckGroup,
multipleDateInput, multipleDateInput,
multipleDatePicker multipleDatePicker,
multipleDateTimePicker
} }
} }
...@@ -101,11 +101,19 @@ export default { ...@@ -101,11 +101,19 @@ export default {
setPrependText: '', setPrependText: '',
engineerKey: '', engineerKey: '',
checkGroupFormItem: Array, checkGroupFormItem: Array,
checkGroupFormGroup: Array,
singleSearchDisabled: Boolean, singleSearchDisabled: Boolean,
api: String, api: String,
filterable: { filterable: {
type: Boolean, type: Boolean,
default: false default: false
},
pickerOptions: {
type: Object
},
minItem: {
type: Number,
default: 1
} }
}, },
methods: { methods: {
...@@ -125,12 +133,17 @@ export default { ...@@ -125,12 +133,17 @@ export default {
}) })
}, },
delItem (items, key) { delItem (items, key) {
if (items.length === this.minItem) {
this.$message({
type: 'info',
message: '最少保留' + this.minItem + '项'
})
return
}
items.splice(key, 1) items.splice(key, 1)
}, },
setPerText (index) { setPerText (index) {
if (this.setPrepend) {
return this.setPrepend(index, this.setPrependText) return this.setPrepend(index, this.setPrependText)
}
}, },
updateContribution (sum) { updateContribution (sum) {
this.contribution.forEach(item => { this.contribution.forEach(item => {
...@@ -226,6 +239,7 @@ export default { ...@@ -226,6 +239,7 @@ export default {
conArray = conArray.concat(item.checkItems) conArray = conArray.concat(item.checkItems)
}) })
this.$emit('update:item', Array.from(new Set(conArray))) this.$emit('update:item', Array.from(new Set(conArray)))
this.$emit('update:group', val.filter(i => i.checkItems.length > 0).map(i => i.key))
}, },
deep: true deep: true
} }
......
...@@ -5,6 +5,7 @@ import salesOrder from './routes/salesOrders' ...@@ -5,6 +5,7 @@ import salesOrder from './routes/salesOrders'
import salesContracts from './routes/salesContracts' import salesContracts from './routes/salesContracts'
import products from './routes/products' import products from './routes/products'
import address from './routes/addressBook' import address from './routes/addressBook'
import rating from './routes/rating'
let routes = [] let routes = []
let salesRours = [] let salesRours = []
const appName = 'project' const appName = 'project'
...@@ -27,6 +28,9 @@ let RouterInit = () => { ...@@ -27,6 +28,9 @@ let RouterInit = () => {
portal.createApp('addressBook', {}, app => { portal.createApp('addressBook', {}, app => {
app.mapRoute(address) app.mapRoute(address)
}) })
portal.createApp('rating', {}, app => {
app.mapRoute(rating)
})
} }
export default RouterInit export default RouterInit
import ratingList from '../components/rating/list'
const projectTitle = '金畅逍BMS - '
const routes = [
{
path: '/rating',
name: 'ratingList',
component: ratingList,
meta: {
title: projectTitle + '评测投票'
}
}
]
export default routes
...@@ -13111,6 +13111,9 @@ input[type=file] { ...@@ -13111,6 +13111,9 @@ input[type=file] {
overflow: auto; overflow: auto;
padding: 15px 15px 0; padding: 15px 15px 0;
} }
.page-body-content .text-danger {
color: #dc3545!important;
}
.el-form--label-top .el-form-item__label { .el-form--label-top .el-form-item__label {
line-height: 1.5!important; line-height: 1.5!important;
font-weight: 400; font-weight: 400;
...@@ -13140,9 +13143,21 @@ input[type=file] { ...@@ -13140,9 +13143,21 @@ input[type=file] {
animation: spin 1.5s linear infinite; animation: spin 1.5s linear infinite;
} }
.content .el-button--primary { .content .el-button--primary {
color: #343743!important;
background-color: #fff!important;
border-color: #d6d7d9!important;
}
.content .el-button--primary:hover {
color: #fff!important; color: #fff!important;
background-color: #333744!important; border-color: #52555f!important;
border-color: #282b35!important; background-color: #52555f!important;
}
.content .el-button.is-disabled {
color: #C0C4CC!important;
cursor: not-allowed;
background-image: none;
background-color: #FFF!important;
border-color: #EBEEF5!important;
} }
.content .header-search .fa-fw { .content .header-search .fa-fw {
color: #333744; color: #333744;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment