123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- <template>
- <div class="components-input-demo-presuffix" v-if="avalid">
- <!---->
- <a-input @click="openModal" :placeholder="placeholder" v-model="showText" readOnly :disabled="disabled">
- <a-icon slot="prefix" type="cluster" :title="title"/>
- <a-icon v-if="showText" slot="suffix" type="close-circle" @click="handleEmpty" title="清空"/>
- </a-input>
- <j-popup-onl-report
- ref="jPopupOnlReport"
- :code="code"
- :multi="multi"
- :sorter="sorter"
- :groupId="uniqGroupId"
- :param="param"
- @ok="callBack"
- />
- </div>
- </template>
- <script>
- import JPopupOnlReport from './modal/JPopupOnlReport'
- export default {
- name: 'JPopup',
- components: {
- JPopupOnlReport
- },
- props: {
- code: {
- type: String,
- default: '',
- required: false
- },
- field: {
- type: String,
- default: '',
- required: false
- },
- orgFields: {
- type: String,
- default: '',
- required: false
- },
- destFields: {
- type: String,
- default: '',
- required: false
- },
- /** 排序列,指定要排序的列,使用方式:列名=desc|asc */
- sorter: {
- type: String,
- default: ''
- },
- width: {
- type: Number,
- default: 1200,
- required: false
- },
- placeholder: {
- type: String,
- default: '请选择',
- required: false
- },
- value: {
- type: String,
- required: false
- },
- triggerChange: {
- type: Boolean,
- required: false,
- default: false
- },
- disabled: {
- type: Boolean,
- required: false,
- default: false
- },
- multi: {
- type: Boolean,
- required: false,
- default: false
- },
- //popup动态参数 支持系统变量语法
- param:{
- type: Object,
- required: false,
- default: ()=>{}
- },
- spliter:{
- type: String,
- required: false,
- default: ','
- },
- /** 分组ID,用于将多个popup的请求合并到一起,不传不分组 */
- groupId: String
- },
- data() {
- return {
- showText: '',
- title: '',
- avalid: true
- }
- },
- computed: {
- uniqGroupId() {
- if (this.groupId) {
- let { groupId, code, field, orgFields, destFields } = this
- return `${groupId}_${code}_${field}_${orgFields}_${destFields}`
- }
- }
- },
- watch: {
- value: {
- immediate: true,
- handler: function(val) {
- if (!val) {
- this.showText = ''
- } else {
- this.showText = val.split(this.spliter).join(',')
- }
- }
- }
- },
- created() {
- },
- mounted() {
- if (!this.orgFields || !this.destFields || !this.code) {
- this.$message.error('popup参数未正确配置!')
- this.avalid = false
- }
- if (this.destFields.split(',').length != this.orgFields.split(',').length) {
- this.$message.error('popup参数未正确配置,原始值和目标值数量不一致!')
- this.avalid = false
- }
- },
- methods: {
- openModal() {
- if (this.disabled === false) {
- this.$refs.jPopupOnlReport.show()
- }
- },
- handleEmpty() {
- // 禁用时,不允许清空内容
- if (this.disabled) {
- return
- }
- this.showText = ''
- let destFieldsArr = this.destFields.split(',')
- if (destFieldsArr.length === 0) {
- return
- }
- let res = {}
- for (let i = 0; i < destFieldsArr.length; i++) {
- res[destFieldsArr[i]] = ''
- }
- if (this.triggerChange) {
- this.$emit('callback', res)
- } else {
- this.$emit('input', '', res)
- }
- },
- callBack(rows) {
- // update--begin--autor:lvdandan-----date:20200630------for:多选时未带回多个值------
- let orgFieldsArr = this.orgFields.split(',')
- let destFieldsArr = this.destFields.split(',')
- let resetText = false
- if (this.field && this.field.length > 0) {
- this.showText = ''
- resetText = true
- }
- let res = {}
- if (orgFieldsArr.length > 0) {
- for (let i = 0; i < orgFieldsArr.length; i++) {
- let tempDestArr = []
- for(let rw of rows){
- let val = rw[orgFieldsArr[i]]
- // update--begin--autor:liusq-----date:20210713------for:处理val等于0的情况issues/I3ZL4T------
- if(typeof val=='undefined'|| val==null || val.toString()==""){
- val = ""
- }
- // update--end--autor:liusq-----date:20210713------for:处理val等于0的情况issues/I3ZL4T------
- tempDestArr.push(val)
- }
- res[destFieldsArr[i]] = tempDestArr.join(",")
- }
- if (resetText === true) {
- let tempText = []
- for(let rw of rows){
- let val = rw[orgFieldsArr[destFieldsArr.indexOf(this.field)]]
- if(!val){
- val = ""
- }
- tempText.push(val)
- }
- this.showText = tempText.join(",")
- }
- // update--end--autor:lvdandan-----date:20200630------for:多选时未带回多个值------
- }
- if (this.triggerChange) {
- //v-dec时即triggerChange为true时 将整个对象给form页面 让他自己setFieldsValue
- this.$emit('callback', res)
- } else {
- //v-model时 需要传一个参数field 表示当前这个字段 从而根据这个字段的顺序找到原始值
- // this.$emit("input",row[orgFieldsArr[destFieldsArr.indexOf(this.field)]])
- let str = ''
- if(this.showText){
- str = this.showText.split(',').join(this.spliter)
- }
- this.$emit('input', str, res)
- }
- }
- }
- }
- </script>
- <style scoped>
- .components-input-demo-presuffix .anticon-close-circle {
- cursor: pointer;
- color: #ccc;
- transition: color 0.3s;
- font-size: 12px;
- }
- .components-input-demo-presuffix .anticon-close-circle:hover {
- color: #f5222d;
- }
- .components-input-demo-presuffix .anticon-close-circle:active {
- color: #666;
- }
- </style>
|