| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 | 
							- <template>
 
-   <a-select
 
-     ref="select"
 
-     :value="innerValue"
 
-     allowClear
 
-     :filterOption="handleSelectFilterOption"
 
-     v-bind="selectProps"
 
-     style="width: 100%;"
 
-     @blur="handleBlur"
 
-     @change="handleChange"
 
-     @search="handleSearchSelect"
 
-   >
 
-     <div v-if="loading" slot="notFoundContent">
 
-       <a-icon type="loading"  />
 
-       <span> 加载中…</span>
 
-     </div>
 
-     <template v-for="option of selectOptions">
 
-       <a-select-option :key="option.value" :value="option.value" :disabled="option.disabled">
 
-         <span>{{option.text || option.label || option.title|| option.value}}</span>
 
-       </a-select-option>
 
-     </template>
 
-   </a-select>
 
- </template>
 
- <script>
 
-   import JVxeCellMixins, { dispatchEvent } from '@/components/jeecg/JVxeTable/mixins/JVxeCellMixins'
 
-   import { JVXETypes } from '@comp/jeecg/JVxeTable/index'
 
-   import { filterDictText } from '@comp/dict/JDictSelectUtil'
 
-   export default {
 
-     name: 'JVxeSelectCell',
 
-     mixins: [JVxeCellMixins],
 
-     data(){
 
-       return {
 
-         loading: false,
 
-         // 异步加载的options(用于多级联动)
 
-         asyncOptions: null,
 
-       }
 
-     },
 
-     computed: {
 
-       selectProps() {
 
-         let props = {...this.cellProps}
 
-         // 判断select是否允许输入
 
-         let {allowSearch, allowInput} = this.originColumn
 
-         if (allowInput === true || allowSearch === true) {
 
-           props['showSearch'] = true
 
-         }
 
-         return props
 
-       },
 
-       // 下拉选项
 
-       selectOptions() {
 
-         if (this.asyncOptions) {
 
-           return this.asyncOptions
 
-         }
 
-         let {linkage} = this.renderOptions
 
-         if (linkage) {
 
-           let {getLinkageOptionsSibling, config} = linkage
 
-           let res = getLinkageOptionsSibling(this.row, this.originColumn, config, true)
 
-           // 当返回Promise时,说明是多级联动
 
-           if (res instanceof Promise) {
 
-             this.loading = true
 
-             res.then(opt => {
 
-               this.asyncOptions = opt
 
-               this.loading = false
 
-             }).catch(e => {
 
-               console.error(e)
 
-               this.loading = false
 
-             })
 
-           } else {
 
-             this.asyncOptions = null
 
-             return res
 
-           }
 
-         }
 
-         return this.originColumn.options
 
-       },
 
-     },
 
-     created() {
 
-       let multiple = [JVXETypes.selectMultiple, JVXETypes.list_multi]
 
-       let search = [JVXETypes.selectSearch, JVXETypes.sel_search]
 
-       if (multiple.includes(this.$type)) {
 
-         // 处理多选
 
-         let props = this.originColumn.props || {}
 
-         props['mode'] = 'multiple'
 
-         props['maxTagCount'] = 1
 
-         this.$set(this.originColumn, 'props', props)
 
-       } else if (search.includes(this.$type)) {
 
-         // 处理搜索
 
-         this.$set(this.originColumn, 'allowSearch', true)
 
-       }
 
-     },
 
-     methods: {
 
-       handleChange(value) {
 
-         debugger
 
-         // 处理下级联动
 
-         let linkage = this.renderOptions.linkage
 
-         if (linkage) {
 
-           linkage.linkageSelectChange(this.row, this.originColumn, linkage.config, value)
 
-         }
 
-         this.handleChangeCommon(value)
 
-       },
 
-       /** 处理blur失去焦点事件 */
 
-       handleBlur(value) {
 
-         let {allowInput, options} = this.originColumn
 
-         if (allowInput === true) {
 
-           // 删除无用的因搜索(用户输入)而创建的项
 
-           if (typeof value === 'string') {
 
-             let indexes = []
 
-             options.forEach((option, index) => {
 
-               if (option.value.toLocaleString() === value.toLocaleString()) {
 
-                 delete option.searchAdd
 
-               } else if (option.searchAdd === true) {
 
-                 indexes.push(index)
 
-               }
 
-             })
 
-             // 翻转删除数组中的项
 
-             for (let index of indexes.reverse()) {
 
-               options.splice(index, 1)
 
-             }
 
-           }
 
-         }
 
-         this.handleBlurCommon(value)
 
-       },
 
-       /** 用于搜索下拉框中的内容 */
 
-       handleSelectFilterOption(input, option) {
 
-         let {allowSearch, allowInput} = this.originColumn
 
-         if (allowSearch === true || allowInput === true) {
 
-           //update-begin-author:taoyan date:20200820 for:【专项任务】大连项目反馈行编辑问题处理 下拉框搜索
 
-           return option.componentOptions.children[0].children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
 
-           //update-end-author:taoyan date:20200820 for:【专项任务】大连项目反馈行编辑问题处理 下拉框搜索
 
-         }
 
-         return true
 
-       },
 
-       /** select 搜索时的事件,用于动态添加options */
 
-       handleSearchSelect(value) {
 
-         let {allowSearch, allowInput, options} = this.originColumn
 
-         if (allowSearch !== true && allowInput === true) {
 
-           // 是否找到了对应的项,找不到则添加这一项
 
-           let flag = false
 
-           for (let option of options) {
 
-             if (option.value.toLocaleString() === value.toLocaleString()) {
 
-               flag = true
 
-               break
 
-             }
 
-           }
 
-           // !!value :不添加空值
 
-           if (!flag && !!value) {
 
-             // searchAdd 是否是通过搜索添加的
 
-             options.push({title: value, value: value, searchAdd: true})
 
-           }
 
-         }
 
-       },
 
-     },
 
-     // 【组件增强】注释详见:JVxeCellMixins.js
 
-     enhanced: {
 
-       aopEvents: {
 
-         editActived(event) {
 
-           dispatchEvent.call(this, event, 'ant-select')
 
-         },
 
-       },
 
-       translate: {
 
-         enabled: true,
 
-         async handler(value,) {
 
-           let options
 
-           let {linkage} = this.renderOptions
 
-           // 判断是否是多级联动,如果是就通过接口异步翻译
 
-           if (linkage) {
 
-             let {getLinkageOptionsSibling, config} = linkage
 
-             options = getLinkageOptionsSibling(this.row, this.originColumn, config, true)
 
-             if (options instanceof Promise) {
 
-               return new Promise(resolve => {
 
-                 options.then(opt => {
 
-                   resolve(filterDictText(opt, value))
 
-                 })
 
-               })
 
-             }
 
-           } else {
 
-             options = this.column.own.options
 
-           }
 
-           return filterDictText(options, value)
 
-         },
 
-       },
 
-       getValue(value) {
 
-         if (Array.isArray(value)) {
 
-           return value.join(',')
 
-         } else {
 
-           return value
 
-         }
 
-       },
 
-       setValue(value) {
 
-         let {column: {own: col}, params: {$table}} = this
 
-         // 判断是否是多选
 
-         if ((col.props || {})['mode'] === 'multiple') {
 
-           $table.$set(col.props, 'maxTagCount', 1)
 
-         }
 
-         if (value != null && value !== '') {
 
-           if (typeof value === 'string') {
 
-             return value === '' ? [] : value.split(',')
 
-           }
 
-           return value
 
-         } else {
 
-           return undefined
 
-         }
 
-       }
 
-     }
 
-   }
 
- </script>
 
- <style scoped>
 
- </style>
 
 
  |