完成搜索功能
							parent
							
								
									bfc8fbf056
								
							
						
					
					
						commit
						3f0c2de77a
					
				| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
body{line-height:1.5;font-size:14px;color:var(--color-dark-1)}a{color:inherit;text-decoration:none}wc-switch{cursor:pointer}.app{width:100%;height:100vh}.flex{display:flex}.flex.column{flex-direction:column}.flex.ac{justify-content:center}.flex.alc{align-items:center}.flex.acc{justify-content:center;align-items:center}.flex.asc{justify-content:space-between;align-items:center}.wrapper{width:1024px}.topbar{width:100%;height:64px;background:#fff;box-shadow:0 6px 12px rgba(0,0,0,.05)}.topbar .logo{font-size:24px;color:var(--color-red-1)}.topbar .logo span{font-size:14px}.topbar .navs{font-size:16px}.topbar .navs .nav{margin-left:32px;cursor:pointer;transition:color .2s linear}.topbar .navs .nav.active,.topbar .navs .nav:hover{text-decoration:underline;color:var(--color-red-1)}.main{flex:1}.main .table-info{width:100%;height:64px}.main .search{width:100%}.main .search .field{margin-top:16px}.main .search .field wc-input{flex:1}.footer{width:100%;height:64px;border-top:1px solid var(--color-plain-2)}@media screen and (max-width: 1024px){.topbar,.main{padding:0 16px}.footer .wrapper{flex-direction:column;align-items:center;justify-content:center}}
 | 
			
		||||
body{line-height:1.5;font-size:14px;color:var(--color-dark-1)}a{color:inherit;text-decoration:none}wc-switch{cursor:pointer}.app{width:100%;height:100vh}.flex{display:flex}.flex.column{flex-direction:column}.flex.ac{justify-content:center}.flex.alc{align-items:center}.flex.acc{justify-content:center;align-items:center}.flex.asc{justify-content:space-between;align-items:center}.wrapper{width:1024px}.topbar{width:100%;height:64px;background:#fff;box-shadow:0 6px 12px rgba(0,0,0,.05)}.topbar .logo{font-size:24px;color:var(--color-red-1)}.topbar .logo span{font-size:14px}.topbar .navs{font-size:16px}.topbar .navs .nav{margin-left:32px;cursor:pointer;transition:color .2s linear}.topbar .navs .nav.active,.topbar .navs .nav:hover{text-decoration:underline;color:var(--color-red-1)}.main{flex:1}.main .table-info{width:100%;height:64px}.main .search{width:100%}.main .search .field{margin-top:16px}.main .search .field.result{line-height:2;word-wrap:break-word;white-space:pre-wrap}.main .search .field wc-input{flex:1}.footer{width:100%;height:64px;border-top:1px solid var(--color-plain-2)}@media screen and (max-width: 1024px){.topbar,.main{padding:0 16px}.footer .wrapper{flex-direction:column;align-items:center;justify-content:center}}
 | 
			
		||||
| 
						 | 
				
			
			@ -92,6 +92,12 @@ wc-switch {
 | 
			
		|||
    .field {
 | 
			
		||||
      margin-top: 16px;
 | 
			
		||||
 | 
			
		||||
      &.result {
 | 
			
		||||
        line-height: 2;
 | 
			
		||||
        word-wrap: break-word;
 | 
			
		||||
        white-space: pre-wrap;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      wc-input {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,18 +35,20 @@
 | 
			
		|||
 | 
			
		||||
      <div class="search">
 | 
			
		||||
        <section class="field flex alc">
 | 
			
		||||
          <wc-input placeholder="输入汉字查询编码"></wc-input>
 | 
			
		||||
          <wc-input placeholder="输入汉字查询编码" :duplex="filter.txt" @submit="search"></wc-input>
 | 
			
		||||
        </section>
 | 
			
		||||
 | 
			
		||||
        <section class="field flex alc">
 | 
			
		||||
          <wc-radio-group value="86">
 | 
			
		||||
          <wc-radio-group :duplex="filter.table">
 | 
			
		||||
            <wc-radio value="86">86版</wc-radio>
 | 
			
		||||
            <wc-radio value="18030" type="danger">18030版(86修正版)</wc-radio>
 | 
			
		||||
          </wc-radio-group>
 | 
			
		||||
 | 
			
		||||
          <wc-switch>是否开启反查</wc-switch>
 | 
			
		||||
          <wc-switch :duplex="filter.reverse">是否开启反查</wc-switch>
 | 
			
		||||
        </section>
 | 
			
		||||
 | 
			
		||||
        <section class="field result">{{result}}</section>
 | 
			
		||||
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="panel">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										46
									
								
								js/index.js
								
								
								
								
							
							
						
						
									
										46
									
								
								js/index.js
								
								
								
								
							| 
						 | 
				
			
			@ -5,21 +5,31 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
import '//unpkg.yutent.top/anot/dist/anot.js'
 | 
			
		||||
import '//unpkg.yutent.top/@bytedo/wcui/dist/layer/index.js'
 | 
			
		||||
import '//unpkg.yutent.top/@bytedo/wcui/dist/form/input.js'
 | 
			
		||||
import '//unpkg.yutent.top/@bytedo/wcui/dist/form/button.js'
 | 
			
		||||
import '//unpkg.yutent.top/@bytedo/wcui/dist/form/radio.js'
 | 
			
		||||
import '//unpkg.yutent.top/@bytedo/wcui/dist/form/switch.js'
 | 
			
		||||
import fetch from '//unpkg.yutent.top/@bytedo/fetch/dist/index.js'
 | 
			
		||||
 | 
			
		||||
const WB_TABLE = {}
 | 
			
		||||
import { Enum } from './lib/core.js'
 | 
			
		||||
 | 
			
		||||
const WB_CODE_NAME = new Enum({ 1: '一级简码', 2: '二级简码', 3: '三级简码', 4: '四级简码' })
 | 
			
		||||
const WB_TABLE = new Enum()
 | 
			
		||||
 | 
			
		||||
Anot.hideProperty(WB_TABLE, 'length', 0)
 | 
			
		||||
 | 
			
		||||
Anot({
 | 
			
		||||
  $id: 'app',
 | 
			
		||||
  state: {
 | 
			
		||||
    single: 222,
 | 
			
		||||
    words: 0
 | 
			
		||||
    single: 0,
 | 
			
		||||
    words: 0,
 | 
			
		||||
    result: '',
 | 
			
		||||
    filter: {
 | 
			
		||||
      txt: '',
 | 
			
		||||
      table: '86',
 | 
			
		||||
      reverse: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    fetch('./data/table.txt')
 | 
			
		||||
| 
						 | 
				
			
			@ -35,12 +45,38 @@ Anot({
 | 
			
		|||
          let k = it.shift()
 | 
			
		||||
 | 
			
		||||
          if (k) {
 | 
			
		||||
            WB_TABLE[k] = it
 | 
			
		||||
            WB_TABLE.length++
 | 
			
		||||
            WB_TABLE.add(k, it)
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        window.foo = WB_TABLE
 | 
			
		||||
 | 
			
		||||
        console.log(WB_TABLE)
 | 
			
		||||
 | 
			
		||||
        this.single = WB_TABLE.length
 | 
			
		||||
      })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    search() {
 | 
			
		||||
      var params = { ...this.filter }
 | 
			
		||||
      var res
 | 
			
		||||
 | 
			
		||||
      params.txt = params.txt.toLowerCase()
 | 
			
		||||
 | 
			
		||||
      if (params.reverse && !/^[a-z]{1,4}$/.test(params.txt)) {
 | 
			
		||||
        return layer.toast('不合法的五笔编码', 'warning')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      res = WB_TABLE.get(params.txt)
 | 
			
		||||
 | 
			
		||||
      if (params.reverse) {
 | 
			
		||||
        res = res.join('\t')
 | 
			
		||||
      } else {
 | 
			
		||||
        res = res.map(t => `${WB_CODE_NAME.get(t.length)}: ${t}`).join('\t')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.result = `查询结果: 【 ${params.txt} 】\n${res.toUpperCase()}`
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,70 @@
 | 
			
		|||
export class Enum {
 | 
			
		||||
  #dict_k = Object.create(null)
 | 
			
		||||
  #dict_v = Object.create(null)
 | 
			
		||||
  length = 0
 | 
			
		||||
 | 
			
		||||
  constructor(obj = {}) {
 | 
			
		||||
    for (let k in obj) {
 | 
			
		||||
      this.add(k, obj[k])
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  add(k, v) {
 | 
			
		||||
    if (this.#dict_k[k]) {
 | 
			
		||||
      var _v = this.#dict_k[k]
 | 
			
		||||
 | 
			
		||||
      for (let t of _v) {
 | 
			
		||||
        this.#dict_v[t] = this.#dict_v[t].filter(i => i !== k)
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      this.#dict_k[k] = Array.isArray(v) ? v : [v]
 | 
			
		||||
      this.length++
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (Array.isArray(v)) {
 | 
			
		||||
      for (let t of v) {
 | 
			
		||||
        if (this.#dict_v[t]) {
 | 
			
		||||
          this.#dict_v[t].push(k)
 | 
			
		||||
        } else {
 | 
			
		||||
          this.#dict_v[t] = [k]
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      this.#dict_v[v] = [k]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  remove(k) {
 | 
			
		||||
    var v = this.#dict_k[k]
 | 
			
		||||
    if (v) {
 | 
			
		||||
      delete this.#dict_k[k]
 | 
			
		||||
      if (Array.isArray(v)) {
 | 
			
		||||
        for (let t of v) {
 | 
			
		||||
          delete this.#dict_v[t]
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      this.length--
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  get(k) {
 | 
			
		||||
    if (this.#dict_k[k]) {
 | 
			
		||||
      return this.#dict_k[k]
 | 
			
		||||
    } else if (this.#dict_v[k]) {
 | 
			
		||||
      return this.#dict_v[k]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  forEach(callback) {
 | 
			
		||||
    for (let k in this.#dict_k) {
 | 
			
		||||
      if (callback(k, this.#dict_k[k]) === false) {
 | 
			
		||||
        break
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return this
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  toString() {
 | 
			
		||||
    return JSON.stringify(this.#dict_k)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
export LEVEL_1 = {
 | 
			
		||||
  
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue