| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow :title="title" :visible.sync="visible" width="900px" :confirm-working="isWorking" @confirm="confirm"> |
| | | <p class="tip-warn"><i class="el-icon-warning"></i>æéï¼<br> |
| | | 1.é¨ç¦æéé
ç½®æååï¼ææä»»å¡å³è¿å
¥æéä¸åéåï¼å¯åå¾ãäººåææè®°å½ãæ¥çä¸åè¿åº¦;<br> |
| | | 2.妿éè¦æ¸
空å½åéä¸äººåä¸åæéï¼ä»¥ä¸ãå·²éé¨ç¦ç¹åç»ã为空æäº¤å³å¯ã |
| | | </p> |
| | | <p class="tip" v-if="form.names != null">æ£å¨ä¸º<em>ã{{ form.names.map(item => `${item}`).join('ï¼') }}ã</em> é
ç½®é¨ç¦æé</p> |
| | | <el-form :model="form" ref="form" :rules="rules"> |
| | | <el-form-item label="é¨ç¦æææï¼" prop="timeType"> |
| | | <el-radio-group v-model="form.timeType"> |
| | | <el-radio :label="0">é¿æææ</el-radio> |
| | | <el-radio :label="1">èªå®ä¹æ¶é´</el-radio> |
| | | <el-radio :label="2" v-if="companyType === 0">å¹è®æææ</el-radio> |
| | | </el-radio-group> |
| | | <div v-if="form.timeType == 1" style="margin-top: 10px"> |
| | | <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss" |
| | | value-format="yyyy-MM-dd HH:mm:ss" range-separator="è³" start-placeholder="å¼å§æ¥æ" end-placeholder="ç»ææ¥æ"> |
| | | </el-date-picker> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="é¨ç¦ç¹åç»ï¼" prop="roleIds"> |
| | | <el-transfer style="margin-top: 15px;font-size: 12px" :titles="['æªéé¨ç¦ç¹åç»', 'å·²éé¨ç¦ç¹åç»']" filterable |
| | | :filter-method="filterMethod" filter-placeholder="请è¾å
¥é¨ç¦ç¹åç»åç§°" v-model="form.roleIds" class="transfer" |
| | | :data="roles"> |
| | | </el-transfer> |
| | | </el-form-item> |
| | | |
| | | </el-form> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { getDeviceRoleList } from '@/api/business/device' |
| | | export default { |
| | | name: 'OperaDeviceRoleWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalWindow }, |
| | | data() { |
| | | var validateTime = (rule, value, callback) => { |
| | | if (this.form.timeType == null) { |
| | | callback(new Error('è¯·å¡«åæ£ç¡®çé¨ç¦ææææ¶é´')) |
| | | return |
| | | } |
| | | if (this.form.timeType === 1 && (this.form.startTime == null || this.form.endTime == null)) { |
| | | callback(new Error('è¯·å¡«åæ£ç¡®çé¨ç¦ææææ¶é´')) |
| | | return |
| | | } |
| | | callback() |
| | | } |
| | | return { |
| | | // è¡¨åæ°æ® |
| | | time: null, |
| | | companyType: 1, |
| | | form: { |
| | | ids: [], |
| | | names: [], |
| | | timeType: 0, |
| | | roleIds: [], |
| | | status: 1, |
| | | startTime: null, |
| | | endTime: null, |
| | | radio: 0 |
| | | }, |
| | | roles: [], |
| | | rules: { |
| | | // éªè¯è§å |
| | | timeType: [ |
| | | { required: true, validator: validateTime, message: '请éä¸é¨ç¦æææ' } |
| | | ], |
| | | startTime: [ |
| | | { validator: validateTime, trigger: 'blur' } |
| | | ], |
| | | endTime: [ |
| | | { validator: validateTime, trigger: 'blur' } |
| | | ] |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | this.config({ |
| | | api: '/business/member', |
| | | 'field.id': 'id' |
| | | }) |
| | | }, |
| | | methods: { |
| | | filterMethod(query, item) { |
| | | if (!query) return item |
| | | return item.label.indexOf(query) > -1 |
| | | }, |
| | | seleTime(e) { |
| | | if (e && e.length >= 2) { |
| | | this.form.startTime = e[0] |
| | | this.form.endTime = e[1] |
| | | } else { |
| | | this.form.startTime = null |
| | | this.form.endTime = null |
| | | } |
| | | }, |
| | | confirm() { |
| | | this.$refs.form.validate((valid) => { |
| | | if (!valid) { |
| | | return |
| | | } |
| | | if (this.form.roleIds == null || this.form.roleIds.length == 0) { |
| | | this.$dialog.actionConfirm('æéä¸ºç©ºï¼æäº¤å峿¸
餿é人åå·²åé
æéï¼è¯·è°¨æ
æä½', 'æ¨ç¡®è®¤è¿è¡è¯¥æä½åï¼') |
| | | .then(() => { |
| | | this.confirmDo() |
| | | }) |
| | | .catch(() => { }) |
| | | } else { |
| | | this.confirmDo() |
| | | } |
| | | }) |
| | | }, |
| | | confirmDo() { |
| | | // è°ç¨æ°å»ºæ¥å£ |
| | | this.isWorking = true |
| | | this.api.batchRoleAuth({ |
| | | ids: this.form.ids, |
| | | timeType: this.form.timeType, |
| | | startTime: this.form.startTime, |
| | | endTime: this.form.endTime, |
| | | roleIds: this.form.roleIds |
| | | }) |
| | | .then(() => { |
| | | this.visible = false |
| | | this.$tip.apiSuccess('æææåï¼å¯åå¾ãäººåææè®°å½ãæ¥çä¸åè¿åº¦') |
| | | this.$emit('success') |
| | | }) |
| | | .catch(e => { |
| | | // this.$tip.apiFailed(e) |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking = false |
| | | }) |
| | | }, |
| | | // è·åè®¾å¤ |
| | | getLists() { |
| | | getDeviceRoleList({ type: 2 }) |
| | | .then(res => { |
| | | this.roles = res.map(item => { |
| | | return { |
| | | label: item.name, |
| | | area: item.name, |
| | | key: item.id |
| | | } |
| | | }) |
| | | }) |
| | | }, |
| | | open(title, ids, names, companyType) { |
| | | this.roles = [] |
| | | this.getLists() |
| | | this.title = title |
| | | this.visible = true |
| | | this.companyType = companyType |
| | | // æ°å»º |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields() |
| | | this.form[this.configData['field.id']] = null |
| | | this.form.ids = ids |
| | | this.form.names = names |
| | | |
| | | console.log(names) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/style/variables.scss"; |
| | | |
| | | // è§è²é
ç½® |
| | | .global-window { |
| | | .tip { |
| | | em { |
| | | font-style: normal; |
| | | color: $primary-color; |
| | | font-weight: bold; |
| | | } |
| | | } |
| | | |
| | | .tip-warn { |
| | | margin: 4px 0 12px 0; |
| | | font-size: 12px; |
| | | color: #999; |
| | | |
| | | i { |
| | | color: orange; |
| | | margin-right: 4px; |
| | | font-size: 14px; |
| | | position: relative; |
| | | top: 1px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .transfer { |
| | | height: 600px; |
| | | width: 100%; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | |
| | | ::v-deep .el-transfer-panel { |
| | | flex: 1; |
| | | height: 100%; |
| | | } |
| | | |
| | | ::v-deep .el-transfer-panel__body { |
| | | height: 500px; |
| | | } |
| | | |
| | | ::v-deep .el-transfer-panel__list.is-filterable { |
| | | height: 480px; |
| | | } |
| | | } |
| | | </style> |