icop

全局组件或配置

1. 表格查询页搜索框

点击reset或点击下拉选择框的清空按钮需要专为实体默认选中
位置:src\components\SearchPageCore\search_field\select\index.tsx
在配置下拉选择框的内容时,placeholder一般会写为"Search By XXX"或者是"All XXX"的形式,而清空后所需要留下的实体默认选项的格式为"All XXX",所以写了一个方法来过滤掉pleaseholder并且获取"XXX"的内容,同时这个方法还是用于获取UI检视时鼠标悬浮在搜索框的toast内容
位置:src\components\SearchPageCore\search_field\utils.ts

const optionsArr = JSON.parse(JSON.stringify(config.options))
    if (
      config.defalutFirstItem &&
      Object.prototype.toString.call(config.defalutFirstItem) ===
        '[object Object]'
    ) {
      optionsArr.unshift(config.defalutFirstItem)
    } else if (config.defalutFirstItem && config.defalutFirstItem === 'none') {
    } else {
      optionsArr.unshift({
        id: -1, // All代表为-1
        name: this.$t(
          config.placeholder
            ? `All ${getToastTitle(config.placeholder)}`
            : 'All'
        )
      })
    }

过滤placeholder后获取的实体选项名赋值为-1,在搜索的时候将-1的值转换为undefined即可


转-1为undefined

注意,由于是在搜索栏才会将-1转为undefined,因此在某些页面的导出表格按钮需要自行手动转换一下


手动转换
2. 搜索框日期默认值

2.3.3改版后,大部分的搜索框日期精度由时间变为了日,但搜索时仍需要默认为00:00:00至23:59:59,因此在原本的全局方法中新增了该功能的改版
位置:src\components\SearchPageCore\date_formatter.ts

public transferCloseDateFieldArrayByDate(rawField: Array<string>) {
    if (!rawField || rawField.length < 2) {
      return null
    }

    return [
      moment(rawField[0]).format('YYYY-MM-DD 00:00:00'),
      moment(rawField[1]).format('YYYY-MM-DD 23:59:59')
    ]
  }
3. 表格空白处为横线,超三行打点

位置:src\components\ExtendTable\index.vue

private transformCellTextFn({ text, column, record }: any) {
    let temp = text || '-'
    return <table-ellipsis v-model={temp}>{temp}</table-ellipsis>
  }

antdv的表格有一个方法属性为transformCellText可以统一调试输出格式,这里用了一个组件来处理传入的文案,如果是纯文字,就判断字数(这里可以优化为超三行,但UI没严格要求)打点,如果是空就显示-

4. 表格操作栏
操作栏

原Imos只有左侧固定,而icop新增了右侧固定,所以拿几个重要的地方出来讲一下
位置:src\components\ExtendTable\colSet.vue
首先操作栏的实现主要通过sortablejs,可以通过sortablejs地址查看配置项
colSet组件是通过v-model来相应的,所以每次拖拽之后都需要$emit(input)最新的数据。和平常的组件不太相同的是,sortablejs所操作的currentData,并不是渲染整个拖拽列表的参数,渲染列表的参数是checkboxGroupData,这两个参数之间是没有响应联系的,也就是说,拖拽操作后,currentData会记录哪列固定在左侧哪列固定在右侧等,但是负责渲染的checkboxGroupData却没有变化,它打印出来的还是初始值
但是icop新增了固定到左侧和固定到右侧的按钮

固定到左侧按钮

这两个按钮直接操作currentData是没用的,还需要通过filterCols方法把数据更新到表格,以及changeCheckboxGroupData方法重置一下checkboxGroupData
而固定左侧和固定右侧文案的显示也是操作checkboxGroupData`才能实现了

5.skui_drawer右侧弹窗组件

位置:src\components\skui_drawer.vue
逻辑比较简单,需要注意的是,UI要求弹窗内大部分情况的表单输入框长度为480px,因此增加了一个prop属性originFormWidth来进行区分

6.skui_base_space自定义间隔组件

位置:src\components\skui_base_space\index.vue
逻辑一样简单,这个组件是所有表格操作列的间隔组件,并且根据UI要求右侧增加了margin

.skui_base_space

局部组件、页面或配置

HyperSMS Build Template页面

位置:src\views\HyperSMS\template\buildTemplate.vue
该页面根据页面结构通过继承分成了两个文件,左边的Material栏和中间的“手机”划分为一个页面,而右侧的主要操作区域和页面的主要逻辑比如回显,提交等作为一个文件,先讲讲左边部分

1.baseTemplate

位置:src\views\HyperSMS\template\templateUtils\baseTemplate.vue
中间的“手机”,因为内容和逻辑基本相同,所以使用了工厂的形式,

<div class="inner hyper-sms-mobile-inner">
          {this.smsTpl.map((el: any, index: number) => {
            if (innerItemFactory.isSupportType(el.type)) {
              return innerItemFactory.build(el.type, {
                fn: (e: any) => {
                  e.stopPropagation()
                  return this.editInnerItem(el, index)
                },
                isActive: index === this.editIndex,
                isMask: index === this.maskIndex,
                text: el.text,
                media_path_content: el.media_path_content,
                name: el.name,
                size: el.size,
                type: el.type,
                media_path_poster: el.media_path_poster,
                mouseoverFn: () => {
                  this.maskIndex = index
                },
                mouseLeaveFn: () => {
                  this.maskIndex = null
                },
                upFn: () => {
                  return this.sortUp(index)
                },
                downFn: () => {
                  return this.sortDown(index)
                },
                deleteFn: (e: any) => {
                  e.stopPropagation()
                  return this.del(index, el)
                }
              })
            }
          })}
        </div>

通过传参的方式来实现功能的个性化

2.buildTemplate

这部分基本是业务逻辑,因此没有什么很值得说的地方,逻辑和vntt的基本相同

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 01-基础 按钮[https://developer.apple.com/design/human-interfa...
    dddt01阅读 2,124评论 0 21
  • 2020/04/29 周三 #[http://fe.zuo11.com/daily/2020-04.html#ui...
    抓猹吃瓜阅读 191评论 0 1
  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,582评论 1 180
  • 响应式布局的理解 响应式开发目的是一套代码可以在多种终端运行,适应不同屏幕的大小,其原理是运用媒体查询,在不同屏幕...
    懒猫_6500阅读 773评论 0 0
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,566评论 0 7