精华内容
下载资源
问答
  • 雷克萨斯UX 260h汽车紧急救援手册下载pdf电子版车辆说明书适用2018年10月后车型
  • 雷克萨斯UX200 260h 260h FSPORT车型手册汽车说明书pdf电子版下载
  • 中新网1月24日电 23日,豪华都市SUV全新雷克萨斯UX在杭州正式上市,共推出6款车型,厂商建议零售价为人民币26.8万元—37.1万元。LEXUS雷克萨斯中国执行副总经理大竹仁表示:“作为品牌进化后的全新豪华都市SUV,全新...

    中新网1月24日电 23日,豪华都市SUV全新雷克萨斯UX在杭州正式上市,共推出6款车型,厂商建议零售价为人民币26.8万元—37.1万元。

    全新雷克萨斯UX正式上市 售价26.8万——37.1万元

    LEXUS雷克萨斯中国执行副总经理大竹仁表示:“作为品牌进化后的全新豪华都市SUV,全新UX不仅是LEXUS雷克萨斯对自我的突破,更是一场我们与年轻人之间展开的对话。希望凭借我们的‘大想法’与‘小执念’,与更多志同道合的朋友一路同行,去探享更加精彩的豪华生活方式。”

    全新UX是LEXUS雷克萨斯基于GA-C平台打造的首款车型。通过大量采用高强度钢材、铝合金和高强度树脂,全新UX实现了集轻量化和高刚性于一身的车身结构,配合全新调校的底盘和悬架,将舒适的驾乘与精准的路面反馈相结合,令驾驶者在不同驾驶情境下,均能感受到车辆的敏捷与扎实。

    新车搭载的智•混动系统,通过全新开发的前轮驱动桥,全新布局的PCU能量控制单元,以及全新开发的高性能镍氢电池组,让发动机和电动机的合作更加高效,不仅为用户带来更加静谧和愉悦的驾乘感受,还实现了低至4.6升的百公里综合油耗。

    全新UX 200搭载的2.0升自然吸气发动机,采用厚度仅为3.8毫米的超薄活塞头,并在活塞侧壁的加工中应用激光交叉影线和镜面加工技术,辅以进一步优化的燃油喷射方式,实现了卓越的性能表现和出色的热效率。LEXUS雷克萨斯首次采用的Direct Shift-CVT变速器,不仅实现了小巧体积和轻量化的设计,还开创性地将齿轮传动与连续可调钢带机构相结合,在启动和低速行驶时带来如同手动变速器般直接的加速体验,达成了动力响应与平顺舒适的兼融。

    此外,全新UX还拥有多项创新的空气动力学设计,进一步提升了车辆稳定性:空气动力学轮毂,通过辐条两侧的襟翼设计,减小空气阻力;拱形稳流翼子板,采用顶部凸起的拱形稳流部件,有助于抑制车辆侧倾;贯穿式尾灯,在两端采用两个“L”形的气流调节翼,可减少车身压力变化,提升车辆在转弯及侧风行驶时的车尾稳定性。

    全新UX特别推出了三款F SPORT车型。其中,全新UX 260h F SPORT全驱版搭载了全轮驱动系统,在加速、转向或在低附着力道路上行驶时,可自动优化前后轴之间的动力分配,从容应对复杂路况,并让驾控更富激情。

    全新雷克萨斯UX正式上市 售价26.8万——37.1万元

    全新UX将源自传统东方建筑的“缘侧(Engawa)”理念融入汽车内室,以驾驶者的视线做起点,从仪表台直接延伸至挡风玻璃之外,实现内室与外观无缝衔接的同时,呈现更加开阔、通透的视野。

    不同于以往的中控设计,全新UX用充满温暖触觉和视觉质感的和纸纹理饰面,营造了温馨而清爽的感官体验。与之相呼应的,是应用于座椅肩部缝线的刺子绣工艺,以朴实的针法和精致的曲线,凸显座椅的高级质感,同时又透露出对传统工艺的敬畏与坚持。

    全新UX的车身尺寸为:长4,495mm(F SPORT版为4,494mm)、宽1,840mm、高1,520mm(带鲨鱼鳍版为1,540mm)。凭借独特的车身比例,全新UX实现了低重心与安全感的和谐统一。由多个立体块状结构组成,可随视角不同而呈现美妙变化的纺锤形格栅,配合较低的车身姿态与大直径轮毂,再辅以LEXUS雷克萨斯首次采用的贯穿式尾灯,将全新UX的精悍与动感展现得淋漓尽致。

    新车提供13种外观颜色,其中开发团队特别调制了三款崭新颜色——采用全新多层喷涂工艺的烈焰玛瑙色,可在强光下散发出耀眼光芒的碧空蓝色,以及兼融深沉色调与亮丽光泽的黛青云母色,进一步凸显全新UX的朝气与活力。

    对于F SPORT车型,全新UX也承袭家族标志性运动设计,配备了包括网状格栅、熏黑装饰和18英寸轮毂等在内的专属装备,让驾驶充满个性魅力。

    LEXUS雷克萨斯中国市场推广部部长陈忱在活动现场表示:“在这个时代,我们希望全新UX,以创新的精神、对生活的热爱、每时每刻的‘大想法’与‘小执念’,陪伴大胆、个性的年轻人共同成长,将人生的博大格局和精深内涵融会贯通,在繁华都市来去自如。”

    伴随全新UX的到来,LEXUS雷克萨斯将以更加丰富的产品线,满足消费者多元化、个性化的需求。诚如LEXUS雷克萨斯中国副总经理徐崙所言:“全新UX将与新生代都市探享家一起,共享富有激情与品质的美好生活。”

    展开全文
  • hp-ux: Node Crash Due To Large Amount Of Racgimon Threads or CRS_STAT/SRVCTL COMMAND HANG OS bug ( QX:QXCR1000940361 ) [ID 883801.1] PHKL_40208 and PHKL_40372 /usr/sbin/swlist -l patch PHKL_...

    本文档针对初级DBA
    ==============1、准备环境

    >准备oracle集群及数据库软件目录  /u01      100G

    >准备oracle数据库备份目录        /backup   500G

    >根目录                          /         100G

    >临时目录                        /tmp      50G

    >交换空间                        /swap     64G

    系统主机设置主机名时用小写名称,大写名称是bug,写完/etc/hosts安装时会报错,如果主机名称必须大写,也要将/etc/hosts里的名称改为小写

    >上传安装包,注意安装包位数,权限

    su - oracle

    mkdir -p /u01/sw/db

    mkdir -p /u01/sw/patch

    mkdir -p /u01/sw/rpm

    chmod -R 777 /u01/sw

    解压安装包

    find / -name jar

    /opt/java1.5/bin/IA64N/jar -xvf  p13390677_112040_HP64_2of6.zip

    chmod 777 /u01/sw/database

    chmod 777 /u01/sw/grid

    >挂载ISO镜像,安装软件包

    HP-UX 11i V3 patch Bundle Sep/ 2008 (B.11.31.0809.326a) 64-bit kernel

    检查系统版本以及是否是64位

    #uname –a

    Checking the Software Requirements

    1.To determine which version of HP-UX is installed, enter the following command:

    # uname -a

    HP-UX hostname B.11.23 ia64 109444686 unlimited-user license

     

    *HPUX 11.23 Patches

    HPUX 11.23 with Sept 2004 or newer base, and Mar 2007 Patch bundle for HP-UX 11iV2-B.11.23.0703

    PHKL_33025 file system tunables cumulative patch

    PHKL_34941 Improves Oracle Clusterware restart and diagnosis

    PHCO_32426 reboot(1M) cumulative patch

    PHCO_36744 LVM patch [replaces PHCO_35524]

    PHCO_37069 libsec cumulative patch

    PHCO_37228 libc cumulative patch) [replaces PHCO_36673]

    PHCO_38120 kernel configuration commands patch

    PHKL_34213 vPars CPU migr, cumulative shutdown patch

    PHKL_34989 getrusage(2) performance

    PHKL_36319 mlockall(2), shmget(2) cumulative patch) [replaces PHKL_35478]

    PHKL_36853 pstat patch

    PHKL_37803 mpctl(2) options, manpage, socket count) [replaces PHKL_35767]

    PHKL_37121 sleep kwakeup performance cumulative patch [replaces PHKL_35029]

    PHKL_34840 slow system calls due to cache line sharing

    PHSS_37947 linker + fdp cumulative patch) [replaces PHSS_35979]

    PHNE_37395 cumulative ARPA Transport patch

     

    *HPUX 11.31 Patches

    PHCO_40381 11.31 Disk Owner Patch

    PHCO_41479 11.31 (fixes an 11.2.0.2 ASM disk discovery issue)

    PHKL_38038 VM patch - hot patching/Core file creation directory

    PHKL_38938 11.31 SCSI cumulative I/O patch

    PHKL_39351 Scheduler patch : post wait hang

    PHSS_36354 11.31 assembler patch

    PHSS_37042 11.31 hppac (packed decimal)

    PHSS_37959 Libcl patch for alternate stack issue fix (QXCR1000818011)

    PHSS_39094 11.31 linker + fdp cumulative patch

    PHSS_39100 11.31 Math Library Cumulative Patch

    PHSS_39102 11.31 Integrity Unwind Library

    PHSS_38141 11.31 aC++ Runtime

    PHSS_39824 - 11.31 HP C/aC++ Compiler (A.06.23) patch

     

    /usr/sbin/swlist -l patch PHCO_40381

    /usr/sbin/swlist -l patch PHCO_41479

    /usr/sbin/swlist -l patch PHKL_38038

    /usr/sbin/swlist -l patch PHKL_38938

    /usr/sbin/swlist -l patch PHKL_39351

    /usr/sbin/swlist -l patch PHSS_36354

    /usr/sbin/swlist -l patch PHSS_37042

    /usr/sbin/swlist -l patch PHSS_37959

    /usr/sbin/swlist -l patch PHSS_39094

    /usr/sbin/swlist -l patch PHSS_39100

    /usr/sbin/swlist -l patch PHSS_39102

    /usr/sbin/swlist -l patch PHSS_38141

    /usr/sbin/swlist -l patch PHSS_39824

     

    re:

    Oracle Server - Enterprise Edition - Version: 10.2.0.3 to 11.1.0.7 - Release: 10.2 to 11.1

    HP-UX Itanium

    HP-UX PA-RISC (64-bit)

    >>>

    hp-ux: Node Crash Due To Large Amount Of Racgimon Threads or CRS_STAT/SRVCTL COMMAND HANG OS bug ( QX:QXCR1000940361 ) [ID 883801.1]

    PHKL_40208 and PHKL_40372

    /usr/sbin/swlist -l patch PHKL_40208

    /usr/sbin/swlist -l patch PHKL_40372

     

    >配置图形化

    xhost +

    export DISPLAY=客户端本地ip:0.0

    xclock

     

    >确定好IP地址,pub+priv+vip+scan,双节点7个ip

    配置/etc/hosts文件

    vi /etc/hosts

    #public ip

    192.168.98.21           d-oracle1

    192.168.98.22           d-oracle2

    #priv ip

    10.10.10.21             d-oracle1-priv

    10.10.10.22             d-oracle2-priv

    #virtual ip

    192.168.98.23           d-oracle1-vip

    192.168.98.24           d-oracle2-vip

    #scan ip

    192.168.98.20           d-oracle-scan

     

    >ntp时间配置一致或者手动修改为一致,使用CTSS

    使用MV命令对以下配置文件进行重命名

    # mv /etc/ntp.conf /etc/ntp.conf.bak

     

    >配置好共享磁盘及裸设备

    使用如下命令对磁盘属性进行修改。 (所有节点都需要执行)

    更改磁盘属性之前要确定哪些盘是分配给你用的并确定disk后面的号码

    print_manifest|more

    FUJITSU ETERNUS_DXM 2097152 Mb   64000/0xfa00/0x13

    FUJITSU ETERNUS_DXM 2048 Mb      64000/0xfa00/0x12

    FUJITSU ETERNUS_DXM 512000 Mb    64000/0xfa00/0x11

    FUJITSU ETERNUS_DXM 512000 Mb    64000/0xfa00/0x10

    FUJITSU ETERNUS_DXM 512000 Mb    64000/0xfa00/0xf

    FUJITSU ETERNUS_DXM 512000 Mb    64000/0xfa00/0xe

    FUJITSU ETERNUS_DXM 2048 Mb      64000/0xfa00/0xd

    FUJITSU ETERNUS_DXM 2048 Mb      64000/0xfa00/0xc

    FUJITSU ETERNUS_DXM 512000 Mb    64000/0xfa00/0xb

    FUJITSU ETERNUS_DXM 512000 Mb    64000/0xfa00/0xa

    FUJITSU ETERNUS_DXM 512000 Mb    64000/0xfa00/0x9

    FUJITSU ETERNUS_DXM 512000 Mb    64000/0xfa00/0x8

    FUJITSU ETERNUS_DXM 512000 Mb    64000/0xfa00/0x7       

    查询对应容量盘的标示符

    ioscan -funNC disk|more

    Class     I  H/W Path  Driver S/W State   H/W Type     Description

    ===================================================================

    disk      2  64000/0xfa00/0x1   esdisk   CLAIMED     DEVICE       HP      LOGICAL VOLUME

                          /dev/disk/disk2      /dev/disk/disk2_p2   /dev/rdisk/disk2     /dev/rdisk/disk2_p2

                          /dev/disk/disk2_p1   /dev/disk/disk2_p3   /dev/rdisk/disk2_p1  /dev/rdisk/disk2_p3

    disk      3  64000/0xfa00/0x3   esdisk   CLAIMED     DEVICE       HP      LOGICAL VOLUME

                          /dev/disk/disk3   /dev/rdisk/disk3

    disk     20  64000/0xfa00/0x7   esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk20   /dev/rdisk/disk20

    disk     21  64000/0xfa00/0x8   esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk21   /dev/rdisk/disk21

    disk     22  64000/0xfa00/0x9   esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk22   /dev/rdisk/disk22

    disk     23  64000/0xfa00/0xa   esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk23   /dev/rdisk/disk23

    disk     24  64000/0xfa00/0xb   esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk24   /dev/rdisk/disk24

    disk     25  64000/0xfa00/0xc   esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk25   /dev/rdisk/disk25

    disk     26  64000/0xfa00/0xd   esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk26   /dev/rdisk/disk26

    disk     27  64000/0xfa00/0xe   esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk27   /dev/rdisk/disk27

    disk     28  64000/0xfa00/0xf   esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk28   /dev/rdisk/disk28

    disk     29  64000/0xfa00/0x10  esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk29   /dev/rdisk/disk29

    disk     30  64000/0xfa00/0x11  esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk30   /dev/rdisk/disk30

    disk     31  64000/0xfa00/0x12  esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk31   /dev/rdisk/disk31

    disk     32  64000/0xfa00/0x13  esdisk   CLAIMED     DEVICE       FUJITSU ETERNUS_DXM

                          /dev/disk/disk32   /dev/rdisk/disk32 

    根据盘的标示符查看所对应的物理盘

     

    注意:标示符64000/0xfa00/0x13对应的物理盘/dev/rdisk/disk32非常有可能出现错误,这会导致安装grid执行第二个脚本时报错,一定检查好。

    如果不对,需要找系统管理员修改为一致状态,一般会新建一个;新建完后,旧的物理盘并不会消失,需要让系统管理员手工删除,否则一样报错。

    #chmod 660 /dev/hdisk[]

    #chown grid:asmadmin /dev/hdisk[]

    Eg:

    chown grid:asmadmin /dev/hdisk/disk5

    chown grid:asmadmin /dev/hdisk/disk6

    chown grid:asmadmin /dev/hdisk/disk7

    chmod 660 /dev/hdisk/disk5

    chmod 660 /dev/hdisk/disk6

    chmod 660 /dev/hdisk/disk7

     

    chown grid:asmadmin /dev/rdisk/disk5

    chown grid:asmadmin /dev/rdisk/disk6

    chown grid:asmadmin /dev/rdisk/disk7

    chmod 660 /dev/rdisk/disk5

    chmod 660 /dev/rdisk/disk6

    chmod 660 /dev/rdisk/disk7

     

    ===============2、前期系统配置

    >HP-UNIX核心参数的修改:

    a.Enter the following command to start the kcweb application:

    # /usr/sbin/kcweb -F

    #kctune 查内核参数

    用root用户在两台主机中执行下列命令来更改内核设置:

    kctune -h nproc="4096"

    kctune -h ksi_alloc_max="(nproc*8)"

    kctune -h max_thread_proc="1024"

    kctune -h maxdsiz="1073741824"

    kctune -h maxdsiz_64bit="2147483648"

    kctune -h maxssiz="134217728"

    kctune -h maxssiz_64bit="1073741824"

    kctune -h maxuprc="((nproc*9)/10)"

    kctune -h msgmni="(nproc)"

    kctune -h msgtql="(nproc)"

    kctune -h nfile="(15*nproc+2048)"

    kctune -h nflocks="(nproc)"

    kctune -h ninode="(8*nproc+2048)"

    kctune -h semmni="(nproc*2)"

    kctune -h semmns="(semmni*2)"

    kctune -h semmnu="(nproc-4)"

    kctune -h semvmx="32767"

    kctune -h shmmax="17179869184" #此处修改成物理内存的一半,32G内存的一半是17179869184               

    kctune -h shmmni="512"

    kctune -h shmseg="120"

    kctune -h vps_ceiling="64"

    例如:

    /usr/sbin/kctune ksi_alloc_max=32768

    /usr/sbin/kctune executable_stack=0

    /usr/sbin/kctune ksi_alloc_max=32768

    /usr/sbin/kctune max_thread_proc=1024

    /usr/sbin/kctune maxdsiz=1073741824

    /usr/sbin/kctune maxdsiz_64bit=2147483648

    /usr/sbin/kctune maxfiles=1024

    /usr/sbin/kctune maxfiles_lim=63488

    /usr/sbin/kctune maxssiz=134217728

    /usr/sbin/kctune maxssiz_64bit=1073741824

    /usr/sbin/kctune maxuprc=3686

    /usr/sbin/kctune msgmni=4096

    /usr/sbin/kctune msgtql=4096

    /usr/sbin/kctune ncsize=35840

    /usr/sbin/kctune nflocks=4096

    /usr/sbin/kctune ninode=34816

    /usr/sbin/kctune nkthread=7184

    /usr/sbin/kctune nproc=4096

    /usr/sbin/kctune semmni=4096

    /usr/sbin/kctune semmns=8192

    /usr/sbin/kctune semmnu=4096

    /usr/sbin/kctune semvmx=32767

    /usr/sbin/kctune shmmax=1073741824  #此处修改成物理内存的一半,32G内存的一半是17179869184

    /usr/sbin/kctune shmmni=4096

    /usr/sbin/kctune shmseg=512

     

    >HP-UNIX 操作系统网络核心参数的修改

    /usr/sbin/kctune tcp_smallest_anon_port=9000

    /usr/sbin/kctune tcp_largest_anon_port=65500

    /usr/sbin/kctune udp_smallest_anon_port=9000

    /usr/sbin/kctune udp_largest_anon_port=65500

     

    查看是否生效

    ndd /dev/tcp tcp_smallest_anon_port

    ndd /dev/tcp tcp_largest_anon_port

    ndd /dev/udp udp_samllest_anon_port

    ndd /dev/udp udp_largest_anon_port

    如果没有生效:

    /usr/bin/ndd -set /dev/tcp tcp_smallest_anon_port 9000  这个命令在重启后失效,固化的方法是将配置添加到/etc/rc.config/nddconf

    /etc/rc.config.d/nddconf

     

    TRANSPORT_NAME[0]=tcp

    NDD_NAME[0]=tcp_largest_anon_port

    NDD_VALUE[0]=65500

    TRANSPORT_NAME[1]=tcp

    NDD_NAME[1]=tcp_smallest_anon_port

    NDD_VALUE[1]=9000

    TRANSPORT_NAME[2]=udp

    NDD_NAME[2]=udp_largest_anon_port

    NDD_VALUE[2]=65500

    TRANSPORT_NAME[3]=udp

    NDD_NAME[3]=udp_smallest_anon_port

    NDD_VALUE[3]=9000

     

    >Lib 设置

    # cd /usr/lib

    ln -s /usr/lib/libX11.3 libX11.sl

    ln -s /usr/lib/libXIE.2 libXIE.sl

    ln -s /usr/lib/libXext.3 libXext.sl

    ln -s /usr/lib/libXhp11.3 libXhp11.sl

    ln -s /usr/lib/libXi.3 libXi.sl

    ln -s /usr/lib/libXm.4 libXm.sl

    ln -s /usr/lib/libXp.2 libXp.sl

    ln -s /usr/lib/libXt.3 libXt.sl

    ln -s /usr/lib/libXtst.2 libXtst.sl

     

    >异步IO

    ll /dev/async  (11.31 hp-unix是默认开启的)

    如果返回的结果如下:

    crw-rw-rw- 1 bin bin 101 0x000000 May 16 07:23 /dev/async 说明异步IO已经启用。

    如果没有开启:

    # ll /dev/async

    · the output should look something like:

      crw-rw-rw- 1 bin bin 101 0x000000 May 16 07:23 /dev/async

     

    1. Log in as the root user.

    2. Determine whether /dev/async exists. If the device does not exist, then use the

    following command to create it:

    # /sbin/mknod /dev/async c 101 0x4

    Alternatively, you can set the minor number value to 0x104 using the following

    command:

    # /sbin/mknod /dev/async c 101 0x104

    3. If /dev/async exists, then determine the current value of the minor number, as

    shown in the following example:

    # ls -l /dev/async

    crw-r--r-- 1 root sys 101 0x000000 Sep 28 10:38 /dev/async

    4. If the existing minor number of the file is not 0x4 or 0x104, then change it to an

    expected value using one of the following commands:

    # /sbin/mknod /dev/async c 101 0x4

    or

    # /sbin/mknod /dev/async c 101 0x104

     

    >创建用户及目录

    创建用户和组

    建立Oracle安装目录组:

    /usr/sbin/groupadd -g 501 oinstall

    建立Oracle ASMDBA组:

    /usr/sbin/groupadd -g 502 asmadmin

    /usr/sbin/groupadd -g 503 asmdba

    /usr/sbin/groupadd -g 504 asmoper

    /usr/sbin/groupadd -g 505 dba

     

    Oracle inventory 目录

    mkdir -p /u01/app/oraInventory

    chown -R grid:oinstall /u01/app/oraInventory

    chmod -R 775 /u01/app/oraInventory

     

    Grid Infrastructure BASE 目录

    mkdir -p /u01/app/grid

    chown grid:oinstall /u01/app/grid

    chmod -R 775 /u01/app/grid

     

    Grid Infrastructure Home 目录

    mkdir -p /u01/11.2.0/grid

    chown -R grid:oinstall /u01/11.2.0/grid

    chmod -R 775 /u01/11.2.0/grid

     

     

    Oracle Base 目录

    mkdir -p /u01/app/oracle

    mkdir /u01/app/oracle/cfgtoollogs

    chown -R oracle:oinstall /u01/app/oracle

    chmod -R 775 /u01/app/oracle

     

    Oracle Rdbms Home 目录

    mkdir -p /u01/app/oracle/product/11.2.0/db_1

    chown -R oracle:oinstall /u01/app/oracle/product/11.2.0/db_1

    chmod -R 775 /u01/app/oracle/product/11.2.0/db_1

     

    >建立Grid安装用户grid:

    mkdir /home/grid

    chown grid:oinstall /home/grid

    /usr/sbin/useradd -u 501 -g oinstall -G asmadmin,asmdba,asmoper,dba –d /home/grid/ grid

    >建立Oracle安装用户oracle:

    mkdir /home/oracle

    chown oracle:oinstall /home/oracle

    /usr/sbin/useradd -u 502 -g oinstall -G dba,asmdba -d /home/oracle/ oracle

    >用户密码:

    # passwd grid    密码设置,例如:oracle

    # passwd oracle  密码设置,例如:oracle

     

    >设置用户环境变量

    su - oracle

    vi .bash_profile

    umask 022

    export ORACLE_BASE=/u01/app/oracle

    export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

    export ORACLE_SID=orcl1

    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

    export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"

    export PATH=$ORACLE_HOME/bin:$PATH

    export PS1=`hostname`:'$PWD'"$"

     

    #export ORA_CRS_HOME=$ORACLE_BASE/product/10.2.0/crs_1(10g)

     

    文件生效  . .bash_profile

    注意2节点ORACLE_SID=orcl2

     

    su - grid

    umask 022

    export ORACLE_BASE=/u01/app/grid

    export ORACLE_HOME=/u01/11.2.0/grid

    export ORACLE_SID=+ASM1

    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

    export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"

    export PATH=$ORACLE_HOME/bin:$PATH

    export PS1=`hostname`:'$PWD'"$"

     

    文件生效  . .bash_profile

    注意2节点ORACLE_SID=+ASM2

     

    >配置用户ssh信任关系

    grid用户使用grid目录里的文件执行

    ./sshUserSetup.sh -user grid -hosts "rac1 rac2" -advanced -noPromptPassphrase

    oracle用户使用database目录里的文件执行

    ./sshUserSetup.sh -user oracle -hosts "rac1 rac2" -advanced -noPromptPassphrase

     

    >前期环境检查,如有问题,继续修复

    ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose

     

    ./runInstaller -ignoreSysPrereqs(10g)

     

    ===============3、安装grid集群软件

    ./runInstaller

     

    ===============4、添加磁盘组,DATA,ARCH

    asmca

    注意磁盘组模式

     

    ===============5、安装oracle软件

    ./runInstaller

     

    ===============6、创建oracle数据库

    dbca

    注意

    processes修改为最佳大小

    内存为80%

    字符集为中文

    安装最后修改redo日志大小

    安装完毕每个节点再添加两组redo日志

     

    >修改local_listener,以便让scan ip可用(每个节点都做一次)

     

    orcl1

    SQL> show parameter local_listener;

     

    NAME                     TYPE    VALUE------------------------------------ ----------- ------------------------------

    local_listener               string  (DESCRIPTION=(ADDRESS_LIST=(AD

                             DRESS=(PROTOCOL=TCP)(HOST=rac-

                             orcl01)(PORT=1521))))

     

    SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.5.103)(PORT=1521))))' scope=both sid='orcl1';

     

    System altered.

     

     

    =============== 7、重新安装需要删除的目录

    rm -rf /u01/app/oraInventory/*

    rm -rf /u01/app/grid/*

    rm -rf /u01/11.2.0/grid/*

    rm -rf /u01/app/oracle/*

    rm -rf /u01/app/oracle/cfgtoollogs

    rm -rf /u01/app/oracle/product/11.2.0/db_1

    rm -rf /tmp/*

    rm -rf /var/opt/ora*

    rm -rf /etc/init.d/init.ohasd /etc/init.d/ohasd

    rm -rf /etc/ora*

     

    >执行脚本2时报错,重新执行脚本前

    $ORACLE_HOME/crs/install/roothas.pl -delete -force -verbose

    >复制虚拟机后记得修改主机名

    >发现不到磁盘,执行

    chmod 6755 $ORACLE_HOME/bin/oracle

    >清空裸设备文件内容

    当时试过没有使用带参数的可以生效

    dd if=/dev/zero of=/dev/raw/raw3

    这样也行

    dd if=/dev/zero of=/dev/sdb

     

     

    ===============8、修改redo日志

    alter database datafile '+DATA/aams/datafile/system.260.839517123' resize 20G;

    alter database datafile '+DATA/aams/datafile/sysaux.261.839517125' resize 20G;

    alter database datafile '+DATA/aams/datafile/undotbs1.262.839517129' resize 20G;

    alter database tempfile '+DATA/aams/tempfile/temp.263.839517129' resize 20G;

     

     

    select group#,thread#,bytes/1024/1024 "MB",members,status from v$log;

    select member from v$logfile;

     

    alter database add logfile thread 1 group 5('+DATA') size 512M;

    alter database add logfile thread 1 group 6('+DATA') size 512M;

    alter database add logfile thread 2 group 7('+DATA') size 512M;

    alter database add logfile thread 2 group 8('+DATA') size 512M;

     

    alter database drop logfile group 1;

    alter database drop logfile group 2;

    alter database drop logfile group 3;

    alter database drop logfile group 4;

     

     

     

    HP-UX crontab 设置

    1.使用root用户,在/var/adm/cron/cron.allow文件中添加用户以授权

    2.编写sh,脚本中添加必要的环境变量

    3.chmod a+x *.sh

    4.crontab -e 写入执行的时间

     

    查看网卡MAC地址或者IP地址方法:

    Lanscan

    Ipconfig

    展开全文
  • 1 //plupload 集成 ... 2 Ext.define('ux.plup.File', { 3 extend: 'Ext.form.field.Text', 4 xtype: 'plupFile', 5 alias: ['widget.plupFile'], 6 requires: ['Ext.form.trigger.Com...
      1 //plupload 集成
      2 Ext.define('ux.plup.File', {
      3     extend: 'Ext.form.field.Text',
      4     xtype: 'plupFile',
      5     alias: ['widget.plupFile'],
      6     requires: ['Ext.form.trigger.Component', 'Ext.button.Button', 'Ext.window.Toast'],
      7     //plup对象
      8     uploader: null,
      9     //上传文件最大数量限制,最小只能设置为1
     10     maxFileCount: 1,
     11     //是否单文件上传,结合FileList使用时必须设置为false,否则不会有预览效果
     12     onlyOne: true,
     13     //上传地址,必须
     14     url: 'upload.php',
     15     //上传控件配置
     16     pluploadConfig: {
     17         //url 服务器端的上传页面地址,必须指定
     18         //swf文件,当需要使用swf方式进行上传时需要配置该参数,必须指定
     19         flash_swf_url: 'app/js/plupload/js/Moxie.swf',
     20         //用来指定上传方式,指定多个上传方式请使用逗号隔开。一般情况下,你不需要配置该参数,因为Plupload默认会根据你的其他的参数配置来选择最合适的上传方式。如果没有特殊要求的话,Plupload会首先选择html5上传方式,如果浏览器不支持html5,则会使用flash或silverlight,如果前面两者也都不支持,则会使用最传统的html4上传方式。如果你想指定使用某个上传方式,或改变上传方式的优先顺序,则你可以配置该参数。
     21         //html5,flash,silverlight,html4
     22         runtimes: 'html5,flash,html4',
     23         // 可以使用该参数来限制上传文件的类型,大小等,该参数以对象的形式传入,它包括三个属性: 
     24         filters: {
     25             //mime_types:用来限定上传文件的类型,为一个数组,该数组的每个元素又是一个对象,该对象有title和extensions两个属性,title为该过滤器的名称,extensions为文件扩展名,有多个时用逗号隔开。该属性默认为一个空数组,即不做限制。
     26             //max_file_size:用来限定上传文件的大小,如果文件体积超过了该值,则不能被选取。值可以为一个数字,单位为b,也可以是一个字符串,由数字和单位组成,如'200kb'
     27             //prevent_duplicates:是否允许选取重复的文件,为true时表示不允许,为false时表示允许,默认为false。如果两个文件的文件名和大小都相同,则会被认为是重复的文件
     28             prevent_duplicates: true
     29         }
     30         // multi_selection:是否可以在文件浏览对话框中选择多个文件,true为可以,false为不可以。默认true,即可以选择多个文件。需要注意的是,在某些不支持多选文件的环境中,默认值是false。比如在ios7的safari浏览器中,由于存在bug,造成不能多选文件。当然,在html4上传方式中,也是无法多选文件的。 
     31     },
     32     /**
     33      * @cfg {String} emptyText
     34      * Overridden to undefined as {@link #emptyText} is not supported with {@link #inputType inputType}:'file' and should be avoided.
     35      * The default text to place into an empty field.
     36      */
     37     emptyText: undefined,
     38 
     39     needArrowKeys: false,
     40 
     41     triggers: {
     42         //禁用时显示的按钮
     43         //因为上传按钮禁用效果无效,所以在禁用时显示另外一个按钮
     44         //这样就可以避免禁用按钮失效的bug
     45         disableButton: {
     46             type: 'component',
     47             hideOnReadOnly: false,
     48             hidden: true,
     49             // Most form fields prevent the default browser action on mousedown of the trigger.
     50             // This is intended to prevent the field's input element from losing focus when
     51             // the trigger is clicked.  File fields disable this behavior because:
     52             // 1. The input element does not receive focus when the field is focused. The button does.
     53             // 2. Preventing the default action of touchstart (translated from mousedown
     54             // on mobile browsers) prevents the browser's file dialog from opening.
     55             preventMouseDown: false
     56         },
     57         filebutton: {
     58             type: 'component',
     59             hideOnReadOnly: false,
     60             // Most form fields prevent the default browser action on mousedown of the trigger.
     61             // This is intended to prevent the field's input element from losing focus when
     62             // the trigger is clicked.  File fields disable this behavior because:
     63             // 1. The input element does not receive focus when the field is focused. The button does.
     64             // 2. Preventing the default action of touchstart (translated from mousedown
     65             // on mobile browsers) prevents the browser's file dialog from opening.
     66             preventMouseDown: false
     67         }
     68     },
     69 
     70     //<locale>
     71     /**
     72      * @cfg {String} buttonText
     73      * The button text to display on the upload button. Note that if you supply a value for
     74      * {@link #buttonConfig}, the buttonConfig.text value will be used instead if available.
     75      */
     76     buttonText: '选择文件',
     77     //</locale>
     78     /**
     79      * @cfg {Boolean} buttonOnly
     80      * True to display the file upload field as a button with no visible text field. If true, all
     81      * inherited Text members will still be available.
     82      */
     83     buttonOnly: false,
     84 
     85     /**
     86      * @cfg {Number} buttonMargin
     87      * The number of pixels of space reserved between the button and the text field. Note that this only
     88      * applies if {@link #buttonOnly} = false.
     89      */
     90     buttonMargin: 3,
     91 
     92     /**
     93      * @cfg {Boolean} clearOnSubmit
     94      * 提交后清除值
     95      */
     96     clearOnSubmit: true,
     97 
     98     /**
     99      * @private
    100      */
    101     extraFieldBodyCls: Ext.baseCSSPrefix + 'form-file-wrap',
    102 
    103     /**
    104      * @private
    105      */
    106     inputCls: Ext.baseCSSPrefix + 'form-text-file',
    107 
    108     /**
    109      * @cfg {Boolean} [readOnly=true]
    110      *只读,禁止修改
    111      */
    112     readOnly: true,
    113 
    114     /**
    115      * @cfg {Boolean} editable
    116      * @inheritdoc
    117      */
    118     editable: false,
    119     //form表单中不提交值
    120     submitValue: true,
    121 
    122     /**
    123      * Do not show hand pointer over text field since file choose dialog is only shown when clicking in the button
    124      * @private
    125      */
    126     triggerNoEditCls: '',
    127 
    128     /**
    129      * @private
    130      * Extract the file element, button outer element, and button active element.
    131      */
    132     childEls: ['browseButtonWrap'],
    133 
    134     /**
    135      * @private 创建上传按钮
    136      */
    137     applyTriggers: function (triggers) {
    138         var me = this,
    139         triggerCfg = (triggers || {}).filebutton,
    140         disableCfg = triggers.disableButton;
    141         //增加禁用按钮
    142         if (disableCfg) {
    143             disableCfg.component = Ext.apply({
    144                 xtype: 'button',
    145                 ownerCt: me,
    146                 id: me.id + '-disableButton',
    147                 ui: me.ui,
    148                 disabled: true,
    149                 text: me.buttonText
    150             })
    151         }
    152         //增加上传按钮
    153         if (triggerCfg) {
    154             triggerCfg.component = Ext.apply({
    155                 xtype: 'button',
    156                 ownerCt: me,
    157                 id: me.id + '-button',
    158                 ui: me.ui,
    159                 disabled: me.disabled,
    160                 text: me.buttonText,
    161                 //设置margin-left
    162                 style: me.buttonOnly ? '' : me.getButtonMarginProp() + me.buttonMargin + 'px',
    163                 listeners: {
    164                     scope: me,
    165                     render: me.createPlup
    166                 }
    167             },
    168             me.buttonConfig);
    169 
    170             return me.callParent([triggers]);
    171         }
    172             // <debug>
    173         else {
    174             Ext.raise(me.$className + ' requires a valid trigger config containing "button" specification');
    175         }
    176         // </debug>
    177     },
    178 
    179     /**
    180      * @private
    181      */
    182     onRender: function () {
    183         var me = this,
    184         inputEl, button, buttonEl, trigger;
    185 
    186         me.callParent(arguments);
    187 
    188         inputEl = me.inputEl;
    189         //它不应该有name
    190         inputEl.dom.name = '';
    191 
    192         //有些浏览器会显示在该领域的闪烁的光标,即使它是只读的。如果我们有这样的事情
    193         //获得焦点,就转发给我们focusEl。还注意到,在IE中,文件输入作为处理
    194         //2元素Tab键的目的(文本,然后按钮)。所以,当你通过TAB键,这将需要2
    195         //标签才能到下一个字段。据我知道有没有办法解决这个在任何一种合理的方式。
    196         inputEl.on('focus', me.onInputFocus, me);
    197         inputEl.on('mousedown', me.onInputMouseDown, me);
    198         //获取上传按钮
    199         trigger = me.getTrigger('filebutton');
    200         button = me.button = trigger.component;
    201         buttonEl = button.el;
    202         if (me.buttonOnly) {
    203             me.inputWrap.setDisplayed(false);
    204             me.shrinkWrap = 3;
    205         }
    206 
    207         // Ensure the trigger element is sized correctly upon render
    208         trigger.el.setWidth(buttonEl.getWidth() + buttonEl.getMargin('lr'));
    209         if (Ext.isIE) {
    210             me.button.getEl().repaint();
    211         }
    212     },
    213     /**
    214      * Gets the markup to be inserted into the subTplMarkup.
    215      */
    216     getTriggerMarkup: function () {
    217         console.log('getTriggerMarkup');
    218         return '<td id="' + this.id + '-browseButtonWrap" data-ref="browseButtonWrap" role="presentation"></td>';
    219     },
    220     onShow: function () {
    221         this.callParent();
    222         //如果我们开始了隐藏,按钮可能有一个搞砸布局
    223         //因为我们不像个容器
    224         this.button.updateLayout();
    225     },
    226     //创建上传控件
    227     createPlup: function (btn) {
    228         var me = this,
    229         //上传配置
    230         config = me.pluploadConfig,
    231         //name值
    232         name = me.getName(),
    233         //设置上传地址
    234         url = me.url,
    235         uploader;
    236         //获取当前按钮id
    237         config.browse_button = btn.getId();
    238         //指定文件上传时文件域的名称,默认为file,例如在php中你可以使用$_FILES['file']来获取上传的文件信息
    239         if (name) {
    240             config.file_data_name = name;
    241         }
    242         if (url) {
    243             config.url = url;
    244         }
    245         //上传文件最大数量限制为1时,选择文件只能选择一个
    246         if (me.maxFileCount === 1) {
    247             config.multi_selection = false;
    248         }
    249 
    250         //创建上传对象
    251         uploader = me.uploader = new plupload.Uploader(config);
    252         //初始化
    253         uploader.init();
    254         //监听错误文件被添加到上传队列时
    255         uploader.bind('FilesAdded',
    256         function (uploader, files) {
    257             me.filesAdded(uploader, files);
    258         });
    259         //监听错误
    260         //-602 重复文件
    261         uploader.bind('Error',
    262         function (uploader, file) {
    263             var code = file.code;
    264             if (code === -200) {
    265                 //上传失败
    266                 me.loadedFailure(uploader, {
    267                     message: file.message
    268                 });
    269             } else {
    270                 //抛出内部错误
    271                 me.markInvalid(file.message);
    272             }
    273         });
    274         //上传完成
    275         uploader.bind('FileUploaded',
    276         function (loader, file, response) {
    277             response = Ext.decode(response.response);
    278             if (response.success) {
    279                 //上传成功
    280                 me.loadedSuccess(response);
    281             } else {
    282                 //上传失败
    283                 me.loadedFailure(loader, response);
    284             }
    285         });
    286         //会在文件上传过程中不断触发,可以用此事件来显示上传进度 
    287         uploader.bind('UploadProgress',
    288         function (loader, file) {
    289              Ext.Msg.updateProgress(loader.total.percent / 100, loader.total.percent + '%', '正在上传:' + file.name);
    290             //console.log(loader.total.percent);
    291             if (loader.total.percent == 100) {
    292                 Ext.Msg.wait('上传成功,正在处理数据...','上传文件');
    293             } 
    294         });
    295     },
    296     //文件被添加到上传队列
    297     //uploader 上传对象
    298     //files 当前选中文件组
    299     filesAdded: function (uploader, files) {
    300         var me = this,
    301         //上传文件最大数量限制
    302         maxFileCount = me.maxFileCount,
    303         //现有文件(包括新选择的文件)
    304         oldFiles = uploader.files,
    305         //现有文件总数
    306         length = oldFiles.length,
    307         i, count;
    308 
    309         //上传文件最大数量限制为1,并且onlyOne为true时
    310         if (maxFileCount === 1 && me.onlyOne) {
    311             length = length - 2;
    312             //移除除最新文件之外所有文件
    313             for (i = length; i >= 0; i--) {
    314                 uploader.removeFile(oldFiles[i]);
    315             }
    316             //设置文本框显示值
    317             me.setValue(oldFiles[0].name);
    318         } else {
    319             //文件数量超过或等于最大限制,禁用文件选择
    320             if (length >= maxFileCount) {
    321                 count = length - maxFileCount;
    322                 //从files中移除多于最大数量限制的文件,从最新选择的文件开始移除
    323                 for (i = 0; i < count; i++) {
    324                     files.pop();
    325                 }
    326                 me.onDisable();
    327             }
    328             length = length - 1;
    329             maxFileCount = maxFileCount - 1;
    330             //移除多于最大数量限制的文件,从最新选择的文件开始移除
    331             for (i = length; i > maxFileCount; i--) {
    332                 uploader.removeFile(oldFiles[i]);
    333             }
    334             //设置文本框显示值
    335             me.setValue(files[0].name);
    336             //抛出事件,供FileList使用
    337             me.fireEvent('addField', files);
    338         }
    339     },
    340     //移除文件
    341     removeFile: function (file) {
    342         var me = this,
    343         uploader = me.uploader,
    344         files;
    345         //移除文件
    346         uploader.removeFile(file);
    347         files = uploader.files;
    348         //取消禁用
    349         me.onEnable();
    350         //设置文本框的值
    351         if (uploader.files.length <= 0) {
    352             me.setValue(null);
    353         } else {
    354             me.setValue(files[0].name);
    355         }
    356     },
    357     submit: function (params) {
    358         var me = this,
    359         url = params.url,
    360         waitMsg = params.waitMsg || '正在上传',
    361         optionParams = params.params,
    362         uploader = me.uploader;
    363         //设置上传地址
    364         if (url) {
    365             uploader.setOption('url', url);
    366         }
    367         //设置参数
    368         if (optionParams) {
    369             uploader.setOption('multipart_params', optionParams);
    370         }
    371         //上传成功执行方法
    372         me.success = params.success || Ext.emptyFn;
    373         //上传失败执行方法
    374         me.failure = params.failure || Ext.emptyFn;
    375         uploader.start();
    376         Ext.Msg.progress('上传文件', waitMsg);
    377     },
    378     //上传成功
    379     loadedSuccess: function (response) {
    380         Ext.MessageBox.hide();
    381         this.reset();
    382         //抛出事件
    383         this.fireEvent('loadedSuccess', this);
    384         //执行成功函数
    385         this.success(response);
    386     },
    387     //上传失败
    388     loadedFailure: function (loader, response) {
    389         //停止上传
    390         loader.stop();
    391         //隐藏进度条
    392         Ext.MessageBox.hide();
    393         //重置
    394         this.reset();
    395         //抛出事件
    396         this.fireEvent('loadedFailure', this);
    397         //执行失败函数
    398         this.failure(response);
    399     },
    400     //上传成功执行,submit方法回调
    401     success: Ext.emptyFn,
    402     //上传失败执行,submit方法回调
    403     failure: Ext.emptyFn,
    404     //重置上传控件
    405     reset: function () {
    406         var uploader = this.uploader,
    407         files = uploader.files,
    408         //现有文件总数
    409         length = files.length - 1,
    410         i;
    411         //移除所有文件
    412         for (i = length; i > -1; i--) {
    413             uploader.removeFile(files[i]);
    414         }
    415         this.onEnable();
    416         this.callParent();
    417     },
    418     //禁用控件tab键切换功能
    419     getSubTplData: function (fieldData) {
    420         var data = this.callParent([fieldData]);
    421         //因为它是上传控件不应该获取焦点;
    422         //然而input元素自然是可聚焦,所以我们必须
    423         //由它的tabIndex设置为-1停用。
    424         data.tabIdx = -1;
    425 
    426         return data;
    427     },
    428     //禁用
    429     onDisable: function () {
    430         this.callParent();
    431         this.setFileEnable(true);
    432     },
    433     //取消禁用
    434     onEnable: function () {
    435         this.callParent();
    436         this.setFileEnable(false);
    437     },
    438     //更改禁用状态
    439     setFileEnable: function (is) {
    440         var me = this;
    441         //设置上传控件是否禁用
    442         //某些情况下设置会失效,原因不明
    443         me.uploader.disableBrowse(is);
    444         //当上传按钮隐藏时显示一个假按钮
    445         //上传按启用时隐藏加按钮
    446         //这个解决方案是为了避免上面说的禁用失效问题
    447         me.getTrigger('disableButton').setHidden(!is);
    448         me.getTrigger('filebutton').setHidden(is);
    449         //重绘布局
    450         me.updateLayout();
    451     },
    452     //销毁
    453     onDestroy: function () {
    454         this.uploader.destroy();
    455         this.callParent();
    456     },
    457     restoreInput: function (el) {
    458         //如果我们不渲染,我们不需要做任何事情,它会创建
    459         //当我们刷新到DOM。
    460         if (this.rendered) {
    461             var button = this.button;
    462             button.restoreInput(el);
    463             this.fileInputEl = button.fileInputEl;
    464         }
    465     },
    466     getButtonMarginProp: function () {
    467         return 'margin-left:';
    468     },
    469     //输入框获得焦点
    470     onInputFocus: function () {
    471         this.focus();
    472         //从只读输入元素切换焦点文件输入
    473         //结果在文件输入的不正确的定位。
    474         //添加和删除位置:相对有助于解决这个问题。
    475         //见https://sencha.jira.com/browse/EXTJS-18933
    476         if (Ext.isIE9m) {
    477             this.fileInputEl.addCls(Ext.baseCSSPrefix + 'position-relative');
    478             this.fileInputEl.removeCls(Ext.baseCSSPrefix + 'position-relative');
    479         }
    480     },
    481     //点击输入框
    482     onInputMouseDown: function (e) {
    483         //console.log('onInputMouseDown');
    484         //有些浏览器将显示即使输入是只读的光标,
    485         //这将在inputEl之间聚焦随后的聚焦跳跃的短瞬间
    486         //和文件按钮是可见的。 
    487         //从闪烁的重点消除防止inputEl。
    488         e.preventDefault();
    489 
    490         this.focus();
    491     },
    492     privates: {
    493         getFocusEl: function () {
    494             return this.button;
    495         },
    496 
    497         getFocusClsEl: Ext.privateFn
    498     }
    499 });


    用法等同form.submit()方法,获取控件后plupFile.submit()即可提交,可能有坑

      1 //自定义批量上传预览控件
      2 //isUpload为true时每选择一个文件都会触发onAddField事件,需要自行处理上传,多用于修改场景
      3 //isUpload为false时每选择一个文件都会在本地自增file控件,最后在表单中手动批量提交
      4 Ext.define('ux.plup.FileList', {
      5     extend: 'Ext.container.Container',
      6     alias: ['widget.plupFileList'],
      7     requires: ['Ext.DataView', 'ux.plup.File'],
      8     //样式
      9     cls: 'uxFileList',
     10     config: {
     11         //数据
     12         data: null,
     13         //预览视图
     14         dataview: {
     15             itemTpl: new Ext.XTemplate('<div class="thumb-wrap bb" style="background-image:url({img});">', '<button type="button" class="x-fa fa-trash"></button>', '</div>', '<p>{name}</p>')
     16         },
     17         //上传控件配置
     18         uploaderField: {
     19             onlyOne: false,
     20             buttonOnly: true,
     21             //提交后清除
     22             clearOnSubmit: false,
     23             fieldLabel: '上传文件',
     24             msgTarget: 'under'
     25         },
     26         //uploader配置
     27         pluploadConfig:null
     28     },
     29     //是否立即上传
     30     isUpload: false,
     31     //是否只能查看
     32     isSee: false,
     33     //当前文件总数
     34     fieldCount:0,
     35     //上传文件数量限制,默认一个
     36     maxFileCount: 1,
     37     //默认预览图片路径,上传文件非图片时使用
     38     preview: {
     39         //文件
     40         file: 'classic/resources/images/file.png',
     41         //视频
     42         video: 'classic/resources/images/video.jpg'
     43     },
     44     //初始化
     45     initComponent: function () {
     46         var me = this;
     47         me.callParent(arguments);
     48         //新增上传控件、图片列表
     49         me.add([me.getUploaderField(), me.getDataview()]);
     50     },
     51     //设置isSee
     52     setIsSee: function (isSee) {
     53         this.isSee = isSee;
     54     },
     55     //设置isUpload
     56     setIsUpload: function (isUpload) {
     57         this.isUpload = isUpload;
     58     },
     59     /*创建上传控件*/
     60     applyUploaderField: function (config) {
     61         config.maxFileCount = this.maxFileCount;
     62         return Ext.factory(config, ux.plup.File, this.getUploaderField());
     63     },
     64     /*更新上传控件*/
     65     updateUploaderField: function (newItem) {
     66         if (newItem) {
     67             //监听上传控件
     68             newItem.on({
     69                 scope: this,
     70                 addField: 'onAddField',
     71                 loadedFailure: 'removeAll'
     72             });
     73         }
     74     },
     75     //更新上传控件配置
     76     updatePluploadConfig: function (option) {
     77         if (option) {
     78             var uploaderField = this.getUploaderField(),
     79                 uploader = uploaderField.uploader;
     80             uploader.setOption(option);
     81             uploaderField.reset();
     82             this.removeAll();
     83         }
     84     },
     85     //选择文件完成
     86     onAddField: function (files) {
     87         var me = this,
     88            length = files.length,
     89            i;
     90         if (me.isUpload) {
     91             //抛出事件
     92             me.fireEvent('onAddField', me, files);
     93         } else {
     94             //添加预览图片
     95             for (i = 0; i < length; i++) {
     96                 me.previewImage(files[i], function (file, src) {
     97                     me.addData({
     98                         //预览图片
     99                         img: src,
    100                         //文件名称
    101                         name: file.name,
    102                         file: file
    103                     });
    104                 })
    105             }
    106         }
    107     },
    108     //获取上传文件预览图
    109     //plupload中为我们提供了mOxie对象
    110     //有关mOxie的介绍和说明请看:https://github.com/moxiecode/moxie/wiki/API
    111     previewImage: function (file, callback) {
    112         //如果不是图片,返回默认预览图
    113         if (!file || !/image\//.test(file.type)) {
    114             var url = this.preview.file;
    115             //如果是视频格式
    116             if (/video\//.test(file.type)) {
    117                 url = this.preview.video;
    118             } 
    119             callback && callback(file, url);
    120         };
    121         //确保文件是图片
    122         if (file.type === 'image/gif') {
    123             //gif使用FileReader进行预览,因为mOxie.Image只支持jpg和png
    124             var fr = new mOxie.FileReader();
    125             fr.onload = function () {
    126                 callback && callback(file, fr.result);
    127                 fr.destroy();
    128                 fr = null;
    129             }
    130             fr.readAsDataURL(file.getSource());
    131         } else {
    132             var preloader = new mOxie.Image();
    133             preloader.onload = function () {
    134                 ////先压缩一下要预览的图片,宽300,高300
    135                 //preloader.downsize(300, 300);
    136                 var imgsrc = preloader.type == 'image/jpeg' ? preloader.getAsDataURL('image/jpeg', 80) : preloader.getAsDataURL(); //得到图片src,实质为一个base64编码的数据
    137                 callback && callback(file, imgsrc); //callback传入的参数为预览图片的url
    138                 preloader.destroy();
    139                 preloader = null;
    140             };
    141             preloader.load(file.getSource());
    142         }
    143     },
    144     /*创建图片列表*/
    145     applyDataview: function (config) {
    146         return Ext.factory(config, Ext.DataView, this.getDataview());
    147     },
    148     /* 更新图片列表*/
    149     updateDataview: function (newItem) {
    150         if (newItem) {
    151             //监听预览列表
    152             newItem.on({
    153                 itemclick: 'itemclick',
    154                 itemdblclick: 'itemdblclick',
    155                 scope: this
    156             });
    157         }
    158     },
    159     //单击删除
    160     itemclick: function (t, record, item, index, e) {
    161         var me = this,
    162         store = t.getStore();
    163         //点击删除按钮才执行
    164         if (!me.isSee && e.target.tagName === 'BUTTON') {
    165             Ext.MessageBox.confirm('删除确认', '确认删除?',
    166             function (btnText) {
    167                 if (btnText === 'yes') {
    168                     me.removeFile(me, store, record);
    169                 }
    170             }, me);
    171         }
    172     },
    173     //双击触发事件
    174     itemdblclick: function (t, record, item, index, e) {
    175         var me = this;
    176         if (e.target.tagName !== 'BUTTON') {
    177             me.fireEvent('onItemDbClick', me, record);
    178         }
    179     },
    180     //新增图片
    181     addData: function (data) {
    182         var me = this,
    183         store = me.getStore(), //获取最大限制
    184         maxFileCount = me.maxFileCount;
    185         if (store && store.storeId !== 'ext-empty-store') {
    186             //已有数据,新增
    187             store.add(data);
    188             if (!data.file) {
    189                 //检测数目
    190                 me.fieldCount = me.fieldCount || 0;
    191                 //总数加1
    192                 me.fieldCount++;
    193                 //如果达到最大限制禁用
    194                 if (me.fieldCount >= maxFileCount) {
    195                     me.onDisable();
    196                 }
    197                 me.setValue(data.name);
    198             }
    199         } else {
    200             //没有数据,创建
    201             me.setData([data]);
    202         }
    203     },
    204     /*创建data*/
    205     applyData: function (data) {
    206         return data;
    207     },
    208     /*更新data*/
    209     updateData: function (data) {
    210         if (data && data.length > 0) {
    211             //有数据则创建store
    212             var me = this,
    213             dataview = me.getDataview(),
    214             //获取最大限制
    215             maxFileCount = me.maxFileCount;
    216             dataview.setStore(Ext.create('Ext.data.Store', {
    217                 data: data,
    218                 autoDestroy: true
    219             }));
    220             me.fieldCount = data.length;
    221             //如果达到最大限制禁用
    222             if (me.fieldCount >= maxFileCount) {
    223                 me.onDisable();
    224             }
    225             me.setValue(data[0].name);
    226         }
    227     },
    228     //获取所有数据
    229     getStore: function () {
    230         return this.getDataview().getStore();
    231     },
    232     //清除所有数据
    233     removeAll: function () {
    234         var store = this.getStore();
    235         if (store) {
    236             store.removeAll();
    237         }
    238     },
    239     //移除单个文件
    240     removeFile: function (me, store, record) {
    241         var file = record.get('file'),
    242             uploaderField = this.getUploaderField();
    243         if (file) {
    244             uploaderField.removeFile(record.get('file'));
    245         } else {
    246             me.onEnable();
    247         }
    248         me.fieldCount--;
    249         store.remove(record);
    250         if (me.fieldCount<=0) {
    251             uploaderField.setValue(null);
    252         } else {
    253             uploaderField.setValue(store.getAt(0).get('name'));
    254         }
    255     },
    256     //上传附件
    257     submit: function (params) {
    258         this.getUploaderField().submit(params);
    259     },
    260     //禁用
    261     onDisable: function () {
    262         var file = this.getUploaderField();
    263         file.onDisable();
    264     },
    265     //取消禁用
    266     onEnable: function () {
    267         this.getUploaderField().onEnable();
    268     },
    269     //设置文本框的值
    270     setValue: function (value) {
    271         this.getUploaderField().setValue(value);
    272     }
    273 
    274 });

     

    展开全文
  • 效果如图,亲测6.2.1版本可用,用法同时间选择控件 1 //只选择年的控件 2 Ext.define('ux.picker.Year', { 3 extend: 'Ext.Component', 4 alias: 'widget.... 5 alternateClassName: 'ux.uxYe...

    效果如图,亲测6.2.1版本可用,用法同时间选择控件

     

      1 //只选择年的控件
      2 Ext.define('ux.picker.Year', {
      3     extend: 'Ext.Component',
      4     alias: 'widget.uxYearpicker',
      5     alternateClassName: 'ux.uxYearpicker',
      6     cls: 'uxYearpicker',
      7     isYearPicker: true,
      8 
      9     focusable: true,
     10 
     11     childEls: [
     12         'bodyEl', 'prevEl', 'nextEl', 'yearEl'
     13     ],
     14 
     15     renderTpl: [
     16         '<div id="{id}-bodyEl" data-ref="bodyEl" class="{baseCls}-body">',
     17         '<div id="{id}-yearEl" data-ref="yearEl" class="{baseCls}-years">',
     18         '<div class="{baseCls}-yearnav">',
     19         '<div class="{baseCls}-yearnav-button-ct">',
     20         '<a id="{id}-prevEl" data-ref="prevEl" class="{baseCls}-yearnav-button {baseCls}-yearnav-prev" hidefocus="on" role="button"></a>',
     21         '</div>',
     22         '<div class="{baseCls}-yearnav-button-ct">',
     23         '<a id="{id}-nextEl" data-ref="nextEl" class="{baseCls}-yearnav-button {baseCls}-yearnav-next" hidefocus="on" role="button"></a>',
     24         '</div>',
     25         '</div>',
     26         '<tpl for="years">',
     27         '<div class="{parent.baseCls}-item {parent.baseCls}-year">',
     28         '<a hidefocus="on" class="{parent.baseCls}-item-inner" role="button">{.}</a>',
     29         '</div>',
     30         '</tpl>',
     31         '</div>',
     32         '<div class="' + Ext.baseCSSPrefix + 'clear"></div>',
     33         '<tpl if="showButtons">',
     34         '<div class="{baseCls}-buttons">{%',
     35         'var me=values.$comp, okBtn=me.okBtn, cancelBtn=me.cancelBtn;',
     36         'okBtn.ownerLayout = cancelBtn.ownerLayout = me.componentLayout;',
     37         'okBtn.ownerCt = cancelBtn.ownerCt = me;',
     38         'Ext.DomHelper.generateMarkup(okBtn.getRenderTree(), out);',
     39         'Ext.DomHelper.generateMarkup(cancelBtn.getRenderTree(), out);',
     40         '%}</div>',
     41         '</tpl>',
     42         '</div>'
     43     ],
     44 
     45     //<locale>
     46     /**
     47      * @cfg {String} okText The text to display on the ok button.
     48      */
     49     okText: '确定',
     50     //</locale>
     51 
     52     //<locale>
     53     /**
     54      * @cfg {String} cancelText The text to display on the cancel button.
     55      */
     56     cancelText: '取消',
     57     //</locale>
     58 
     59     /**
     60      * @cfg {String} [baseCls='x-monthpicker']
     61      *  The base CSS class to apply to the picker element.
     62      */
     63     baseCls: Ext.baseCSSPrefix + 'monthpicker',
     64 
     65     /**
     66      * @cfg {Boolean} showButtons True to show ok and cancel buttons below the picker.
     67      */
     68     showButtons: true,
     69 
     70     /**
     71      * @cfg {String} [selectedCls='x-monthpicker-selected'] The class to be added to selected items in the picker.
     72      */
     73 
     74     /**
     75      * @cfg {Date/Number[]} value The default value to set. See {@link #setValue}
     76      */
     77 
     78     /**
     79      * @cfg {String}
     80      * The {@link Ext.button.Button#ui} to use for the month picker's footer buttons.
     81      */
     82     footerButtonUI: 'default',
     83 
     84     measureWidth: 35,
     85     measureMaxHeight: 20,
     86 
     87     // used when attached to date picker which isnt showing buttons
     88     smallCls: Ext.baseCSSPrefix + 'monthpicker-small',
     89 
     90     /**
     91      * @private
     92      */
     93     totalYears: 10,
     94     yearOffset: 5, // 10 years in total, 2 per row
     95     monthOffset: 6, // 12 months, 2 per row
     96     alignOnScroll: false,
     97 
     98     /**
     99      * @event cancelclick
    100      * Fires when the cancel button is pressed.
    101      * @param {Ext.picker.Month} this
    102      */
    103 
    104     /**
    105      * @event monthclick
    106      * Fires when a month is clicked.
    107      * @param {Ext.picker.Month} this
    108      * @param {Array} value The current value
    109      */
    110 
    111     /**
    112      * @event monthdblclick
    113      * Fires when a month is clicked.
    114      * @param {Ext.picker.Month} this
    115      * @param {Array} value The current value
    116      */
    117 
    118     /**
    119      * @event okclick
    120      * Fires when the ok button is pressed.
    121      * @param {Ext.picker.Month} this
    122      * @param {Array} value The current value
    123      */
    124 
    125     /**
    126      * @event select
    127      * Fires when a month/year is selected.
    128      * @param {Ext.picker.Month} this
    129      * @param {Array} value The current value
    130      */
    131 
    132     /**
    133      * @event yearclick
    134      * Fires when a year is clicked.
    135      * @param {Ext.picker.Month} this
    136      * @param {Array} value The current value
    137      */
    138 
    139     /**
    140      * @event yeardblclick
    141      * Fires when a year is clicked.
    142      * @param {Ext.picker.Month} this
    143      * @param {Array} value The current value
    144      */
    145 
    146     /**
    147      * @inheritdoc
    148      * @private
    149      */
    150     initComponent: function () {
    151         var me = this;
    152 
    153         me.selectedCls = me.baseCls + '-selected';
    154 
    155         if (me.small) {
    156             me.addCls(me.smallCls);
    157         }
    158         me.setValue(me.value);
    159         me.activeYear = me.getYear(new Date().getFullYear() - 4, -4);
    160 
    161         if (me.showButtons) {
    162             me.okBtn = new Ext.button.Button({
    163                 ui: me.footerButtonUI,
    164                 text: me.okText,
    165                 handler: me.onOkClick,
    166                 scope: me
    167             });
    168             me.cancelBtn = new Ext.button.Button({
    169                 ui: me.footerButtonUI,
    170                 text: me.cancelText,
    171                 handler: me.onCancelClick,
    172                 scope: me
    173             });
    174         }
    175 
    176         this.callParent();
    177     },
    178 
    179     /**
    180      * @inheritdoc
    181      * @private
    182      */
    183     beforeRender: function () {
    184         var me = this;
    185 
    186         if (me.padding && !me.width) {
    187             me.cacheWidth();
    188         }
    189 
    190         me.callParent();
    191 
    192         Ext.apply(me.renderData, {
    193             years: me.getYears(),
    194             showButtons: me.showButtons
    195         });
    196     },
    197 
    198     cacheWidth: function () {
    199         var me = this,
    200             padding = me.parseBox(me.padding),
    201             widthEl = Ext.getBody().createChild({
    202                 cls: me.baseCls + ' ' + me.borderBoxCls,
    203                 style: 'position:absolute;top:-1000px;left:-1000px;',
    204                 html: '&nbsp;' // required for opera 11.64 to measure a width
    205             });
    206 
    207         me.self.prototype.width = widthEl.getWidth() + padding.left + padding.right;
    208         widthEl.destroy();
    209     },
    210 
    211     /**
    212      * @inheritdoc
    213      * @private
    214      */
    215     afterRender: function () {
    216         var me = this,
    217             body = me.bodyEl;
    218 
    219         me.callParent();
    220 
    221         me.el.on('mousedown', me.onElClick, me, {
    222             translate: false
    223         });
    224 
    225         body.on({
    226             scope: me,
    227             click: 'onBodyClick',
    228             dblclick: 'onBodyClick'
    229         });
    230 
    231         // keep a reference to the year/month elements since we'll be re-using them
    232         me.years = body.select('.' + me.baseCls + '-year a');
    233 
    234         me.backRepeater = new Ext.util.ClickRepeater(me.prevEl, {
    235             handler: Ext.Function.bind(me.adjustYear, me, [-me.totalYears])
    236         });
    237 
    238         me.prevEl.addClsOnOver(me.baseCls + '-yearnav-prev-over');
    239         me.nextRepeater = new Ext.util.ClickRepeater(me.nextEl, {
    240             handler: Ext.Function.bind(me.adjustYear, me, [me.totalYears])
    241         });
    242         me.nextEl.addClsOnOver(me.baseCls + '-yearnav-next-over');
    243         me.updateBody();
    244 
    245     },
    246 
    247     /**
    248      * Set the value for the picker.
    249      * @param {Date/Number[]} value The value to set. It can be a Date object, where the month/year will be extracted, or
    250      * it can be an array, with the month as the first index and the year as the second.
    251      * @return {Ext.picker.Month} this
    252      */
    253     setValue: function (value) {
    254         var me = this,
    255             active = me.activeYear,
    256             year;
    257 
    258         if (!value) {
    259             me.value = [null, null];
    260         } else if (Ext.isDate(value)) {
    261             me.value = [value.getMonth(), value.getFullYear()];
    262         } else {
    263             me.value = [value[0], value[1]];
    264         }
    265 
    266         if (me.rendered) {
    267             year = me.value[1];
    268             if (year !== null) {
    269                 if ((year < active || year > active + me.yearOffset)) {
    270                     me.activeYear = year - me.yearOffset + 1;
    271                 }
    272             }
    273             me.updateBody();
    274         }
    275 
    276         return me;
    277     },
    278 
    279     /**
    280      * Gets the selected value. It is returned as an array [month, year]. It may
    281      * be a partial value, for example [null, 2010]. The month is returned as
    282      * 0 based.
    283      * @return {Number[]} The selected value
    284      */
    285     getValue: function () {
    286         return this.value;
    287     },
    288 
    289     /**
    290      * Checks whether the picker has a selection
    291      * @return {Boolean} Returns true if both a month and year have been selected
    292      */
    293     hasSelection: function () {
    294         var value = this.value;
    295         return value[0] !== null && value[1] !== null;
    296     },
    297 
    298     /**
    299      * Get an array of years to be pushed in the template. It is not in strict
    300      * numerical order because we want to show them in columns.
    301      * @private
    302      * @return {Number[]} An array of years
    303      */
    304     getYears: function () {
    305         var me = this,
    306             offset = me.yearOffset,
    307             start = me.activeYear, // put the "active" year on the left
    308             end = start + offset,
    309             i = start,
    310             years = [];
    311 
    312         for (; i < end; ++i) {
    313             years.push(i, i + offset);
    314         }
    315 
    316         return years;
    317     },
    318 
    319     /**
    320      * Update the years in the body based on any change
    321      * @private
    322      */
    323     updateBody: function () {
    324         var me = this,
    325             years = me.years,
    326             yearNumbers = me.getYears(),
    327             cls = me.selectedCls,
    328             value = me.getYear(null),
    329             year,
    330             yearItems, y, yLen, el;
    331 
    332         if (me.rendered) {
    333             years.removeCls(cls);
    334 
    335             yearItems = years.elements;
    336             yLen = yearItems.length;
    337 
    338             for (y = 0; y < yLen; y++) {
    339                 el = Ext.fly(yearItems[y]);
    340 
    341                 year = yearNumbers[y];
    342                 el.dom.innerHTML = year;
    343                 if (year === value) {
    344                     el.addCls(cls);
    345                 }
    346             }
    347         }
    348     },
    349 
    350     /**
    351      * Gets the current year value, or the default.
    352      * @private
    353      * @param {Number} defaultValue The default value to use if the year is not defined.
    354      * @param {Number} offset A number to offset the value by
    355      * @return {Number} The year value
    356      */
    357     getYear: function (defaultValue, offset) {
    358         var year = this.value[1];
    359         offset = offset || 0;
    360         return year === null ? defaultValue : year + offset;
    361     },
    362 
    363     onElClick: function (e) {
    364         e.stopEvent();
    365     },
    366 
    367     /**
    368      * React to clicks on the body
    369      * @private
    370      */
    371     onBodyClick: function (e, t) {
    372         var me = this,
    373             isDouble = e.type === 'dblclick';
    374 
    375         if (e.getTarget('.' + me.baseCls + '-year')) {
    376             e.stopEvent();
    377             me.onYearClick(t, isDouble);
    378         }
    379     },
    380 
    381     /**
    382      * Modify the year display by passing an offset.
    383      * @param {Number} [offset=10] The offset to move by.
    384      */
    385     adjustYear: function (offset) {
    386         if (typeof offset !== 'number') {
    387             offset = this.totalYears;
    388         }
    389         this.activeYear += offset;
    390         this.updateBody();
    391     },
    392 
    393     /**
    394      * React to the ok button being pressed
    395      * @private
    396      */
    397     onOkClick: function () {
    398         this.fireEvent('okclick', this, this.value);
    399     },
    400 
    401     /**
    402      * React to the cancel button being pressed
    403      * @private
    404      */
    405     onCancelClick: function () {
    406         this.fireEvent('cancelclick', this);
    407     },
    408 
    409     /**
    410      * React to a year being clicked
    411      * @private
    412      * @param {HTMLElement} target The element that was clicked
    413      * @param {Boolean} isDouble True if the event was a doubleclick
    414      */
    415     onYearClick: function (target, isDouble) {
    416         var me = this;
    417         me.value[1] = me.activeYear + me.resolveOffset(me.years.indexOf(target), me.yearOffset);
    418         me.updateBody();
    419         me.fireEvent('year' + (isDouble ? 'dbl' : '') + 'click', me, me.value);
    420         me.fireEvent('select', me, me.value);
    421 
    422     },
    423 
    424     /**
    425      * Returns an offsetted number based on the position in the collection. Since our collections aren't
    426      * numerically ordered, this function helps to normalize those differences.
    427      * @private
    428      * @param {Object} index
    429      * @param {Object} offset
    430      * @return {Number} The correctly offsetted number
    431      */
    432     resolveOffset: function (index, offset) {
    433         if (index % 2 === 0) {
    434             return (index / 2);
    435         }
    436         return offset + Math.floor(index / 2);
    437     },
    438 
    439     /**
    440      * @inheritdoc
    441      * @private
    442      */
    443     beforeDestroy: function () {
    444         var me = this;
    445         me.years = me.months = null;
    446         Ext.destroyMembers(me, 'backRepeater', 'nextRepeater', 'okBtn', 'cancelBtn');
    447         me.callParent();
    448     },
    449 
    450     onDestroy: function () {
    451         Ext.destroyMembers(this, 'okBtn', 'cancelBtn');
    452         this.callParent();
    453     },
    454 
    455     privates: {
    456         // Do the job of a container layout at this point even though we are not a Container.
    457         // TODO: Refactor as a Container.
    458         finishRenderChildren: function () {
    459             var me = this;
    460 
    461             this.callParent(arguments);
    462 
    463             if (this.showButtons) {
    464                 me.okBtn.finishRender();
    465                 me.cancelBtn.finishRender();
    466             }
    467         }
    468     }
    469 });
     1 //只选择年的控件
     2 Ext.define('ux.form.field.Year', {
     3     extend: 'Ext.form.field.Date',
     4     alias: 'widget.uxYearfield',
     5     xtype: 'uxYearfield',
     6     requires: ['ux.picker.Year'],
     7     format: 'Y',
     8     selectYear: new Date(),
     9     createPicker: function () {
    10         var me = this;
    11         return new ux.picker.Year({
    12             value: new Date(),
    13             renderTo: document.body,
    14             floating: true,
    15             hidden: true,
    16             focusOnShow: true,
    17             listeners: {
    18                 scope: me,
    19                 select: me.onSelect,
    20                 cancelclick: me.onCancelClick,
    21                 okclick: me.onOKClick,
    22                 yeardblclick: me.onOKClick,
    23                 monthdblclick: me.onOKClick
    24             }
    25         });
    26     },
    27     onCancelClick: function () {
    28         var me = this;
    29         me.selectYear = null;
    30         me.collapse();
    31     },
    32     onOKClick: function () {
    33         var me = this;
    34         if (me.selectYear) {
    35             me.setValue(me.selectYear);
    36             me.fireEvent('select', me, me.selectYear);
    37         }
    38         me.collapse();
    39     },
    40     onSelect: function (m, d) {
    41         var me = this;
    42         me.selectYear = new Date((d[0] + 1) + '/1/' + d[1]);
    43     }
    44 });

     

    转载于:https://www.cnblogs.com/mlzs/p/9444494.html

    展开全文
  • 1 /** 2 * A Picker field that contains a tree panel on its popup, enabling selection of tree nodes. 3 * 动态绑定store,修复火狐点击... 4 * 水平有限,可能有新坑 5 */ 6 Ext.define('ux.form.fiel...
  •  本周,另一项目组的一个应用系统更换服务器,由原来的HP-UX11.11迁移到HP-UX11.23上,考虑到是操作系统都是HP-UX,所以直接从源服务器把整个weblogic安装目录(包括域目录)直接复制到目标服务器上,能正常启动和...
  • HP-UX 11.23 v2 磁盘管理

    2005-04-02 22:20:00
    前几天使用了一台HP-UX的机器,OS版本是11.23 v2,CPU是IA64,算比较新的机器了 在原来的VG上增加LV,FS,使用了如下的命令: ccbhp2#[/] lvcreate -L 30000 -n lvol10 /dev/vg00 Logical volume "/dev/...
  • SAP 成都研究院还有另一位开发人员能驾驭重达 260 克的双截棍,他就是 Xu Haytham. 对于 Jerry 来说,超过200克重的棍,我就觉得运行时轨迹开始飘忽,很难驾驭了。而 Haytham 能使用这个重量级别的双截棍,让我佩服...
  • 260.570918295 +ORCL_DATA1/orcl/controlfile/current. 259.570913189 +ORCL_DATA1/orcl/datafile/example. 257.570913311 +ORCL_DATA1/orcl/datafile/indx. 270.570920045 +ORCL_DATA1/orcl/datafile/sysaux. 260....
  • 记录-蓝鲸相关知识点

    2021-02-27 09:00:08
    运维自动化工程师(BKOS)理论基础 运维自动化工程师(BKOS)理论基础 蓝鲸安装完成后,ssh登陆到蓝鲸的机器上会自动加载...定义在哪个文件 A....B....C....D....蓝鲸安装过程中,会使用一个标记文件来记录安装的步骤,它的路径是 A....B....
  • 使用URLConnection爬取评论

    万次阅读 2019-02-10 11:08:53
    whl=-1%260%260%260; l=bBN1mgHrvxpFLmphBOCwNQKXnqQTlIRRguSJGpWpi_5LUsvecl7OllzxWUv6Vj5P9zLB42mIJ0JTgFyQ5Ppf.; isg=BMPDJZxTm0CbSVClfvjWFCVzUofBKAVE096Au_WgcyLLtOHWfQtayJoiKgRfFK9y"); return headers; ...
  • SQL*LOADER支持异构,DATA PUMP只支持Oracle数据库 移动数据的方式 SQL*LOADER,DATA PUMP和外部表。 创建和使用DIRECTORY 对象 Oracle DIRECTORY 运行数据库读取操作系统文件,例如Data Pump。...
  • 【故障|监听】TNS-12518、TNS-00517和 Linux Error:32:Broken pipe 1.1 BLOG文档结构图 ...
  • 从MWC 2016看手机发展

    2016-03-24 14:32:03
    今年S7的摄像头来自索尼IMX260方案,虽然整体像素下降至1200W,但是光圈增大((f/1.7 相比S6的 f/1.9),单个像素的大小也变大(1.4 micron 相比S6的 1.12 micron),使得S6的短板夜景拍摄能力有所上升。除此之外,...
  • C++跨平台开源库 之三

    千次阅读 2017-06-14 15:44:54
    本篇文章主要介绍了”C++开源库集合 “,主要涉及到C++开源库集合 方面的内容,对于C++开源库集合 感兴趣的同学可以参考一下。 mimetic A free/GPL C++ MIME Librarymimetic is a free/GPL Email library (MIME) ...
  • 【故障•监听】TNS-12518、TNS-00517和 Linux Error:32:Broken pipe ... 【故障|监听】TNS-12518、TNS-00517和 Linux Error:32:Broken pipe ...各位技术爱好者,看完本文后,你...
  • 第一章 本篇总览   ...之前发布了一篇《Oracle_lhr_RAC 12cR1安装》,但是其中的存储并没有使用多路径,而是使用了VMware自身提供的存储。所以,年前最后一件事就是把多路径学习一下,本文介绍了OpenFiler、...
  • 软件测试工程师成长之路:掌握软件测试九大技术主题 王顺 等 编著  ISBN 978-7-121-23996-0 2014年9月出版 定价:85.00元 ...《软件测试工程师成长之路:掌握软件测试九大技术主题》以实际项目为原型、以关键...
  • 出于职业习惯,我从中悟出一点个人关于 UX设计的一些感受,可能就如庄周所言,处乎材与不材之间。 全书在编写的过程中,我们的团队始终仅有五人。书籍耗尽了团队成员几乎全部的业余时间。过程中,我们经历了人员...
  • 表空间碎片较多

    千次阅读 2014-06-19 10:35:45
    Oralce Database Health Check (Performance)--------------------------------------------------------------------------------List Contents1. 数据库概要 2. 参数文件(是spfile还是pfile) 3....
  • width : 260, fieldLabel : '*特征类型', labelAlign : 'right', id:'productFeatureTypeId',//定义上下文查找ID name : 'productFeatureTypeId',//表单提交ID hiddenName:'productFeatureTypeId', ...
  • 在这种情况下: hu,v(x,y)=gu,v∗(x,y)=1MNej2π(ux/M+vy/N)h_{u,v}(x,y)=g_{u,v}^*(x,y)=\frac{1}{\sqrt{MN}}e^{j2\pi (ux/M+vy/N)}hu,v​(x,y)=gu,v∗​(x,y)=MN ​1​ej2π(ux/M+vy/N)这里,j2=-1,*是复共轭算子...
  • (二)2019年5月6日至5月31日生产的部分进口雷克萨斯UX 260h汽车,共计892台; (三)2019年5月15日至5月31日生产的部分进口雷克萨斯LS 500h汽车,共计183台; (四)2019年5月17日至5月31日生产的部分进口雷克萨斯...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 759
精华内容 303
关键字:

ux260