4b496d79 by 任超

style:首页完成修改

1 parent 6b2f5c56
1 /**
2 * @1900-2100区间内的公历、农历互转
3 * @charset UTF-8
4 * @Author Jea杨(JJonline@JJonline.Cn)
5 * @Time 2014-7-21
6 * @Time 2016-8-13 Fixed 2033hex、Attribution Annals
7 * @Time 2016-9-25 Fixed lunar LeapMonth Param Bug
8 * @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year
9 * @Version 1.0.3
10 * @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0]
11 * @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0]
12 */
13 const calendar = {
14
15 /**
16 * 农历1900-2100的润大小信息表
17 * @Array Of Property
18 * @return Hex
19 */
20 lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,//1900-1909
21 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,//1910-1919
22 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,//1920-1929
23 0x06566, 0x0d4a0, 0x0ea50, 0x16a95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,//1930-1939
24 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,//1940-1949
25 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0,//1950-1959
26 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,//1960-1969
27 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6,//1970-1979
28 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,//1980-1989
29 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0,//1990-1999
30 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,//2000-2009
31 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,//2010-2019
32 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,//2020-2029
33 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,//2030-2039
34 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0,//2040-2049
35 /**Add By JJonline@JJonline.Cn**/
36 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0,//2050-2059
37 0x092e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4,//2060-2069
38 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0,//2070-2079
39 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160,//2080-2089
40 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252,//2090-2099
41 0x0d520],//2100
42
43 /**
44 * 公历每个月份的天数普通表
45 * @Array Of Property
46 * @return Number
47 */
48 solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
49
50 /**
51 * 天干地支之天干速查表
52 * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
53 * @return Cn string
54 */
55 Gan: ["\u7532", "\u4e59", "\u4e19", "\u4e01", "\u620a", "\u5df1", "\u5e9a", "\u8f9b", "\u58ec", "\u7678"],
56
57 /**
58 * 天干地支之地支速查表
59 * @Array Of Property
60 * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
61 * @return Cn string
62 */
63 Zhi: ["\u5b50", "\u4e11", "\u5bc5", "\u536f", "\u8fb0", "\u5df3", "\u5348", "\u672a", "\u7533", "\u9149", "\u620c", "\u4ea5"],
64
65 /**
66 * 天干地支之地支速查表<=>生肖
67 * @Array Of Property
68 * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
69 * @return Cn string
70 */
71 Animals: ["\u9f20", "\u725b", "\u864e", "\u5154", "\u9f99", "\u86c7", "\u9a6c", "\u7f8a", "\u7334", "\u9e21", "\u72d7", "\u732a"],
72
73 /**
74 * 阳历节日
75 */
76 festival: {
77 '1-1': { title: '元旦节' },
78 '2-14': { title: '情人节' },
79 '5-1': { title: '劳动节' },
80 '5-4': { title: '青年节' },
81 '6-1': { title: '儿童节' },
82 '9-10': { title: '教师节' },
83 '10-1': { title: '国庆节' },
84 '12-25': { title: '圣诞节' },
85
86 '3-8': { title: '妇女节' },
87 '3-12': { title: '植树节' },
88 '4-1': { title: '愚人节' },
89 '5-12': { title: '护士节' },
90 '7-1': { title: '建党节' },
91 '8-1': { title: '建军节' },
92 '12-24': { title: '平安夜' },
93 },
94
95 /**
96 * 农历节日
97 */
98 lFestival: {
99 '12-30': { title: '除夕' },
100 '1-1': { title: '春节' },
101 '1-15': { title: '元宵节' },
102 '2-2': { title: '龙抬头' },
103 '5-5': { title: '端午节' },
104 '7-7': { title: '七夕节' },
105 '7-15': { title: '中元节' },
106 '8-15': { title: '中秋节' },
107 '9-9': { title: '重阳节' },
108 '10-1': { title: '寒衣节' },
109 '10-15': { title: '下元节' },
110 '12-8': { title: '腊八节' },
111 '12-23': { title: '北方小年' },
112 '12-24': { title: '南方小年' },
113 },
114
115 /**
116 * 返回默认定义的阳历节日
117 */
118 getFestival () {
119 return this.festival
120 },
121
122 /**
123 * 返回默认定义的内容里节日
124 */
125 getLunarFestival () {
126 return this.lFestival
127 },
128
129 /**
130 *
131 * @param param {Object} 按照festival的格式输入数据,设置阳历节日
132 */
133 setFestival (param = {}) {
134 this.festival = param
135 },
136
137 /**
138 *
139 * @param param {Object} 按照lFestival的格式输入数据,设置农历节日
140 */
141 setLunarFestival (param = {}) {
142 this.lFestival = param
143 },
144
145 /**
146 * 24节气速查表
147 * @Array Of Property
148 * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
149 * @return Cn string
150 */
151 solarTerm: ["\u5c0f\u5bd2", "\u5927\u5bd2", "\u7acb\u6625", "\u96e8\u6c34", "\u60ca\u86f0", "\u6625\u5206", "\u6e05\u660e", "\u8c37\u96e8", "\u7acb\u590f", "\u5c0f\u6ee1", "\u8292\u79cd", "\u590f\u81f3", "\u5c0f\u6691", "\u5927\u6691", "\u7acb\u79cb", "\u5904\u6691", "\u767d\u9732", "\u79cb\u5206", "\u5bd2\u9732", "\u971c\u964d", "\u7acb\u51ac", "\u5c0f\u96ea", "\u5927\u96ea", "\u51ac\u81f3"],
152
153 /**
154 * 1900-2100各年的24节气日期速查表
155 * @Array Of Property
156 * @return 0x string For splice
157 */
158 sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f',
159 '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
160 '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa',
161 '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f',
162 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f',
163 '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa',
164 '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2',
165 '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f',
166 '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e',
167 '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
168 '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722',
169 '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f',
170 '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
171 '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
172 '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722',
173 '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f',
174 '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
175 '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
176 '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722',
177 '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
178 '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
179 '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
180 '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722',
181 '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
182 '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
183 '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
184 '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722',
185 '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
186 '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
187 '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
188 '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
189 '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
190 '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
191 '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
192 '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
193 '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
194 '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
195 '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
196 '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721',
197 '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2',
198 '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
199 '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
200 '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd',
201 '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
202 '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
203 '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
204 '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd',
205 '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
206 '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
207 '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721',
208 '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5',
209 '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722',
210 '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
211 '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
212 '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35',
213 '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
214 '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721',
215 '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd',
216 '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35',
217 '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
218 '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721',
219 '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5',
220 '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35',
221 '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
222 '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
223 '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35',
224 '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'],
225
226 /**
227 * 数字转中文速查表
228 * @Array Of Property
229 * @trans ['日','一','二','三','四','五','六','七','八','九','十']
230 * @return Cn string
231 */
232 nStr1: ["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341"],
233
234 /**
235 * 日期转农历称呼速查表
236 * @Array Of Property
237 * @trans ['初','十','廿','卅']
238 * @return Cn string
239 */
240 nStr2: ["\u521d", "\u5341", "\u5eff", "\u5345"],
241
242 /**
243 * 月份转农历称呼速查表
244 * @Array Of Property
245 * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊']
246 * @return Cn string
247 */
248 nStr3: ["\u6b63", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341", "\u51ac", "\u814a"],
249
250 /**
251 * 返回农历y年一整年的总天数
252 * @param y lunar Year
253 * @return Number
254 * @eg:var count = calendar.lYearDays(1987) ;//count=387
255 */
256 lYearDays: function (y) {
257 let i, sum = 348;
258 for (i = 0x8000; i > 0x8; i >>= 1) {
259 sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0;
260 }
261 return (sum + this.leapDays(y));
262 },
263
264 /**
265 * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0
266 * @param y lunar Year
267 * @return Number (0-12)
268 * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
269 */
270 leapMonth: function (y) { //闰字编码 \u95f0
271 return (this.lunarInfo[y - 1900] & 0xf);
272 },
273
274 /**
275 * 返回农历y年闰月的天数 若该年没有闰月则返回0
276 * @param y lunar Year
277 * @return Number (0、29、30)
278 * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
279 */
280 leapDays: function (y) {
281 if (this.leapMonth(y)) {
282 return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29);
283 }
284 return (0);
285 },
286
287 /**
288 * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
289 * @param y lunar Year
290 * @param m lunar Month
291 * @return Number (-1、29、30)
292 * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
293 */
294 monthDays: function (y, m) {
295 if (m > 12 || m < 1) {
296 return -1
297 }//月份参数从1至12,参数错误返回-1
298 return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29);
299 },
300
301 /**
302 * 返回公历(!)y年m月的天数
303 * @param y solar Year
304 * @param m solar Month
305 * @return Number (-1、28、29、30、31)
306 * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
307 */
308 solarDays: function (y, m) {
309 if (m > 12 || m < 1) {
310 return -1
311 } //若参数错误 返回-1
312 const ms = m - 1;
313 if (ms === 1) { //2月份的闰平规律测算后确认返回28或29
314 return (((y % 4 === 0) && (y % 100 !== 0) || (y % 400 === 0)) ? 29 : 28);
315 } else {
316 return (this.solarMonth[ms]);
317 }
318 },
319
320 /**
321 * 农历年份转换为干支纪年
322 * @param lYear 农历年的年份数
323 * @return Cn string
324 */
325 toGanZhiYear: function (lYear) {
326 var ganKey = (lYear - 3) % 10;
327 var zhiKey = (lYear - 3) % 12;
328 if (ganKey === 0) ganKey = 10;//如果余数为0则为最后一个天干
329 if (zhiKey === 0) zhiKey = 12;//如果余数为0则为最后一个地支
330 return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1];
331
332 },
333
334 /**
335 * 公历月、日判断所属星座
336 * @param cMonth [description]
337 * @param cDay [description]
338 * @return Cn string
339 */
340 toAstro: function (cMonth, cDay) {
341 const s = "\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf";
342 const arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22];
343 return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + "\u5ea7";//座
344 },
345
346 /**
347 * 传入offset偏移量返回干支
348 * @param offset 相对甲子的偏移量
349 * @return Cn string
350 */
351 toGanZhi: function (offset) {
352 return this.Gan[offset % 10] + this.Zhi[offset % 12];
353 },
354
355 /**
356 * 传入公历(!)y年获得该年第n个节气的公历日期
357 * @param y y公历年(1900-2100)
358 * @param n n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
359 * @return day Number
360 * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春
361 */
362 getTerm: function (y, n) {
363 if (y < 1900 || y > 2100) {
364 return -1;
365 }
366 if (n < 1 || n > 24) {
367 return -1;
368 }
369 const _table = this.sTermInfo[y - 1900];
370 const _info = [
371 parseInt('0x' + _table.substr(0, 5)).toString(),
372 parseInt('0x' + _table.substr(5, 5)).toString(),
373 parseInt('0x' + _table.substr(10, 5)).toString(),
374 parseInt('0x' + _table.substr(15, 5)).toString(),
375 parseInt('0x' + _table.substr(20, 5)).toString(),
376 parseInt('0x' + _table.substr(25, 5)).toString()
377 ];
378 const _calcDay = [
379 _info[0].substr(0, 1),
380 _info[0].substr(1, 2),
381 _info[0].substr(3, 1),
382 _info[0].substr(4, 2),
383
384 _info[1].substr(0, 1),
385 _info[1].substr(1, 2),
386 _info[1].substr(3, 1),
387 _info[1].substr(4, 2),
388
389 _info[2].substr(0, 1),
390 _info[2].substr(1, 2),
391 _info[2].substr(3, 1),
392 _info[2].substr(4, 2),
393
394 _info[3].substr(0, 1),
395 _info[3].substr(1, 2),
396 _info[3].substr(3, 1),
397 _info[3].substr(4, 2),
398
399 _info[4].substr(0, 1),
400 _info[4].substr(1, 2),
401 _info[4].substr(3, 1),
402 _info[4].substr(4, 2),
403
404 _info[5].substr(0, 1),
405 _info[5].substr(1, 2),
406 _info[5].substr(3, 1),
407 _info[5].substr(4, 2),
408 ];
409 return parseInt(_calcDay[n - 1]);
410 },
411
412 /**
413 * 传入农历数字月份返回汉语通俗表示法
414 * @param m lunar month
415 * @return Cn string
416 * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
417 */
418 toChinaMonth: function (m) { // 月 => \u6708
419 if (m > 12 || m < 1) {
420 return -1
421 } //若参数错误 返回-1
422 let s = this.nStr3[m - 1];
423 s += "\u6708";//加上月字
424 return s;
425 },
426
427 /**
428 * 传入农历日期数字返回汉字表示法
429 * @param d lunar day
430 * @return Cn string
431 * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
432 */
433 toChinaDay: function (d) { //日 => \u65e5
434 let s;
435 switch (d) {
436 case 10:
437 s = '\u521d\u5341';
438 break;
439 case 20:
440 s = '\u4e8c\u5341';
441 break;
442 case 30:
443 s = '\u4e09\u5341';
444 break;
445 default:
446 s = this.nStr2[Math.floor(d / 10)];
447 s += this.nStr1[d % 10];
448 }
449 return (s);
450 },
451
452 /**
453 * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春”
454 * @param y year
455 * @return Cn string
456 * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔'
457 */
458 getAnimal: function (y) {
459 return this.Animals[(y - 4) % 12]
460 },
461
462 /**
463 * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON
464 * !important! 公历参数区间1900.1.31~2100.12.31
465 * @param yPara solar year
466 * @param mPara solar month
467 * @param dPara solar day
468 * @return JSON object
469 * @eg:console.log(calendar.solar2lunar(1987,11,01));
470 */
471 solar2lunar: function (yPara, mPara, dPara) {
472 let y = parseInt(yPara);
473 let m = parseInt(mPara);
474 let d = parseInt(dPara);
475 //年份限定、上限
476 if (y < 1900 || y > 2100) {
477 return -1;// undefined转换为数字变为NaN
478 }
479 //公历传参最下限
480 if (y === 1900 && m === 1 && d < 31) {
481 return -1;
482 }
483
484 //未传参 获得当天
485 let objDate;
486 if (!y) {
487 objDate = new Date();
488 } else {
489 objDate = new Date(y, parseInt(m) - 1, d);
490 }
491 let i, leap = 0, temp = 0;
492 //修正ymd参数
493 y = objDate.getFullYear();
494 m = objDate.getMonth() + 1;
495 d = objDate.getDate();
496 let offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000;
497 for (i = 1900; i < 2101 && offset > 0; i++) {
498 temp = this.lYearDays(i);
499 offset -= temp;
500 }
501 if (offset < 0) {
502 offset += temp;
503 i--;
504 }
505
506 //是否今天
507 let isTodayObj = new Date(),
508 isToday = false;
509 if (isTodayObj.getFullYear() === y && isTodayObj.getMonth() + 1 === m && isTodayObj.getDate() === d) {
510 isToday = true;
511 }
512 //星期几
513 let nWeek = objDate.getDay(),
514 cWeek = this.nStr1[nWeek];
515 //数字表示周几顺应天朝周一开始的惯例
516 if (nWeek === 0) {
517 nWeek = 7;
518 }
519 //农历年
520 const year = i;
521 leap = this.leapMonth(i); //闰哪个月
522 let isLeap = false;
523
524 //效验闰月
525 for (i = 1; i < 13 && offset > 0; i++) {
526 //闰月
527 if (leap > 0 && i === (leap + 1) && isLeap === false) {
528 --i;
529 isLeap = true;
530 temp = this.leapDays(year); //计算农历闰月天数
531 } else {
532 temp = this.monthDays(year, i);//计算农历普通月天数
533 }
534 //解除闰月
535 if (isLeap === true && i === (leap + 1)) {
536 isLeap = false;
537 }
538 offset -= temp;
539 }
540 // 闰月导致数组下标重叠取反
541 if (offset === 0 && leap > 0 && i === leap + 1) {
542 if (isLeap) {
543 isLeap = false;
544 } else {
545 isLeap = true;
546 --i;
547 }
548 }
549 if (offset < 0) {
550 offset += temp;
551 --i;
552 }
553 //农历月
554 const month = i;
555 //农历日
556 const day = offset + 1;
557 //天干地支处理
558 const sm = m - 1;
559 const gzY = this.toGanZhiYear(year);
560
561 // 当月的两个节气
562 // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year`
563 const firstNode = this.getTerm(y, (m * 2 - 1));//返回当月「节」为几日开始
564 const secondNode = this.getTerm(y, (m * 2));//返回当月「节」为几日开始
565
566 // 依据12节气修正干支月
567 let gzM = this.toGanZhi((y - 1900) * 12 + m + 11);
568 if (d >= firstNode) {
569 gzM = this.toGanZhi((y - 1900) * 12 + m + 12);
570 }
571
572 //传入的日期的节气与否
573 let isTerm = false;
574 let Term = null;
575 if (firstNode === d) {
576 isTerm = true;
577 Term = this.solarTerm[m * 2 - 2];
578 }
579 if (secondNode === d) {
580 isTerm = true;
581 Term = this.solarTerm[m * 2 - 1];
582 }
583 //日柱 当月一日与 1900/1/1 相差天数
584 const dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10;
585 const gzD = this.toGanZhi(dayCyclical + d - 1);
586 //该日期所属的星座
587 const astro = this.toAstro(m, d);
588
589 const solarDate = y + '-' + m + '-' + d;
590 const lunarDate = year + '-' + month + '-' + day;
591
592 const festival = this.festival;
593 const lFestival = this.lFestival;
594
595 const festivalDate = m + '-' + d;
596 const lunarFestivalDate = month + '-' + day;
597
598 return {
599 date: solarDate,
600 lunarDate: lunarDate,
601 festival: festival[festivalDate] ? festival[festivalDate].title : null,
602 lunarFestival: lFestival[lunarFestivalDate] ? lFestival[lunarFestivalDate].title : null,
603 'lYear': year,
604 'lMonth': month,
605 'lDay': day,
606 'Animal': this.getAnimal(year),
607 'IMonthCn': (isLeap ? "\u95f0" : '') + this.toChinaMonth(month),
608 'IDayCn': this.toChinaDay(day),
609 'cYear': y,
610 'cMonth': m,
611 'cDay': d,
612 'gzYear': gzY,
613 'gzMonth': gzM,
614 'gzDay': gzD,
615 'isToday': isToday,
616 'isLeap': isLeap,
617 'nWeek': nWeek,
618 'ncWeek': "\u661f\u671f" + cWeek,
619 'isTerm': isTerm,
620 'Term': Term,
621 'astro': astro
622 };
623 },
624
625 /**
626 * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON
627 * !important! 参数区间1900.1.31~2100.12.1
628 * @param y lunar year
629 * @param m lunar month
630 * @param d lunar day
631 * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可]
632 * @return JSON object
633 * @eg:console.log(calendar.lunar2solar(1987,9,10));
634 */
635 lunar2solar: function (y, m, d, isLeapMonth) {
636 y = parseInt(y)
637 m = parseInt(m)
638 d = parseInt(d)
639 isLeapMonth = !!isLeapMonth;
640 const leapOffset = 0;
641 const leapMonth = this.leapMonth(y);
642 const leapDay = this.leapDays(y);
643 if (isLeapMonth && (leapMonth !== m)) {
644 return -1;
645 }//传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
646 if (y === 2100 && m === 12 && d > 1 || y === 1900 && m === 1 && d < 31) {
647 return -1;
648 }//超出了最大极限值
649 const day = this.monthDays(y, m);
650 let _day = day;
651 //bugFix 2016-9-25
652 //if month is leap, _day use leapDays method
653 if (isLeapMonth) {
654 _day = this.leapDays(y, m);
655 }
656 if (y < 1900 || y > 2100 || d > _day) {
657 return -1;
658 }//参数合法性效验
659
660 //计算农历的时间差
661 let offset = 0;
662 let i;
663 for (i = 1900; i < y; i++) {
664 offset += this.lYearDays(i);
665 }
666 let leap = 0, isAdd = false;
667 for (i = 1; i < m; i++) {
668 leap = this.leapMonth(y);
669 if (!isAdd) {//处理闰月
670 if (leap <= i && leap > 0) {
671 offset += this.leapDays(y);
672 isAdd = true;
673 }
674 }
675 offset += this.monthDays(y, i);
676 }
677 //转换闰月农历 需补充该年闰月的前一个月的时差
678 if (isLeapMonth) {
679 offset += day;
680 }
681 //1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
682 const strap = Date.UTC(1900, 1, 30, 0, 0, 0);
683 const calObj = new Date((offset + d - 31) * 86400000 + strap);
684 const cY = calObj.getUTCFullYear();
685 const cM = calObj.getUTCMonth() + 1;
686 const cD = calObj.getUTCDate();
687
688 return this.solar2lunar(cY, cM, cD);
689 }
690 };
691
692 export default calendar
...\ No newline at end of file ...\ No newline at end of file
1
2 <template>
3 <el-calendar v-model="date">
4 <template slot="dateCell" slot-scope="{date, data}">
5 <div :class="{ selected: isSelected(date, data) }">
6 <div class="solar">{{ data.day.split('-')[2] }}</div>
7 <div class="lunar" :class="{ festival: isFestival(date, data) }">{{ solarToLunar(date, data) }}</div>
8 </div>
9 </template>
10 </el-calendar>
11 </template>
12
13 <script>
14 import calendar from './calendar'
15 export default {
16 name: 'calendar',
17 data () {
18 return {
19 date: new Date(),
20 // 根据selectedDates设置选中日期
21 selectedDates: []
22 }
23 },
24 methods: {
25 // 是否选中日期
26 isSelected: function (slotDate, slotData) {
27 return this.selectedDates.includes(slotData.day)
28 },
29 // 是否节假日
30 isFestival (slotDate, slotData) {
31 let solarDayArr = slotData.day.split('-');
32 let lunarDay = calendar.solar2lunar(solarDayArr[0], solarDayArr[1], solarDayArr[2])
33
34 // 公历节日\农历节日\农历节气
35 let festAndTerm = [];
36 festAndTerm.push(lunarDay.festival == null ? '' : ' ' + lunarDay.festival)
37 festAndTerm.push(lunarDay.lunarFestival == null ? '' : '' + lunarDay.lunarFestival)
38 festAndTerm.push(lunarDay.Term == null ? '' : '' + lunarDay.Term)
39 festAndTerm = festAndTerm.join('')
40
41 return festAndTerm != ''
42 },
43 // 公历转农历
44 solarToLunar (slotDate, slotData) {
45 let solarDayArr = slotData.day.split('-');
46 let lunarDay = calendar.solar2lunar(solarDayArr[0], solarDayArr[1], solarDayArr[2])
47
48 // 农历日期
49 let lunarMD = lunarDay.IMonthCn + lunarDay.IDayCn
50
51 // 公历节日\农历节日\农历节气
52 let festAndTerm = [];
53 festAndTerm.push(lunarDay.festival == null ? '' : ' ' + lunarDay.festival)
54 festAndTerm.push(lunarDay.lunarFestival == null ? '' : '' + lunarDay.lunarFestival)
55 festAndTerm.push(lunarDay.Term == null ? '' : '' + lunarDay.Term)
56 festAndTerm = festAndTerm.join('')
57
58 return festAndTerm == '' ? lunarMD : festAndTerm
59 }
60 }
61 }
62 </script>
63
64 <style scoped>
65 /**隐藏上一月、本月、下一月*/
66 .el-calendar__button-group {
67 display: none;
68 }
69
70 /deep/.el-calendar__body {
71 padding: 8px;
72 }
73
74 /deep/.el-calendar-table .el-calendar-day {
75 height: auto;
76 padding: 5px;
77 }
78
79 /**月份居中*/
80 .el-calendar__title {
81 width: 100%;
82 text-align: center;
83 }
84
85 /deep/.el-calendar-table thead th {
86 padding: 0 0 6px 0 !important;
87 }
88
89 /deep/.el-calendar-day {
90 padding: 3px !important;
91 }
92
93 /deep/.el-calendar-table td.is-today {
94 font-weight: 700;
95 }
96
97 /deep/.el-calendar-table td.is-selected {
98 background-color: rgb(179, 216, 255);
99 }
100
101 /deep/.el-calendar__header {
102 padding: 8px 15px;
103 }
104
105 /**日期div的样式*/
106 .el-calendar-table tr td:first-child {
107 border-left: 0px;
108 }
109
110 .el-calendar-table td {
111 min-height: 110px;
112 min-width: 110px;
113 border-right: 0px;
114 }
115
116 .el-calendar-table td.is-selected {
117 background-color: white;
118 }
119
120 .el-calendar-table .el-calendar-day {
121 padding: 0px;
122 text-align: center;
123 }
124
125 .el-calendar-table .el-calendar-day>div {
126 text-align: center
127 }
128
129 /**日期div的样式-公历*/
130 .el-calendar-table .el-calendar-day>div .solar {
131 text-align: center;
132 margin-top: 3px;
133 }
134
135 /**日期div的样式-农历*/
136 .el-calendar-table .el-calendar-day>div .lunar {
137 padding-top: 5px;
138 font-size: 12px;
139 text-align: center;
140 margin-bottom: 5px;
141 }
142
143 /**日期div的样式-选中*/
144 .el-calendar-table .el-calendar-day>div.selected {
145 background-color: #fef2f2;
146 border: 3px solid #fb0;
147 border-radius: 20px;
148 text-align: center
149 }
150
151 /**本月周末设置为红色*/
152 /* .el-calendar-table .current:nth-last-child(-n+2) .solar {
153 color: red;
154 } */
155
156 /**本月农历设置为灰色*/
157 .el-calendar-table .current .lunar {
158 color: #606266;
159 font-size: 12px;
160 }
161
162 /**本月农历节日设置为红色*/
163 .el-calendar-table .current .lunar.festival {
164 color: red;
165 }
166
167 .el-calendar-table td {
168 border-right: none !important;
169 }
170
171 /**禁用点击效果*/
172 /*.el-calendar-table td {*/
173 /*pointer-events: none;*/
174 /*}*/
175 </style>
...\ No newline at end of file ...\ No newline at end of file
1 /**
2 * @1900-2100区间内的公历、农历互转
3 * @charset UTF-8
4 * @Author Jea杨(JJonline@JJonline.Cn)
5 * @Time 2014-7-21
6 * @Time 2016-8-13 Fixed 2033hex、Attribution Annals
7 * @Time 2016-9-25 Fixed lunar LeapMonth Param Bug
8 * @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year
9 * @Version 1.0.3
10 * @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0]
11 * @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0]
12 */
13 const calendar = {
14
15 /**
16 * 农历1900-2100的润大小信息表
17 * @Array Of Property
18 * @return Hex
19 */
20 lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,//1900-1909
21 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,//1910-1919
22 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,//1920-1929
23 0x06566, 0x0d4a0, 0x0ea50, 0x16a95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,//1930-1939
24 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,//1940-1949
25 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0,//1950-1959
26 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,//1960-1969
27 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6,//1970-1979
28 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,//1980-1989
29 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0,//1990-1999
30 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,//2000-2009
31 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,//2010-2019
32 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,//2020-2029
33 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,//2030-2039
34 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0,//2040-2049
35 /**Add By JJonline@JJonline.Cn**/
36 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0,//2050-2059
37 0x092e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4,//2060-2069
38 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0,//2070-2079
39 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160,//2080-2089
40 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252,//2090-2099
41 0x0d520],//2100
42
43 /**
44 * 公历每个月份的天数普通表
45 * @Array Of Property
46 * @return Number
47 */
48 solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
49
50 /**
51 * 天干地支之天干速查表
52 * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
53 * @return Cn string
54 */
55 Gan: ["\u7532", "\u4e59", "\u4e19", "\u4e01", "\u620a", "\u5df1", "\u5e9a", "\u8f9b", "\u58ec", "\u7678"],
56
57 /**
58 * 天干地支之地支速查表
59 * @Array Of Property
60 * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
61 * @return Cn string
62 */
63 Zhi: ["\u5b50", "\u4e11", "\u5bc5", "\u536f", "\u8fb0", "\u5df3", "\u5348", "\u672a", "\u7533", "\u9149", "\u620c", "\u4ea5"],
64
65 /**
66 * 天干地支之地支速查表<=>生肖
67 * @Array Of Property
68 * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
69 * @return Cn string
70 */
71 Animals: ["\u9f20", "\u725b", "\u864e", "\u5154", "\u9f99", "\u86c7", "\u9a6c", "\u7f8a", "\u7334", "\u9e21", "\u72d7", "\u732a"],
72
73 /**
74 * 阳历节日
75 */
76 festival: {
77 '1-1': { title: '元旦节' },
78 '2-14': { title: '情人节' },
79 '5-1': { title: '劳动节' },
80 '5-4': { title: '青年节' },
81 '6-1': { title: '儿童节' },
82 '9-10': { title: '教师节' },
83 '10-1': { title: '国庆节' },
84 '12-25': { title: '圣诞节' },
85
86 '3-8': { title: '妇女节' },
87 '3-12': { title: '植树节' },
88 '4-1': { title: '愚人节' },
89 '5-12': { title: '护士节' },
90 '7-1': { title: '建党节' },
91 '8-1': { title: '建军节' },
92 '12-24': { title: '平安夜' },
93 },
94
95 /**
96 * 农历节日
97 */
98 lFestival: {
99 '12-30': { title: '除夕' },
100 '1-1': { title: '春节' },
101 '1-15': { title: '元宵节' },
102 '2-2': { title: '龙抬头' },
103 '5-5': { title: '端午节' },
104 '7-7': { title: '七夕节' },
105 '7-15': { title: '中元节' },
106 '8-15': { title: '中秋节' },
107 '9-9': { title: '重阳节' },
108 '10-1': { title: '寒衣节' },
109 '10-15': { title: '下元节' },
110 '12-8': { title: '腊八节' },
111 '12-23': { title: '北方小年' },
112 '12-24': { title: '南方小年' },
113 },
114
115 /**
116 * 返回默认定义的阳历节日
117 */
118 getFestival () {
119 return this.festival
120 },
121
122 /**
123 * 返回默认定义的内容里节日
124 */
125 getLunarFestival () {
126 return this.lFestival
127 },
128
129 /**
130 *
131 * @param param {Object} 按照festival的格式输入数据,设置阳历节日
132 */
133 setFestival (param = {}) {
134 this.festival = param
135 },
136
137 /**
138 *
139 * @param param {Object} 按照lFestival的格式输入数据,设置农历节日
140 */
141 setLunarFestival (param = {}) {
142 this.lFestival = param
143 },
144
145 /**
146 * 24节气速查表
147 * @Array Of Property
148 * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
149 * @return Cn string
150 */
151 solarTerm: ["\u5c0f\u5bd2", "\u5927\u5bd2", "\u7acb\u6625", "\u96e8\u6c34", "\u60ca\u86f0", "\u6625\u5206", "\u6e05\u660e", "\u8c37\u96e8", "\u7acb\u590f", "\u5c0f\u6ee1", "\u8292\u79cd", "\u590f\u81f3", "\u5c0f\u6691", "\u5927\u6691", "\u7acb\u79cb", "\u5904\u6691", "\u767d\u9732", "\u79cb\u5206", "\u5bd2\u9732", "\u971c\u964d", "\u7acb\u51ac", "\u5c0f\u96ea", "\u5927\u96ea", "\u51ac\u81f3"],
152
153 /**
154 * 1900-2100各年的24节气日期速查表
155 * @Array Of Property
156 * @return 0x string For splice
157 */
158 sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f',
159 '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
160 '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa',
161 '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f',
162 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f',
163 '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa',
164 '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2',
165 '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f',
166 '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e',
167 '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
168 '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722',
169 '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f',
170 '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
171 '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
172 '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722',
173 '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f',
174 '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
175 '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
176 '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722',
177 '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
178 '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
179 '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
180 '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722',
181 '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
182 '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
183 '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
184 '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722',
185 '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
186 '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
187 '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
188 '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
189 '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
190 '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
191 '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
192 '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
193 '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
194 '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
195 '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
196 '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721',
197 '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2',
198 '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
199 '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
200 '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd',
201 '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
202 '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
203 '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
204 '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd',
205 '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
206 '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
207 '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721',
208 '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5',
209 '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722',
210 '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
211 '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
212 '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35',
213 '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
214 '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721',
215 '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd',
216 '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35',
217 '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
218 '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721',
219 '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5',
220 '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35',
221 '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
222 '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
223 '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35',
224 '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'],
225
226 /**
227 * 数字转中文速查表
228 * @Array Of Property
229 * @trans ['日','一','二','三','四','五','六','七','八','九','十']
230 * @return Cn string
231 */
232 nStr1: ["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341"],
233
234 /**
235 * 日期转农历称呼速查表
236 * @Array Of Property
237 * @trans ['初','十','廿','卅']
238 * @return Cn string
239 */
240 nStr2: ["\u521d", "\u5341", "\u5eff", "\u5345"],
241
242 /**
243 * 月份转农历称呼速查表
244 * @Array Of Property
245 * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊']
246 * @return Cn string
247 */
248 nStr3: ["\u6b63", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341", "\u51ac", "\u814a"],
249
250 /**
251 * 返回农历y年一整年的总天数
252 * @param y lunar Year
253 * @return Number
254 * @eg:var count = calendar.lYearDays(1987) ;//count=387
255 */
256 lYearDays: function (y) {
257 let i, sum = 348;
258 for (i = 0x8000; i > 0x8; i >>= 1) {
259 sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0;
260 }
261 return (sum + this.leapDays(y));
262 },
263
264 /**
265 * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0
266 * @param y lunar Year
267 * @return Number (0-12)
268 * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
269 */
270 leapMonth: function (y) { //闰字编码 \u95f0
271 return (this.lunarInfo[y - 1900] & 0xf);
272 },
273
274 /**
275 * 返回农历y年闰月的天数 若该年没有闰月则返回0
276 * @param y lunar Year
277 * @return Number (0、29、30)
278 * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
279 */
280 leapDays: function (y) {
281 if (this.leapMonth(y)) {
282 return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29);
283 }
284 return (0);
285 },
286
287 /**
288 * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
289 * @param y lunar Year
290 * @param m lunar Month
291 * @return Number (-1、29、30)
292 * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
293 */
294 monthDays: function (y, m) {
295 if (m > 12 || m < 1) {
296 return -1
297 }//月份参数从1至12,参数错误返回-1
298 return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29);
299 },
300
301 /**
302 * 返回公历(!)y年m月的天数
303 * @param y solar Year
304 * @param m solar Month
305 * @return Number (-1、28、29、30、31)
306 * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
307 */
308 solarDays: function (y, m) {
309 if (m > 12 || m < 1) {
310 return -1
311 } //若参数错误 返回-1
312 const ms = m - 1;
313 if (ms === 1) { //2月份的闰平规律测算后确认返回28或29
314 return (((y % 4 === 0) && (y % 100 !== 0) || (y % 400 === 0)) ? 29 : 28);
315 } else {
316 return (this.solarMonth[ms]);
317 }
318 },
319
320 /**
321 * 农历年份转换为干支纪年
322 * @param lYear 农历年的年份数
323 * @return Cn string
324 */
325 toGanZhiYear: function (lYear) {
326 var ganKey = (lYear - 3) % 10;
327 var zhiKey = (lYear - 3) % 12;
328 if (ganKey === 0) ganKey = 10;//如果余数为0则为最后一个天干
329 if (zhiKey === 0) zhiKey = 12;//如果余数为0则为最后一个地支
330 return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1];
331
332 },
333
334 /**
335 * 公历月、日判断所属星座
336 * @param cMonth [description]
337 * @param cDay [description]
338 * @return Cn string
339 */
340 toAstro: function (cMonth, cDay) {
341 const s = "\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf";
342 const arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22];
343 return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + "\u5ea7";//座
344 },
345
346 /**
347 * 传入offset偏移量返回干支
348 * @param offset 相对甲子的偏移量
349 * @return Cn string
350 */
351 toGanZhi: function (offset) {
352 return this.Gan[offset % 10] + this.Zhi[offset % 12];
353 },
354
355 /**
356 * 传入公历(!)y年获得该年第n个节气的公历日期
357 * @param y y公历年(1900-2100)
358 * @param n n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
359 * @return day Number
360 * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春
361 */
362 getTerm: function (y, n) {
363 if (y < 1900 || y > 2100) {
364 return -1;
365 }
366 if (n < 1 || n > 24) {
367 return -1;
368 }
369 const _table = this.sTermInfo[y - 1900];
370 const _info = [
371 parseInt('0x' + _table.substr(0, 5)).toString(),
372 parseInt('0x' + _table.substr(5, 5)).toString(),
373 parseInt('0x' + _table.substr(10, 5)).toString(),
374 parseInt('0x' + _table.substr(15, 5)).toString(),
375 parseInt('0x' + _table.substr(20, 5)).toString(),
376 parseInt('0x' + _table.substr(25, 5)).toString()
377 ];
378 const _calcDay = [
379 _info[0].substr(0, 1),
380 _info[0].substr(1, 2),
381 _info[0].substr(3, 1),
382 _info[0].substr(4, 2),
383
384 _info[1].substr(0, 1),
385 _info[1].substr(1, 2),
386 _info[1].substr(3, 1),
387 _info[1].substr(4, 2),
388
389 _info[2].substr(0, 1),
390 _info[2].substr(1, 2),
391 _info[2].substr(3, 1),
392 _info[2].substr(4, 2),
393
394 _info[3].substr(0, 1),
395 _info[3].substr(1, 2),
396 _info[3].substr(3, 1),
397 _info[3].substr(4, 2),
398
399 _info[4].substr(0, 1),
400 _info[4].substr(1, 2),
401 _info[4].substr(3, 1),
402 _info[4].substr(4, 2),
403
404 _info[5].substr(0, 1),
405 _info[5].substr(1, 2),
406 _info[5].substr(3, 1),
407 _info[5].substr(4, 2),
408 ];
409 return parseInt(_calcDay[n - 1]);
410 },
411
412 /**
413 * 传入农历数字月份返回汉语通俗表示法
414 * @param m lunar month
415 * @return Cn string
416 * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
417 */
418 toChinaMonth: function (m) { // 月 => \u6708
419 if (m > 12 || m < 1) {
420 return -1
421 } //若参数错误 返回-1
422 let s = this.nStr3[m - 1];
423 s += "\u6708";//加上月字
424 return s;
425 },
426
427 /**
428 * 传入农历日期数字返回汉字表示法
429 * @param d lunar day
430 * @return Cn string
431 * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
432 */
433 toChinaDay: function (d) { //日 => \u65e5
434 let s;
435 switch (d) {
436 case 10:
437 s = '\u521d\u5341';
438 break;
439 case 20:
440 s = '\u4e8c\u5341';
441 break;
442 case 30:
443 s = '\u4e09\u5341';
444 break;
445 default:
446 s = this.nStr2[Math.floor(d / 10)];
447 s += this.nStr1[d % 10];
448 }
449 return (s);
450 },
451
452 /**
453 * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春”
454 * @param y year
455 * @return Cn string
456 * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔'
457 */
458 getAnimal: function (y) {
459 return this.Animals[(y - 4) % 12]
460 },
461
462 /**
463 * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON
464 * !important! 公历参数区间1900.1.31~2100.12.31
465 * @param yPara solar year
466 * @param mPara solar month
467 * @param dPara solar day
468 * @return JSON object
469 * @eg:console.log(calendar.solar2lunar(1987,11,01));
470 */
471 solar2lunar: function (yPara, mPara, dPara) {
472 let y = parseInt(yPara);
473 let m = parseInt(mPara);
474 let d = parseInt(dPara);
475 //年份限定、上限
476 if (y < 1900 || y > 2100) {
477 return -1;// undefined转换为数字变为NaN
478 }
479 //公历传参最下限
480 if (y === 1900 && m === 1 && d < 31) {
481 return -1;
482 }
483
484 //未传参 获得当天
485 let objDate;
486 if (!y) {
487 objDate = new Date();
488 } else {
489 objDate = new Date(y, parseInt(m) - 1, d);
490 }
491 let i, leap = 0, temp = 0;
492 //修正ymd参数
493 y = objDate.getFullYear();
494 m = objDate.getMonth() + 1;
495 d = objDate.getDate();
496 let offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000;
497 for (i = 1900; i < 2101 && offset > 0; i++) {
498 temp = this.lYearDays(i);
499 offset -= temp;
500 }
501 if (offset < 0) {
502 offset += temp;
503 i--;
504 }
505
506 //是否今天
507 let isTodayObj = new Date(),
508 isToday = false;
509 if (isTodayObj.getFullYear() === y && isTodayObj.getMonth() + 1 === m && isTodayObj.getDate() === d) {
510 isToday = true;
511 }
512 //星期几
513 let nWeek = objDate.getDay(),
514 cWeek = this.nStr1[nWeek];
515 //数字表示周几顺应天朝周一开始的惯例
516 if (nWeek === 0) {
517 nWeek = 7;
518 }
519 //农历年
520 const year = i;
521 leap = this.leapMonth(i); //闰哪个月
522 let isLeap = false;
523
524 //效验闰月
525 for (i = 1; i < 13 && offset > 0; i++) {
526 //闰月
527 if (leap > 0 && i === (leap + 1) && isLeap === false) {
528 --i;
529 isLeap = true;
530 temp = this.leapDays(year); //计算农历闰月天数
531 } else {
532 temp = this.monthDays(year, i);//计算农历普通月天数
533 }
534 //解除闰月
535 if (isLeap === true && i === (leap + 1)) {
536 isLeap = false;
537 }
538 offset -= temp;
539 }
540 // 闰月导致数组下标重叠取反
541 if (offset === 0 && leap > 0 && i === leap + 1) {
542 if (isLeap) {
543 isLeap = false;
544 } else {
545 isLeap = true;
546 --i;
547 }
548 }
549 if (offset < 0) {
550 offset += temp;
551 --i;
552 }
553 //农历月
554 const month = i;
555 //农历日
556 const day = offset + 1;
557 //天干地支处理
558 const sm = m - 1;
559 const gzY = this.toGanZhiYear(year);
560
561 // 当月的两个节气
562 // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year`
563 const firstNode = this.getTerm(y, (m * 2 - 1));//返回当月「节」为几日开始
564 const secondNode = this.getTerm(y, (m * 2));//返回当月「节」为几日开始
565
566 // 依据12节气修正干支月
567 let gzM = this.toGanZhi((y - 1900) * 12 + m + 11);
568 if (d >= firstNode) {
569 gzM = this.toGanZhi((y - 1900) * 12 + m + 12);
570 }
571
572 //传入的日期的节气与否
573 let isTerm = false;
574 let Term = null;
575 if (firstNode === d) {
576 isTerm = true;
577 Term = this.solarTerm[m * 2 - 2];
578 }
579 if (secondNode === d) {
580 isTerm = true;
581 Term = this.solarTerm[m * 2 - 1];
582 }
583 //日柱 当月一日与 1900/1/1 相差天数
584 const dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10;
585 const gzD = this.toGanZhi(dayCyclical + d - 1);
586 //该日期所属的星座
587 const astro = this.toAstro(m, d);
588
589 const solarDate = y + '-' + m + '-' + d;
590 const lunarDate = year + '-' + month + '-' + day;
591
592 const festival = this.festival;
593 const lFestival = this.lFestival;
594
595 const festivalDate = m + '-' + d;
596 const lunarFestivalDate = month + '-' + day;
597
598 return {
599 date: solarDate,
600 lunarDate: lunarDate,
601 festival: festival[festivalDate] ? festival[festivalDate].title : null,
602 lunarFestival: lFestival[lunarFestivalDate] ? lFestival[lunarFestivalDate].title : null,
603 'lYear': year,
604 'lMonth': month,
605 'lDay': day,
606 'Animal': this.getAnimal(year),
607 'IMonthCn': (isLeap ? "\u95f0" : '') + this.toChinaMonth(month),
608 'IDayCn': this.toChinaDay(day),
609 'cYear': y,
610 'cMonth': m,
611 'cDay': d,
612 'gzYear': gzY,
613 'gzMonth': gzM,
614 'gzDay': gzD,
615 'isToday': isToday,
616 'isLeap': isLeap,
617 'nWeek': nWeek,
618 'ncWeek': "\u661f\u671f" + cWeek,
619 'isTerm': isTerm,
620 'Term': Term,
621 'astro': astro
622 };
623 },
624
625 /**
626 * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON
627 * !important! 参数区间1900.1.31~2100.12.1
628 * @param y lunar year
629 * @param m lunar month
630 * @param d lunar day
631 * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可]
632 * @return JSON object
633 * @eg:console.log(calendar.lunar2solar(1987,9,10));
634 */
635 lunar2solar: function (y, m, d, isLeapMonth) {
636 y = parseInt(y)
637 m = parseInt(m)
638 d = parseInt(d)
639 isLeapMonth = !!isLeapMonth;
640 const leapOffset = 0;
641 const leapMonth = this.leapMonth(y);
642 const leapDay = this.leapDays(y);
643 if (isLeapMonth && (leapMonth !== m)) {
644 return -1;
645 }//传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
646 if (y === 2100 && m === 12 && d > 1 || y === 1900 && m === 1 && d < 31) {
647 return -1;
648 }//超出了最大极限值
649 const day = this.monthDays(y, m);
650 let _day = day;
651 //bugFix 2016-9-25
652 //if month is leap, _day use leapDays method
653 if (isLeapMonth) {
654 _day = this.leapDays(y, m);
655 }
656 if (y < 1900 || y > 2100 || d > _day) {
657 return -1;
658 }//参数合法性效验
659
660 //计算农历的时间差
661 let offset = 0;
662 let i;
663 for (i = 1900; i < y; i++) {
664 offset += this.lYearDays(i);
665 }
666 let leap = 0, isAdd = false;
667 for (i = 1; i < m; i++) {
668 leap = this.leapMonth(y);
669 if (!isAdd) {//处理闰月
670 if (leap <= i && leap > 0) {
671 offset += this.leapDays(y);
672 isAdd = true;
673 }
674 }
675 offset += this.monthDays(y, i);
676 }
677 //转换闰月农历 需补充该年闰月的前一个月的时差
678 if (isLeapMonth) {
679 offset += day;
680 }
681 //1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
682 const strap = Date.UTC(1900, 1, 30, 0, 0, 0);
683 const calObj = new Date((offset + d - 31) * 86400000 + strap);
684 const cY = calObj.getUTCFullYear();
685 const cM = calObj.getUTCMonth() + 1;
686 const cD = calObj.getUTCDate();
687
688 return this.solar2lunar(cY, cM, cD);
689 }
690 };
691
692 export default calendar
...\ No newline at end of file ...\ No newline at end of file
1
2 <template>
3 <el-calendar v-model="date">
4 <template slot="dateCell" slot-scope="{date, data}">
5 <div :class="{ selected: isSelected(date, data) }">
6 <div class="solar">{{ data.day.split('-')[2] }}</div>
7 <div class="lunar" :class="{ festival: isFestival(date, data) }">{{ solarToLunar(date, data) }}</div>
8 </div>
9 </template>
10 </el-calendar>
11 </template>
12
13 <script>
14 import calendar from './calendar'
15 export default {
16 name: 'calendar',
17 data () {
18 return {
19 date: new Date(),
20 // 根据selectedDates设置选中日期
21 selectedDates: []
22 }
23 },
24 methods: {
25 // 是否选中日期
26 isSelected: function (slotDate, slotData) {
27 return this.selectedDates.includes(slotData.day)
28 },
29 // 是否节假日
30 isFestival (slotDate, slotData) {
31 let solarDayArr = slotData.day.split('-');
32 let lunarDay = calendar.solar2lunar(solarDayArr[0], solarDayArr[1], solarDayArr[2])
33
34 // 公历节日\农历节日\农历节气
35 let festAndTerm = [];
36 festAndTerm.push(lunarDay.festival == null ? '' : ' ' + lunarDay.festival)
37 festAndTerm.push(lunarDay.lunarFestival == null ? '' : '' + lunarDay.lunarFestival)
38 festAndTerm.push(lunarDay.Term == null ? '' : '' + lunarDay.Term)
39 festAndTerm = festAndTerm.join('')
40
41 return festAndTerm != ''
42 },
43 // 公历转农历
44 solarToLunar (slotDate, slotData) {
45 let solarDayArr = slotData.day.split('-');
46 let lunarDay = calendar.solar2lunar(solarDayArr[0], solarDayArr[1], solarDayArr[2])
47
48 // 农历日期
49 let lunarMD = lunarDay.IMonthCn + lunarDay.IDayCn
50
51 // 公历节日\农历节日\农历节气
52 let festAndTerm = [];
53 festAndTerm.push(lunarDay.festival == null ? '' : ' ' + lunarDay.festival)
54 festAndTerm.push(lunarDay.lunarFestival == null ? '' : '' + lunarDay.lunarFestival)
55 festAndTerm.push(lunarDay.Term == null ? '' : '' + lunarDay.Term)
56 festAndTerm = festAndTerm.join('')
57
58 return festAndTerm == '' ? lunarMD : festAndTerm
59 }
60 }
61 }
62 </script>
63
64 <style scoped>
65 /**隐藏上一月、本月、下一月*/
66 .el-calendar__button-group {
67 display: none;
68 }
69
70 /deep/.el-calendar__body {
71 padding: 8px;
72 }
73
74 /deep/.el-calendar-table .el-calendar-day {
75 height: auto;
76 padding: 5px;
77 }
78
79 /**月份居中*/
80 .el-calendar__title {
81 width: 100%;
82 text-align: center;
83 }
84
85 /deep/.el-calendar-table thead th {
86 padding: 0 0 6px 0 !important;
87 }
88
89 /deep/.el-calendar-day {
90 padding: 3px !important;
91 }
92
93 /deep/.el-calendar-table td.is-today {
94 font-weight: 700;
95 }
96
97 /deep/.el-calendar-table td.is-selected {
98 background-color: rgb(179, 216, 255);
99 }
100
101 /deep/.el-calendar__header {
102 padding: 8px 15px;
103 }
104
105 /**日期div的样式*/
106 .el-calendar-table tr td:first-child {
107 border-left: 0px;
108 }
109
110 .el-calendar-table td {
111 min-height: 110px;
112 min-width: 110px;
113 border-right: 0px;
114 }
115
116 .el-calendar-table td.is-selected {
117 background-color: white;
118 }
119
120 .el-calendar-table .el-calendar-day {
121 padding: 0px;
122 text-align: center;
123 }
124
125 .el-calendar-table .el-calendar-day>div {
126 text-align: center
127 }
128
129 /**日期div的样式-公历*/
130 .el-calendar-table .el-calendar-day>div .solar {
131 text-align: center;
132 margin-top: 3px;
133 }
134
135 /**日期div的样式-农历*/
136 .el-calendar-table .el-calendar-day>div .lunar {
137 padding-top: 5px;
138 font-size: 12px;
139 text-align: center;
140 margin-bottom: 5px;
141 }
142
143 /**日期div的样式-选中*/
144 .el-calendar-table .el-calendar-day>div.selected {
145 background-color: #fef2f2;
146 border: 3px solid #fb0;
147 border-radius: 20px;
148 text-align: center
149 }
150
151 /**本月周末设置为红色*/
152 /* .el-calendar-table .current:nth-last-child(-n+2) .solar {
153 color: red;
154 } */
155
156 /**本月农历设置为灰色*/
157 .el-calendar-table .current .lunar {
158 color: #606266;
159 font-size: 12px;
160 }
161
162 /**本月农历节日设置为红色*/
163 .el-calendar-table .current .lunar.festival {
164 color: red;
165 }
166
167 .el-calendar-table td {
168 border-right: none !important;
169 }
170
171 /**禁用点击效果*/
172 /*.el-calendar-table td {*/
173 /*pointer-events: none;*/
174 /*}*/
175 </style>
...\ No newline at end of file ...\ No newline at end of file
...@@ -38,13 +38,7 @@ export const constantRoutes = [ ...@@ -38,13 +38,7 @@ export const constantRoutes = [
38 name: 'workFrameView', 38 name: 'workFrameView',
39 hidden: true, 39 hidden: true,
40 meta: { title: '发起申请' } 40 meta: { title: '发起申请' }
41 } 41 },
42 ]
43 /**
44 * asyncRoutes
45 * the routes that need to be dynamically loaded based on user roles
46 */
47 export const asyncRoutes = [
48 { 42 {
49 path: '/', 43 path: '/',
50 component: Layout, 44 component: Layout,
...@@ -59,6 +53,12 @@ export const asyncRoutes = [ ...@@ -59,6 +53,12 @@ export const asyncRoutes = [
59 } 53 }
60 ] 54 ]
61 }, 55 },
56 ]
57 /**
58 * asyncRoutes
59 * the routes that need to be dynamically loaded based on user roles
60 */
61 export const asyncRoutes = [
62 { 62 {
63 path: '/ywbl', 63 path: '/ywbl',
64 id: '2', 64 id: '2',
......
...@@ -20,7 +20,8 @@ const actions = { ...@@ -20,7 +20,8 @@ const actions = {
20 return new Promise(resolve => { 20 return new Promise(resolve => {
21 // 将权限菜单数组转成路由树数据结构 21 // 将权限菜单数组转成路由树数据结构
22 let permission_tree = asyncRouter(getMenuInfo) 22 let permission_tree = asyncRouter(getMenuInfo)
23 commit('SET_ROUTES', permission_tree) 23 const mergeResult = _.cloneDeep(constantRoutes).concat(permission_tree);
24 commit('SET_ROUTES', mergeResult)
24 resolve(permission_tree) 25 resolve(permission_tree)
25 }) 26 })
26 }, 27 },
......
1 <template> 1 <template>
2 <dialogBox title="配置常办项目" @submitForm="submitForm" saveButton="保存" :isFullscreen="false" width="50%" 2 <dialogBox title="配置常办项目" @submitForm="submitForm" saveButton="保存" :isFullscreen="false" width="50%"
3 @closeDialog="closeDialog" v-model="value"> 3 @closeDialog="closeDialog" v-model="value">
4 <el-form ref="ruleForm" :model="ruleForm" label-width="100px" > 4 <el-form ref="ruleForm" :model="ruleForm" label-width="100px">
5 <el-tree 5 <el-tree :data="projectList" show-checkbox node-key="id" ref="tree" default-expand-all :props="defaultProps"
6 :data="projectList" 6 @check-change="handleClick"></el-tree>
7 show-checkbox
8 node-key="id"
9 ref="tree"
10 check-strictly
11 :highlight-current='true'
12 :check-on-click-node="true"
13 :accordion="true"
14 :props="defaultProps"
15 :default-expand-all="true"
16 @check-change="handleClick"
17 ></el-tree>
18 </el-form> 7 </el-form>
19 </dialogBox> 8 </dialogBox>
20 </template> 9 </template>
21 <script> 10 <script>
22 import { getMenuInfo} from "@/api/user.js"; 11 import { getMenuInfo } from "@/api/user.js";
23 import { saveFrequentProjectsList } from "@/api/home.js"; 12 import { saveFrequentProjectsList } from "@/api/home.js";
24 export default { 13 export default {
25 props: { 14 props: {
26 value: { type: Boolean, default: false }, 15 value: { type: Boolean, default: false },
27 bindItem: {type:Array, default: []} 16 bindItem: { type: Array, default: [] }
28 }, 17 },
29 data () { 18 data () {
30 return { 19 return {
...@@ -36,60 +25,64 @@ export default { ...@@ -36,60 +25,64 @@ export default {
36 defaultProps: { 25 defaultProps: {
37 children: "children", 26 children: "children",
38 label: "name", 27 label: "name",
39 disabled:function(data,node){ 28 disabled: function (data, node) {
40 if(data.children && data.children.length > 0){ 29 if (data.children && data.children.length > 0) {
41 return true 30 return true
42 }else{ 31 } else {
43 return false 32 return false
44 } 33 }
45 } 34 }
46 }, 35 },
47 uniqueValue:''//最后拿到的唯一选择的moduldCode值,相当于id 36 uniqueValue: ''//最后拿到的唯一选择的moduldCode值,相当于id
48 } 37 }
49 }, 38 },
50 mounted () { 39 mounted () {
51 this.queryClick() 40 this.queryClick()
52 this.dealCheckedItem(); 41 this.dealCheckedItem();
53 }, 42 },
54 methods: { 43 methods: {
55 submitForm () { 44 submitForm () {
56 var checkedNodes = this.$refs.tree.getCheckedNodes(); 45 var checkedNodes = this.$refs.tree.getCheckedNodes();
57 if(checkedNodes.length > 6){ 46 if (checkedNodes.length > 6) {
58 this.$message.error("最多选择6个项目!"); 47 this.$message.error("最多选择6个项目!");
59 return 48 return
49 }
50 saveFrequentProjectsList(checkedNodes).then(res => {
51 if (res.code == 200) {
52 this.$parent.queryProjectList();
53 this.$message.success("保存成功");
54 this.$emit("input", false);
55 } else {
56 this.$message.error(res.message);
60 } 57 }
61 saveFrequentProjectsList(checkedNodes).then(res => { 58 })
62 if(res.code == 200){
63 this.$parent.queryProjectList();
64 this.$message.success("保存成功");
65 this.$emit("input", false);
66 }else{
67 this.$message.error(res.message);
68 }
69 })
70 }, 59 },
71 queryClick(){ 60 queryClick () {
72 getMenuInfo().then(res => { 61 getMenuInfo().then(res => {
73 this.projectList = res.result 62 this.projectList = res.result
74 }) 63 })
75 }, 64 },
76 dealCheckedItem(){ 65 dealCheckedItem () {
77 }, 66 },
78 //关闭窗口 67 //关闭窗口
79 closeDialog () { 68 closeDialog () {
80 this.$emit("input", false); 69 this.$emit("input", false);
81 }, 70 },
82 //节点选择状态发生改变时 71 //节点选择状态发生改变时
83 handleClick(data,checked, node){ 72 handleClick (data, checked, node) {
84 var checkedNodes = this.$refs.tree.getCheckedNodes(); 73 var checkedNodes = this.$refs.tree.getCheckedNodes();
85 if(checked){ 74 if (checked) {
86 checkedNodes.push(data); 75 checkedNodes.push(data);
87 } 76 }
88 this.$refs.tree.setCheckedNodes(checkedNodes); 77 this.$refs.tree.setCheckedNodes(checkedNodes);
89 console.log(this.$refs.tree.getCheckedNodes()); 78 console.log(this.$refs.tree.getCheckedNodes());
90 }, 79 },
91 } 80 }
92 } 81 }
93 </script> 82 </script>
94 <style scoped lang='scss'> 83 <style scoped lang='scss'>
84 /deep/.el-tree-node.is-expanded>.el-tree-node__children {
85 display: flex;
86 flex-wrap: wrap;
87 }
95 </style> 88 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
14 14
15 li { 15 li {
16 width: 32.5%; 16 width: 32.5%;
17 height: 118px; 17 height: 90px;
18 @include flex-center; 18 @include flex-center;
19 flex-direction: column; 19 flex-direction: column;
20 color: #fff; 20 color: #fff;
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
71 71
72 .box-mountNode { 72 .box-mountNode {
73 flex: 1; 73 flex: 1;
74 height: calc(100% - 510px); 74 height: calc(100% - 490px);
75 } 75 }
76 76
77 .home-right { 77 .home-right {
......
...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
3 <div class="home-left"> 3 <div class="home-left">
4 <el-row :gutter="8"> 4 <el-row :gutter="8">
5 <el-col :span="12"> 5 <el-col :span="12">
6 <el-card shadow="hover" :body-style="{ padding: '0' }" style="height:302px"> 6 <el-card shadow="hover" :body-style="{ padding: '0' }" style="height:260px">
7 <div slot="header" class="flexst"> 7 <div slot="header" class="flexst">
8 <h5 class="title">常办项目</h5> 8 <h5 class="title">常办项目</h5>
9 <el-button type="primary" @click="setFrequencyProject()">配置常办</el-button> 9 <el-button type="primary" @click="setFrequencyProject()">配置常办</el-button>
10 </div> 10 </div>
11 <ul class="workbench flexst"> 11 <ul class="workbench flexst">
12 <li v-for="(item, index) in projectList" class="pointer" :key="index" 12 <li v-for="(item, index) in projectList" class="pointer" :key="index"
13 :style="{ backgroundColor: newsListData[index] }"> 13 :style="{ backgroundColor: newsListColor[index] }">
14 <i class="el-icon-s-claim"></i> 14 <i class="el-icon-s-claim"></i>
15 {{ item.name }} 15 {{ item.name }}
16 </li> 16 </li>
...@@ -18,12 +18,12 @@ ...@@ -18,12 +18,12 @@
18 </el-card> 18 </el-card>
19 </el-col> 19 </el-col>
20 <el-col :span="12"> 20 <el-col :span="12">
21 <el-card shadow="hover" style="height:302px"> 21 <el-card shadow="hover" style="height:260px">
22 <div slot="header" class="flexst"> 22 <div slot="header" class="flexst">
23 <h5 class="title">系统通知</h5> 23 <h5 class="title">系统通知</h5>
24 <el-popover placement="right" width="50" trigger="hover"> 24 <el-popover placement="right" width="50" trigger="hover">
25 <ul class="pointer"> 25 <ul class="pointer">
26 <li @click="$store.dispatch('tagsView/addView', moreNotice)">查看更多</li> 26 <li @click="$store.dispatch('tagsView/addView', moreNotice)">查看更多</li>
27 </ul> 27 </ul>
28 <i class="el-icon-s-unfold pointer" slot="reference"></i> 28 <i class="el-icon-s-unfold pointer" slot="reference"></i>
29 </el-popover> 29 </el-popover>
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
60 <h5 class="title">政策法规</h5> 60 <h5 class="title">政策法规</h5>
61 <el-popover placement="right" width="50" trigger="hover"> 61 <el-popover placement="right" width="50" trigger="hover">
62 <ul class="pointer"> 62 <ul class="pointer">
63 <li @click="$store.dispatch('tagsView/addView', moreNotice)">查看更多</li> 63 <li @click="$store.dispatch('tagsView/addView', moreNotice)">查看更多</li>
64 </ul> 64 </ul>
65 <i class="el-icon-s-unfold pointer" slot="reference"></i> 65 <i class="el-icon-s-unfold pointer" slot="reference"></i>
66 </el-popover> 66 </el-popover>
...@@ -81,8 +81,13 @@ ...@@ -81,8 +81,13 @@
81 </el-card> 81 </el-card>
82 </div> 82 </div>
83 <div class="home-right"> 83 <div class="home-right">
84 <calendar /> 84 <el-card shadow="hover" style="height:345px">
85 <el-card shadow="hover" class="marginTop10" style="height:345px"> 85 <div slot="header" class="flexst">
86 <h5 class="title">用户登录时间</h5>
87 </div>
88 <div id="loginTime"></div>
89 </el-card>
90 <el-card class="marginTop10" shadow="hover" style="height:395px">
86 <div slot="header" class="flexst"> 91 <div slot="header" class="flexst">
87 <h5 class="title">动态信息</h5> 92 <h5 class="title">动态信息</h5>
88 <i class="el-icon-s-unfold pointer"></i> 93 <i class="el-icon-s-unfold pointer"></i>
...@@ -95,22 +100,47 @@ ...@@ -95,22 +100,47 @@
95 </ul> 100 </ul>
96 </el-card> 101 </el-card>
97 </div> 102 </div>
98 <addDialog ref="addProject" v-model="projectDialog" :bindItem="projectList"/> 103 <addDialog ref="addProject" v-model="projectDialog" :bindItem="projectList" />
99 </div> 104 </div>
100 </template> 105 </template>
101 <script> 106 <script>
102 import * as G2 from '@antv/g2' 107 import * as G2 from '@antv/g2'
103 import calendar from '@/components/Calendar/index'
104 import vueSeamlessScroll from "vue-seamless-scroll" 108 import vueSeamlessScroll from "vue-seamless-scroll"
105 import { getHomeNoticeList, getHomeTodoList, getHomeDoneList,getHomeFrequentProjects } from "@/api/home.js"; 109 import { getHomeNoticeList, getHomeTodoList, getHomeDoneList, getHomeFrequentProjects } from "@/api/home.js";
106 import { setReadStatus } from "@/api/notice.js"; 110 import { setReadStatus } from "@/api/notice.js";
107 import addDialog from "./components/addProject.vue"; 111 import addDialog from "./components/addProject.vue";
108 export default { 112 export default {
109 name: 'home', 113 name: 'home',
110 components: { calendar, vueSeamlessScroll,addDialog }, 114 components: { vueSeamlessScroll, addDialog },
111 data () { 115 data () {
112 return { 116 return {
113 newsListData: ['#61AEFF','#43DEB3','#F3C143','#F09936','#9C92FF','#589FFF',], 117 listData: [
118 {
119 icon: '',
120 title: '任务'
121 },
122 {
123 icon: '',
124 title: '邮件'
125 },
126 {
127 icon: '',
128 title: '消息'
129 },
130 {
131 icon: '',
132 title: '日历'
133 },
134 {
135 icon: '',
136 title: '常用功能'
137 },
138 {
139 icon: '',
140 title: '申请'
141 }
142 ],
143 newsListColor: ['#61AEFF', '#43DEB3', '#F3C143', '#F09936', '#9C92FF', '#589FFF',],
114 chartData: [{ 144 chartData: [{
115 year: '1991', 145 year: '1991',
116 value: 15468 146 value: 15468
...@@ -145,12 +175,13 @@ export default { ...@@ -145,12 +175,13 @@ export default {
145 fullPath: '/system/xttz/xttzview', 175 fullPath: '/system/xttz/xttzview',
146 name: '系统通知', 176 name: '系统通知',
147 path: '/system/xttz/xttzview', 177 path: '/system/xttz/xttzview',
148 meta: { title: '系统通知' } 178 meta: { title: '系统通知' }
149 }, 179 },
150 } 180 }
151 }, 181 },
152 mounted () { 182 mounted () {
153 this.buildChart();//构建图标 183 this.buildChart();//构建图标
184 this.loginTimeChart()
154 this.queryTodoList();//获取待办列表 185 this.queryTodoList();//获取待办列表
155 this.queryDoneList();//获取已办列表 186 this.queryDoneList();//获取已办列表
156 this.queryNoticeList();//获取通知、法律法规列表 187 this.queryNoticeList();//获取通知、法律法规列表
...@@ -190,10 +221,12 @@ export default { ...@@ -190,10 +221,12 @@ export default {
190 }) 221 })
191 }, 222 },
192 //获取常办项目列表 223 //获取常办项目列表
193 queryProjectList(){ 224 queryProjectList () {
194 getHomeFrequentProjects().then(res => { 225 getHomeFrequentProjects().then(res => {
195 if(res.result){ 226 if (res.result && res.result.length > 0) {
196 this.projectList = res.result 227 this.projectList = res.result
228 } else {
229 this.projectList = this.listData
197 } 230 }
198 }) 231 })
199 }, 232 },
...@@ -241,13 +274,62 @@ export default { ...@@ -241,13 +274,62 @@ export default {
241 chart.line().position('year*value').size(2).shape('smooth'); 274 chart.line().position('year*value').size(2).shape('smooth');
242 chart.render(); 275 chart.render();
243 }, 276 },
277 loginTimeChart () {
278 var data = [{
279 item: '用户1',
280 count: 40,
281 percent: 0.4
282 }, {
283 item: '用户2',
284 count: 21,
285 percent: 0.21
286 }, {
287 item: '用户3',
288 count: 17,
289 percent: 0.17
290 }]
291 var chart = new G2.Chart({
292 container: 'loginTime',
293 height: 260
294 });
295 chart.source(data, {
296 percent: {
297 formatter: function formatter (val) {
298 val = val * 100 + '%';
299 return val;
300 }
301 }
302 });
303 chart.coord('theta');
304 chart.tooltip({
305 showTitle: false
306 });
307 chart.interval().position('percent').color('item').label('percent', {
308 offset: -40,
309 textStyle: {
310 textAlign: 'center',
311 shadowBlur: 2,
312 shadowColor: 'rgba(0, 0, 0, .45)'
313 }
314 }).tooltip('item*percent', function (item, percent) {
315 percent = percent * 100 + '%';
316 return {
317 name: item,
318 value: percent
319 };
320 }).style({
321 lineWidth: 1,
322 stroke: '#fff'
323 });
324 chart.forceFit();
325 chart.render();
326 },
244 //跳转到更多通知列表页面 327 //跳转到更多通知列表页面
245 jumpToMoreNotice(){ 328 jumpToMoreNotice () {
246 console.log(this.$route); 329 console.log(this.$route);
247
248 }, 330 },
249 //配置常办项目 331 //配置常办项目
250 setFrequencyProject(){ 332 setFrequencyProject () {
251 this.projectDialog = true; 333 this.projectDialog = true;
252 }, 334 },
253 handleNotice (item) { 335 handleNotice (item) {
......