ming 1 vuosi sitten
vanhempi
commit
8a737e7f59

+ 0 - 546
src/components/oa-calendar/calendar.js

@@ -1,546 +0,0 @@
-/**
-* @1900-2100区间内的公历、农历互转
-* @charset UTF-8
-* @github  https://github.com/jjonline/calendar.js
-* @Author  Jea杨(JJonline@JJonline.Cn)
-* @Time    2014-7-21
-* @Time    2016-8-13 Fixed 2033hex、Attribution Annals
-* @Time    2016-9-25 Fixed lunar LeapMonth Param Bug
-* @Time    2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year
-* @Version 1.0.3
-* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0]
-* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0]
-*/
-/* eslint-disable */
-var calendar = {
-
-  /**
-      * 农历1900-2100的润大小信息表
-      * @Array Of Property
-      * @return Hex
-      */
-  lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909
-    0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919
-    0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929
-    0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939
-    0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949
-    0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959
-    0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969
-    0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979
-    0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989
-    0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999
-    0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009
-    0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019
-    0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029
-    0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039
-    0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049
-    /** Add By JJonline@JJonline.Cn**/
-    0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059
-    0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069
-    0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079
-    0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089
-    0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099
-    0x0d520], // 2100
-
-  /**
-      * 公历每个月份的天数普通表
-      * @Array Of Property
-      * @return Number
-      */
-  solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
-
-  /**
-      * 天干地支之天干速查表
-      * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
-      * @return Cn string
-      */
-  Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'],
-
-  /**
-      * 天干地支之地支速查表
-      * @Array Of Property
-      * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
-      * @return Cn string
-      */
-  Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'],
-
-  /**
-      * 天干地支之地支速查表<=>生肖
-      * @Array Of Property
-      * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
-      * @return Cn string
-      */
-  Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'],
-
-  /**
-      * 24节气速查表
-      * @Array Of Property
-      * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
-      * @return Cn string
-      */
-  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'],
-
-  /**
-      * 1900-2100各年的24节气日期速查表
-      * @Array Of Property
-      * @return 0x string For splice
-      */
-  sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f',
-    '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
-    '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa',
-    '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f',
-    'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f',
-    '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa',
-    '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2',
-    '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f',
-    '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e',
-    '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
-    '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722',
-    '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f',
-    '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
-    '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
-    '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722',
-    '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f',
-    '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
-    '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
-    '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722',
-    '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
-    '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
-    '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
-    '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722',
-    '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
-    '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
-    '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
-    '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722',
-    '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
-    '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
-    '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
-    '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
-    '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
-    '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
-    '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
-    '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
-    '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
-    '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
-    '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
-    '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721',
-    '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2',
-    '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
-    '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
-    '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd',
-    '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
-    '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
-    '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
-    '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd',
-    '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
-    '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
-    '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721',
-    '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5',
-    '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722',
-    '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
-    '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
-    '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35',
-    '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
-    '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721',
-    '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd',
-    '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35',
-    '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
-    '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721',
-    '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5',
-    '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35',
-    '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
-    '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
-    '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35',
-    '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'],
-
-  /**
-      * 数字转中文速查表
-      * @Array Of Property
-      * @trans ['日','一','二','三','四','五','六','七','八','九','十']
-      * @return Cn string
-      */
-  nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'],
-
-  /**
-      * 日期转农历称呼速查表
-      * @Array Of Property
-      * @trans ['初','十','廿','卅']
-      * @return Cn string
-      */
-  nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'],
-
-  /**
-      * 月份转农历称呼速查表
-      * @Array Of Property
-      * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊']
-      * @return Cn string
-      */
-  nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'],
-
-  /**
-      * 返回农历y年一整年的总天数
-      * @param lunar Year
-      * @return Number
-      * @eg:var count = calendar.lYearDays(1987) ;//count=387
-      */
-  lYearDays: function (y) {
-    var i; var sum = 348
-    for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 }
-    return (sum + this.leapDays(y))
-  },
-
-  /**
-      * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0
-      * @param lunar Year
-      * @return Number (0-12)
-      * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
-      */
-  leapMonth: function (y) { // 闰字编码 \u95f0
-    return (this.lunarInfo[y - 1900] & 0xf)
-  },
-
-  /**
-      * 返回农历y年闰月的天数 若该年没有闰月则返回0
-      * @param lunar Year
-      * @return Number (0、29、30)
-      * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
-      */
-  leapDays: function (y) {
-    if (this.leapMonth(y)) {
-      return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29)
-    }
-    return (0)
-  },
-
-  /**
-      * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
-      * @param lunar Year
-      * @return Number (-1、29、30)
-      * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
-      */
-  monthDays: function (y, m) {
-    if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1
-    return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29)
-  },
-
-  /**
-      * 返回公历(!)y年m月的天数
-      * @param solar Year
-      * @return Number (-1、28、29、30、31)
-      * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
-      */
-  solarDays: function (y, m) {
-    if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1
-    var ms = m - 1
-    if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29
-      return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28)
-    } else {
-      return (this.solarMonth[ms])
-    }
-  },
-
-  /**
-     * 农历年份转换为干支纪年
-     * @param  lYear 农历年的年份数
-     * @return Cn string
-     */
-  toGanZhiYear: function (lYear) {
-    var ganKey = (lYear - 3) % 10
-    var zhiKey = (lYear - 3) % 12
-    if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干
-    if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支
-    return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1]
-  },
-
-  /**
-     * 公历月、日判断所属星座
-     * @param  cMonth [description]
-     * @param  cDay [description]
-     * @return Cn string
-     */
-  toAstro: function (cMonth, cDay) {
-    var 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'
-    var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22]
-    return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座
-  },
-
-  /**
-      * 传入offset偏移量返回干支
-      * @param offset 相对甲子的偏移量
-      * @return Cn string
-      */
-  toGanZhi: function (offset) {
-    return this.Gan[offset % 10] + this.Zhi[offset % 12]
-  },
-
-  /**
-      * 传入公历(!)y年获得该年第n个节气的公历日期
-      * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
-      * @return day Number
-      * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春
-      */
-  getTerm: function (y, n) {
-    if (y < 1900 || y > 2100) { return -1 }
-    if (n < 1 || n > 24) { return -1 }
-    var _table = this.sTermInfo[y - 1900]
-    var _info = [
-      parseInt('0x' + _table.substr(0, 5)).toString(),
-      parseInt('0x' + _table.substr(5, 5)).toString(),
-      parseInt('0x' + _table.substr(10, 5)).toString(),
-      parseInt('0x' + _table.substr(15, 5)).toString(),
-      parseInt('0x' + _table.substr(20, 5)).toString(),
-      parseInt('0x' + _table.substr(25, 5)).toString()
-    ]
-    var _calday = [
-      _info[0].substr(0, 1),
-      _info[0].substr(1, 2),
-      _info[0].substr(3, 1),
-      _info[0].substr(4, 2),
-
-      _info[1].substr(0, 1),
-      _info[1].substr(1, 2),
-      _info[1].substr(3, 1),
-      _info[1].substr(4, 2),
-
-      _info[2].substr(0, 1),
-      _info[2].substr(1, 2),
-      _info[2].substr(3, 1),
-      _info[2].substr(4, 2),
-
-      _info[3].substr(0, 1),
-      _info[3].substr(1, 2),
-      _info[3].substr(3, 1),
-      _info[3].substr(4, 2),
-
-      _info[4].substr(0, 1),
-      _info[4].substr(1, 2),
-      _info[4].substr(3, 1),
-      _info[4].substr(4, 2),
-
-      _info[5].substr(0, 1),
-      _info[5].substr(1, 2),
-      _info[5].substr(3, 1),
-      _info[5].substr(4, 2)
-    ]
-    return parseInt(_calday[n - 1])
-  },
-
-  /**
-      * 传入农历数字月份返回汉语通俗表示法
-      * @param lunar month
-      * @return Cn string
-      * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
-      */
-  toChinaMonth: function (m) { // 月 => \u6708
-    if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1
-    var s = this.nStr3[m - 1]
-    s += '\u6708'// 加上月字
-    return s
-  },
-
-  /**
-      * 传入农历日期数字返回汉字表示法
-      * @param lunar day
-      * @return Cn string
-      * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
-      */
-  toChinaDay: function (d) { // 日 => \u65e5
-    var s
-    switch (d) {
-      case 10:
-        s = '\u521d\u5341'; break
-      case 20:
-        s = '\u4e8c\u5341'; break
-        break
-      case 30:
-        s = '\u4e09\u5341'; break
-        break
-      default :
-        s = this.nStr2[Math.floor(d / 10)]
-        s += this.nStr1[d % 10]
-    }
-    return (s)
-  },
-
-  /**
-      * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春”
-      * @param y year
-      * @return Cn string
-      * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔'
-      */
-  getAnimal: function (y) {
-    return this.Animals[(y - 4) % 12]
-  },
-
-  /**
-      * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON
-      * @param y  solar year
-      * @param m  solar month
-      * @param d  solar day
-      * @return JSON object
-      * @eg:console.log(calendar.solar2lunar(1987,11,01));
-      */
-  solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31
-    // 年份限定、上限
-    if (y < 1900 || y > 2100) {
-      return -1// undefined转换为数字变为NaN
-    }
-    // 公历传参最下限
-    if (y == 1900 && m == 1 && d < 31) {
-      return -1
-    }
-    // 未传参  获得当天
-    if (!y) {
-      var objDate = new Date()
-    } else {
-      var objDate = new Date(y, parseInt(m) - 1, d)
-    }
-    var i; var leap = 0; var temp = 0
-    // 修正ymd参数
-    var y = objDate.getFullYear()
-    var m = objDate.getMonth() + 1
-    var d = objDate.getDate()
-    var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000
-    for (i = 1900; i < 2101 && offset > 0; i++) {
-      temp = this.lYearDays(i)
-      offset -= temp
-    }
-    if (offset < 0) {
-      offset += temp; i--
-    }
-
-    // 是否今天
-    var isTodayObj = new Date()
-    var isToday = false
-    if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) {
-      isToday = true
-    }
-    // 星期几
-    var nWeek = objDate.getDay()
-    var cWeek = this.nStr1[nWeek]
-    // 数字表示周几顺应天朝周一开始的惯例
-    if (nWeek == 0) {
-      nWeek = 7
-    }
-    // 农历年
-    var year = i
-    var leap = this.leapMonth(i) // 闰哪个月
-    var isLeap = false
-
-    // 效验闰月
-    for (i = 1; i < 13 && offset > 0; i++) {
-      // 闰月
-      if (leap > 0 && i == (leap + 1) && isLeap == false) {
-        --i
-        isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数
-      } else {
-        temp = this.monthDays(year, i)// 计算农历普通月天数
-      }
-      // 解除闰月
-      if (isLeap == true && i == (leap + 1)) { isLeap = false }
-      offset -= temp
-    }
-    // 闰月导致数组下标重叠取反
-    if (offset == 0 && leap > 0 && i == leap + 1) {
-      if (isLeap) {
-        isLeap = false
-      } else {
-        isLeap = true; --i
-      }
-    }
-    if (offset < 0) {
-      offset += temp; --i
-    }
-    // 农历月
-    var month = i
-    // 农历日
-    var day = offset + 1
-    // 天干地支处理
-    var sm = m - 1
-    var gzY = this.toGanZhiYear(year)
-
-    // 当月的两个节气
-    // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year`
-    var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始
-    var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始
-
-    // 依据12节气修正干支月
-    var gzM = this.toGanZhi((y - 1900) * 12 + m + 11)
-    if (d >= firstNode) {
-      gzM = this.toGanZhi((y - 1900) * 12 + m + 12)
-    }
-
-    // 传入的日期的节气与否
-    var isTerm = false
-    var Term = null
-    if (firstNode == d) {
-      isTerm = true
-      Term = this.solarTerm[m * 2 - 2]
-    }
-    if (secondNode == d) {
-      isTerm = true
-      Term = this.solarTerm[m * 2 - 1]
-    }
-    // 日柱 当月一日与 1900/1/1 相差天数
-    var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10
-    var gzD = this.toGanZhi(dayCyclical + d - 1)
-    // 该日期所属的星座
-    var astro = this.toAstro(m, d)
-
-    return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro }
-  },
-
-  /**
-      * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON
-      * @param y  lunar year
-      * @param m  lunar month
-      * @param d  lunar day
-      * @param isLeapMonth  lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可]
-      * @return JSON object
-      * @eg:console.log(calendar.lunar2solar(1987,9,10));
-      */
-  lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1
-    var isLeapMonth = !!isLeapMonth
-    var leapOffset = 0
-    var leapMonth = this.leapMonth(y)
-    var leapDay = this.leapDays(y)
-    if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
-    if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值
-    var day = this.monthDays(y, m)
-    var _day = day
-    // bugFix 2016-9-25
-    // if month is leap, _day use leapDays method
-    if (isLeapMonth) {
-      _day = this.leapDays(y, m)
-    }
-    if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验
-
-    // 计算农历的时间差
-    var offset = 0
-    for (var i = 1900; i < y; i++) {
-      offset += this.lYearDays(i)
-    }
-    var leap = 0; var isAdd = false
-    for (var i = 1; i < m; i++) {
-      leap = this.leapMonth(y)
-      if (!isAdd) { // 处理闰月
-        if (leap <= i && leap > 0) {
-          offset += this.leapDays(y); isAdd = true
-        }
-      }
-      offset += this.monthDays(y, i)
-    }
-    // 转换闰月农历 需补充该年闰月的前一个月的时差
-    if (isLeapMonth) { offset += day }
-    // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
-    var stmap = Date.UTC(1900, 1, 30, 0, 0, 0)
-    var calObj = new Date((offset + d - 31) * 86400000 + stmap)
-    var cY = calObj.getUTCFullYear()
-    var cM = calObj.getUTCMonth() + 1
-    var cD = calObj.getUTCDate()
-
-    return this.solar2lunar(cY, cM, cD)
-  }
-}
-
-export default calendar

+ 0 - 12
src/components/oa-calendar/i18n/en.json

@@ -1,12 +0,0 @@
-{
-	"uni-calender.ok": "ok",
-	"uni-calender.cancel": "cancel",
-	"uni-calender.today": "today",
-	"uni-calender.MON": "MON",
-	"uni-calender.TUE": "TUE",
-	"uni-calender.WED": "WED",
-	"uni-calender.THU": "THU",
-	"uni-calender.FRI": "FRI",
-	"uni-calender.SAT": "SAT",
-	"uni-calender.SUN": "SUN"
-}

+ 0 - 8
src/components/oa-calendar/i18n/index.js

@@ -1,8 +0,0 @@
-import en from './en.json'
-import zhHans from './zh-Hans.json'
-import zhHant from './zh-Hant.json'
-export default {
-	en,
-	'zh-Hans': zhHans,
-	'zh-Hant': zhHant
-}

+ 0 - 12
src/components/oa-calendar/i18n/zh-Hans.json

@@ -1,12 +0,0 @@
-{
-	"uni-calender.ok": "确定",
-	"uni-calender.cancel": "取消",
-	"uni-calender.today": "今日",
-	"uni-calender.SUN": "日",
-	"uni-calender.MON": "一",
-	"uni-calender.TUE": "二",
-	"uni-calender.WED": "三",
-	"uni-calender.THU": "四",
-	"uni-calender.FRI": "五",
-	"uni-calender.SAT": "六"
-}

+ 0 - 12
src/components/oa-calendar/i18n/zh-Hant.json

@@ -1,12 +0,0 @@
-{
-	"uni-calender.ok": "確定",
-	"uni-calender.cancel": "取消",
-	"uni-calender.today": "今日",
-	"uni-calender.SUN": "日",
-	"uni-calender.MON": "一",
-	"uni-calender.TUE": "二",
-	"uni-calender.WED": "三",
-	"uni-calender.THU": "四",
-	"uni-calender.FRI": "五",
-	"uni-calender.SAT": "六"
-}

+ 0 - 188
src/components/oa-calendar/uni-calendar-item.vue

@@ -1,188 +0,0 @@
-<template>
-	<view class="uni-calendar-item__weeks-box" :class="{
-		'uni-calendar-item--disable':weeks.disable,
-		'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-		'uni-calendar-item--checked':(calendar.fullDate === weeks.fullDate && !weeks.isDay) ,
-		'uni-calendar-item--before-checked':weeks.beforeMultiple,
-		'uni-calendar-item--multiple': weeks.multiple,
-		'uni-calendar-item--after-checked':weeks.afterMultiple,
-		}"
-	 @click="choiceDate(weeks)">
-		<view class="uni-calendar-item__weeks-box-item">
-			<text v-if="selected&&weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text>
-			<text class="uni-calendar-item__weeks-box-text" :class="{
-				'uni-calendar-item--isDay-text': weeks.isDay,
-				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
-				'uni-calendar-item--before-checked':weeks.beforeMultiple,
-				'uni-calendar-item--multiple': weeks.multiple,
-				'uni-calendar-item--after-checked':weeks.afterMultiple,
-				'uni-calendar-item--disable':weeks.disable,
-				}">{{weeks.date}}</text>
-			<text v-if="!lunar&&!weeks.extraInfo && weeks.isDay" class="uni-calendar-item__weeks-lunar-text" :class="{
-				'uni-calendar-item--isDay-text':weeks.isDay,
-				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
-				'uni-calendar-item--before-checked':weeks.beforeMultiple,
-				'uni-calendar-item--multiple': weeks.multiple,
-				'uni-calendar-item--after-checked':weeks.afterMultiple,
-				}">{{todayText}}</text>
-			<text v-if="lunar&&!weeks.extraInfo" class="uni-calendar-item__weeks-lunar-text" :class="{
-				'uni-calendar-item--isDay-text':weeks.isDay,
-				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
-				'uni-calendar-item--before-checked':weeks.beforeMultiple,
-				'uni-calendar-item--multiple': weeks.multiple,
-				'uni-calendar-item--after-checked':weeks.afterMultiple,
-				'uni-calendar-item--disable':weeks.disable,
-				}">{{weeks.isDay ? todayText : (weeks.lunar.IDayCn === '初一'?weeks.lunar.IMonthCn:weeks.lunar.IDayCn)}}</text>
-			<text v-if="weeks.extraInfo&&weeks.extraInfo.info" class="uni-calendar-item__weeks-lunar-text" :class="{
-				'uni-calendar-item--extra':weeks.extraInfo.info,
-				'uni-calendar-item--isDay-text':weeks.isDay,
-				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
-				'uni-calendar-item--before-checked':weeks.beforeMultiple,
-				'uni-calendar-item--multiple': weeks.multiple,
-				'uni-calendar-item--after-checked':weeks.afterMultiple,
-				'uni-calendar-item--disable':weeks.disable,
-				}">{{weeks.extraInfo.info}}</text>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-	initVueI18n
-	} from '@dcloudio/uni-i18n'
-	import messages from './i18n/index.js'
-	const {	t	} = initVueI18n(messages)
-	export default {
-		emits:['change'],
-		props: {
-			weeks: {
-				type: Object,
-				default () {
-					return {}
-				}
-			},
-			calendar: {
-				type: Object,
-				default: () => {
-					return {}
-				}
-			},
-			selected: {
-				type: Array,
-				default: () => {
-					return []
-				}
-			},
-			lunar: {
-				type: Boolean,
-				default: false
-			}
-		},
-		computed: {
-			todayText() {
-				return t("uni-calender.today")
-			},
-		},
-		methods: {
-			choiceDate(weeks) {
-				this.$emit('change', weeks)
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	$uni-font-size-base:14px;
-	$uni-text-color:#333;
-	$uni-font-size-sm:12px;
-	$uni-color-error: #e43d33;
-	$uni-opacity-disabled: 0.3;
-	$uni-text-color-disable:#c0c0c0;
-	$uni-primary: #2979ff !default;
-	.uni-calendar-item__weeks-box {
-		flex: 1;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-	}
-
-	.uni-calendar-item__weeks-box-text {
-		font-size: $uni-font-size-base;
-		color: $uni-text-color;
-	}
-
-	.uni-calendar-item__weeks-lunar-text {
-		font-size: $uni-font-size-sm;
-		color: $uni-text-color;
-	}
-
-	.uni-calendar-item__weeks-box-item {
-		position: relative;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-		width: 100rpx;
-		height: 100rpx;
-	}
-
-	.uni-calendar-item__weeks-box-circle {
-		position: absolute;
-		top: 5px;
-		right: 5px;
-		width: 8px;
-		height: 8px;
-		border-radius: 8px;
-		background-color: $uni-color-error;
-
-	}
-
-	.uni-calendar-item--disable {
-		background-color: rgba(249, 249, 249, $uni-opacity-disabled);
-		color: $uni-text-color-disable;
-	}
-
-	.uni-calendar-item--isDay-text {
-		color: $uni-primary;
-	}
-
-	.uni-calendar-item--isDay {
-		background-color: $uni-primary;
-		opacity: 0.8;
-		color: #fff;
-	}
-
-	.uni-calendar-item--extra {
-		color: $uni-color-error;
-		opacity: 0.8;
-	}
-
-	.uni-calendar-item--checked {
-		background-color: $uni-primary;
-		color: #fff;
-		opacity: 0.8;
-	}
-
-	.uni-calendar-item--multiple {
-		background-color: $uni-primary;
-		color: #fff;
-		opacity: 0.8;
-	}
-	.uni-calendar-item--before-checked {
-		background-color: #ff5a5f;
-		color: #fff;
-	}
-	.uni-calendar-item--after-checked {
-		background-color: #ff5a5f;
-		color: #fff;
-	}
-</style>

+ 0 - 607
src/components/oa-calendar/uni-calendar.vue

@@ -1,607 +0,0 @@
-<template>
-  <view class="uni-calendar">
-    <view v-if="!insert && show" class="uni-calendar__mask" :class="{ 'uni-calendar--mask-show': aniMaskShow }" @click="clean"></view>
-    <view v-if="insert || show" class="uni-calendar__content" :class="{ 'uni-calendar--fixed': !insert, 'uni-calendar--ani-show': aniMaskShow }" @touchstart="touchStart" @touchend="touchEnd">
-      <view v-if="!insert" class="uni-calendar__header uni-calendar--fixed-top">
-        <view class="uni-calendar__header-btn-box" @click="close">
-          <text class="uni-calendar__header-text uni-calendar--fixed-width">{{ cancelText }}</text>
-        </view>
-        <view class="uni-calendar__header-btn-box" @click="confirm">
-          <text class="uni-calendar__header-text uni-calendar--fixed-width">{{ okText }}</text>
-        </view>
-      </view>
-      <view class="uni-calendar__header">
-        <view class="uni-calendar__header-btn-box" v-if="false" @click.stop="pre">
-          <view class="uni-calendar__header-btn uni-calendar--left"></view>
-        </view>
-
-        <picker mode="date" :value="date" fields="month" @change="bindDateChange">
-          <text class="uni-calendar__header-text">{{ (nowDate.year || "") + " 年 " + (nowDate.month || "") + " 月" }}</text>
-        </picker>
-
-        <view style="margin: auto">
-          <text class="uni-calendar__backtoday" v-if="false" @click="backtoday">{{ todayText }}</text>
-        </view>
-
-        <view class="uni-calendar__header-right">
-          <slot name="headerRight"> </slot>
-        </view>
-
-        <view class="uni-calendar__header-btn-box" v-if="false" @click.stop="next">
-          <view class="uni-calendar__header-btn uni-calendar--right"></view>
-        </view>
-      </view>
-      <view class="uni-calendar__box">
-        <view v-if="showMonth" class="uni-calendar__box-bg">
-          <text class="uni-calendar__box-bg-text">{{ nowDate.month }}</text>
-        </view>
-        <view class="uni-calendar__weeks">
-          <view class="uni-calendar__weeks-day">
-            <text class="uni-calendar__weeks-day-text">{{ SUNText }}</text>
-          </view>
-          <view class="uni-calendar__weeks-day">
-            <text class="uni-calendar__weeks-day-text">{{ monText }}</text>
-          </view>
-          <view class="uni-calendar__weeks-day">
-            <text class="uni-calendar__weeks-day-text">{{ TUEText }}</text>
-          </view>
-          <view class="uni-calendar__weeks-day">
-            <text class="uni-calendar__weeks-day-text">{{ WEDText }}</text>
-          </view>
-          <view class="uni-calendar__weeks-day">
-            <text class="uni-calendar__weeks-day-text">{{ THUText }}</text>
-          </view>
-          <view class="uni-calendar__weeks-day">
-            <text class="uni-calendar__weeks-day-text">{{ FRIText }}</text>
-          </view>
-          <view class="uni-calendar__weeks-day">
-            <text class="uni-calendar__weeks-day-text">{{ SATText }}</text>
-          </view>
-        </view>
-        <view class="uni-calendar__weeks" v-for="(item, weekIndex) in weeks" :key="weekIndex">
-          <view class="uni-calendar__weeks-item" v-for="(weeks, weeksIndex) in item" :key="weeksIndex">
-            <calendar-item class="uni-calendar-item--hook" :weeks="weeks" :calendar="calendar" :selected="selected" :lunar="lunar" @change="choiceDate"></calendar-item>
-          </view>
-        </view>
-      </view>
-    </view>
-  </view>
-</template>
-
-<script>
-import Calendar from "./util.js";
-import calendarItem from "./uni-calendar-item.vue";
-import { initVueI18n } from "@dcloudio/uni-i18n";
-import messages from "./i18n/index.js";
-const { t } = initVueI18n(messages);
-/**
- * Calendar 日历
- * @description 日历组件可以查看日期,选择任意范围内的日期,打点操作。常用场景如:酒店日期预订、火车机票选择购买日期、上下班打卡等
- * @tutorial https://ext.dcloud.net.cn/plugin?id=56
- * @property {String} date 自定义当前时间,默认为今天
- * @property {Boolean} lunar 显示农历
- * @property {String} startDate 日期选择范围-开始日期
- * @property {String} endDate 日期选择范围-结束日期
- * @property {Boolean} range 范围选择
- * @property {Boolean} insert = [true|false] 插入模式,默认为false
- * @property {Boolean} clearDate = [true|false] 弹窗模式是否清空上次选择内容
- * @property {Array} selected 打点,期待格式[{date: '2019-06-27', info: '签到', data: { custom: '自定义信息', name: '自定义消息头',xxx:xxx... }}]
- * @property {Boolean} showMonth 是否选择月份为背景
- * @event {Function} change 日期改变,`insert :ture` 时生效
- * @event {Function} confirm 确认选择`insert :false` 时生效
- * @event {Function} monthSwitch 切换月份时触发
- * @example <uni-calendar :insert="true":lunar="true" :start-date="'2019-3-2'":end-date="'2019-5-20'"@change="change" />
- */
-
-let touchStartX = 0; // 触屏起始点x
-let touchStartY = 0; // 触屏起始点y
-export default {
-  components: {
-    calendarItem,
-  },
-  emits: ["close", "confirm", "change", "monthSwitch"],
-  props: {
-    date: {
-      type: String,
-      default: "",
-    },
-    selected: {
-      type: Array,
-      default() {
-        return [];
-      },
-    },
-    lunar: {
-      type: Boolean,
-      default: false,
-    },
-    startDate: {
-      type: String,
-      default: "",
-    },
-    endDate: {
-      type: String,
-      default: "",
-    },
-    range: {
-      type: Boolean,
-      default: false,
-    },
-    insert: {
-      type: Boolean,
-      default: true,
-    },
-    showMonth: {
-      type: Boolean,
-      default: true,
-    },
-    clearDate: {
-      type: Boolean,
-      default: true,
-    },
-  },
-  data() {
-    return {
-      show: false,
-      weeks: [],
-      calendar: {},
-      nowDate: "",
-      aniMaskShow: false,
-    };
-  },
-  computed: {
-    /**
-     * for i18n
-     */
-
-    okText() {
-      return t("uni-calender.ok");
-    },
-    cancelText() {
-      return t("uni-calender.cancel");
-    },
-    todayText() {
-      return t("uni-calender.today");
-    },
-    monText() {
-      return t("uni-calender.MON");
-    },
-    TUEText() {
-      return t("uni-calender.TUE");
-    },
-    WEDText() {
-      return t("uni-calender.WED");
-    },
-    THUText() {
-      return t("uni-calender.THU");
-    },
-    FRIText() {
-      return t("uni-calender.FRI");
-    },
-    SATText() {
-      return t("uni-calender.SAT");
-    },
-    SUNText() {
-      return t("uni-calender.SUN");
-    },
-  },
-  watch: {
-    date(newVal) {
-      // this.cale.setDate(newVal)
-      this.init(newVal);
-    },
-    startDate(val) {
-      this.cale.resetSatrtDate(val);
-      this.cale.setDate(this.nowDate.fullDate);
-      this.weeks = this.cale.weeks;
-    },
-    endDate(val) {
-      this.cale.resetEndDate(val);
-      this.cale.setDate(this.nowDate.fullDate);
-      this.weeks = this.cale.weeks;
-    },
-    selected(newVal) {
-      this.cale.setSelectInfo(this.nowDate.fullDate, newVal);
-      this.weeks = this.cale.weeks;
-    },
-  },
-  created() {
-    // 获取日历方法实例
-    this.cale = new Calendar({
-      // date: new Date(),
-      selected: this.selected,
-      startDate: this.startDate,
-      endDate: this.endDate,
-      range: this.range,
-    });
-    // 选中某一天
-    // this.cale.setDate(this.date)
-    this.init(this.date);
-    // this.setDay
-  },
-  methods: {
-    // 取消穿透
-    clean() {},
-    bindDateChange(e) {
-      const value = e.detail.value + "-1";
-      console.log(this.cale.getDate(value));
-      this.setDate(value);
-    },
-    /**
-     * 初始化日期显示
-     * @param {Object} date
-     */
-    init(date) {
-      this.cale.setDate(date);
-      this.weeks = this.cale.weeks;
-      this.nowDate = this.calendar = this.cale.getInfo(date);
-    },
-    /**
-     * 打开日历弹窗
-     */
-    open() {
-      // 弹窗模式并且清理数据
-      if (this.clearDate && !this.insert) {
-        this.cale.cleanMultipleStatus();
-        // this.cale.setDate(this.date)
-        this.init(this.date);
-      }
-      this.show = true;
-      this.$nextTick(() => {
-        setTimeout(() => {
-          this.aniMaskShow = true;
-        }, 50);
-      });
-    },
-    /**
-     * 关闭日历弹窗
-     */
-    close() {
-      this.aniMaskShow = false;
-      this.$nextTick(() => {
-        setTimeout(() => {
-          this.show = false;
-          this.$emit("close");
-        }, 300);
-      });
-    },
-    /**
-     * 确认按钮
-     */
-    confirm() {
-      this.setEmit("confirm");
-      this.close();
-    },
-    /**
-     * 变化触发
-     */
-    change() {
-      if (!this.insert) return;
-      this.setEmit("change");
-    },
-    /**
-     * 选择月份触发
-     */
-    monthSwitch() {
-      let { year, month } = this.nowDate;
-      this.$emit("monthSwitch", {
-        year,
-        month: Number(month),
-      });
-    },
-    /**
-     * 派发事件
-     * @param {Object} name
-     */
-    setEmit(name) {
-      let { year, month, date, fullDate, lunar, extraInfo } = this.calendar;
-      this.$emit(name, {
-        range: this.cale.multipleStatus,
-        year,
-        month,
-        date,
-        fulldate: fullDate,
-        lunar,
-        extraInfo: extraInfo || {},
-      });
-    },
-    /**
-     * 选择天触发
-     * @param {Object} weeks
-     */
-    choiceDate(weeks) {
-      if (weeks.disable) return;
-      this.calendar = weeks;
-      // 设置多选
-      this.cale.setMultiple(this.calendar.fullDate);
-      this.weeks = this.cale.weeks;
-      this.change();
-    },
-    /**
-     * 回到今天
-     */
-    backtoday() {
-      console.log(this.cale.getDate(new Date()).fullDate);
-      let date = this.cale.getDate(new Date()).fullDate;
-      // this.cale.setDate(date)
-      this.init(date);
-      this.change();
-    },
-    /**
-     * 上个月
-     */
-    pre() {
-      const preDate = this.cale.getDate(this.nowDate.fullDate, -1, "month").fullDate;
-      this.setDate(preDate);
-      this.monthSwitch();
-    },
-    /**
-     * 下个月
-     */
-    next() {
-      const nextDate = this.cale.getDate(this.nowDate.fullDate, +1, "month").fullDate;
-      this.setDate(nextDate);
-      this.monthSwitch();
-    },
-    /**
-     * 设置日期
-     * @param {Object} date
-     */
-    setDate(date) {
-      this.cale.setDate(date);
-      this.weeks = this.cale.weeks;
-      this.nowDate = this.cale.getInfo(date);
-    },
-    /**
-     * @触摸开始
-     **/
-    touchStart(e) {
-      console.log("触摸开始");
-      touchStartX = e.touches[0].clientX;
-      touchStartY = e.touches[0].clientY;
-    },
-    /**
-     * @触摸结束
-     **/
-    touchEnd(e) {
-      console.log("触摸结束");
-      let deltaX = e.changedTouches[0].clientX - touchStartX;
-      let deltaY = e.changedTouches[0].clientY - touchStartY;
-      if (Math.abs(deltaX) > 50 && Math.abs(deltaX) > Math.abs(deltaY)) {
-        if (deltaX >= 0) {
-          console.log("左滑");
-          this.pre();
-          // calendar.value.selectDate("prev-month");
-        } else {
-          console.log("右滑");
-          this.next();
-          // calendar.value.selectDate("next-month");
-        }
-      } else if (Math.abs(deltaY) > 50 && Math.abs(deltaX) < Math.abs(deltaY)) {
-        if (deltaY < 0) {
-          console.log("上滑");
-        } else {
-          console.log("下滑");
-        }
-      } else {
-        console.log("可能是误触!");
-      }
-    },
-  },
-};
-</script>
-
-<style lang="scss" scoped>
-$uni-bg-color-mask: rgba(
-  $color: #000000,
-  $alpha: 0.4,
-);
-$uni-border-color: #ededed;
-$uni-text-color: #333;
-$uni-bg-color-hover: #f1f1f1;
-$uni-font-size-sm: 12px;
-$uni-font-size-base: 14px;
-$uni-text-color-placeholder: #808080;
-$uni-color-subtitle: #555555;
-$uni-text-color-grey: #999;
-.uni-calendar {
-  /* #ifndef APP-NVUE */
-  display: flex;
-  /* #endif */
-  flex-direction: column;
-}
-
-.uni-calendar__mask {
-  position: fixed;
-  bottom: 0;
-  top: 0;
-  left: 0;
-  right: 0;
-  background-color: $uni-bg-color-mask;
-  transition-property: opacity;
-  transition-duration: 0.3s;
-  opacity: 0;
-  /* #ifndef APP-NVUE */
-  z-index: 99;
-  /* #endif */
-}
-
-.uni-calendar--mask-show {
-  opacity: 1;
-}
-
-.uni-calendar--fixed {
-  position: fixed;
-  /* #ifdef APP-NVUE */
-  bottom: 0;
-  /* #endif */
-  left: 0;
-  right: 0;
-  transition-property: transform;
-  transition-duration: 0.3s;
-  transform: translateY(460px);
-  /* #ifndef APP-NVUE */
-  bottom: calc(var(--window-bottom));
-  z-index: 99;
-  /* #endif */
-}
-
-.uni-calendar--ani-show {
-  transform: translateY(0);
-}
-
-.uni-calendar__content {
-  background-color: #fff;
-}
-
-.uni-calendar__header {
-  position: relative;
-  /* #ifndef APP-NVUE */
-  display: flex;
-  /* #endif */
-  flex-direction: row;
-  // justify-content: center;
-  align-items: center;
-  // height: 50px;
-  line-height: 40px;
-  padding: 0 15px;
-  border-bottom-color: $uni-border-color;
-  border-bottom-style: solid;
-  border-bottom-width: 1px;
-}
-
-.uni-calendar--fixed-top {
-  /* #ifndef APP-NVUE */
-  display: flex;
-  /* #endif */
-  flex-direction: row;
-  justify-content: space-between;
-  border-top-color: $uni-border-color;
-  border-top-style: solid;
-  border-top-width: 1px;
-}
-
-.uni-calendar--fixed-width {
-  width: 50px;
-}
-
-.uni-calendar__backtoday {
-  padding: 0 10px;
-  height: 25px;
-  line-height: 25px;
-  font-size: $uni-font-size-sm;
-  border-radius: 25px;
-  color: $uni-text-color;
-  background-color: $uni-bg-color-hover;
-}
-
-.uni-calendar__header-text {
-  text-align: center;
-  width: 100px;
-  font-size: $uni-font-size-base;
-  color: $uni-text-color;
-}
-
-:deep() {
-  .uni-calendar__header-right {
-    display: flex;
-    .item {
-      font-size: $uni-font-size-base;
-      + .item {
-        margin-left: 10px;
-      }
-      .item_title {
-        margin-right: 5px;
-      }
-    }
-  }
-}
-
-.uni-calendar__header-btn-box {
-  /* #ifndef APP-NVUE */
-  display: flex;
-  /* #endif */
-  flex-direction: row;
-  align-items: center;
-  justify-content: center;
-  width: 20px;
-  height: 10px;
-}
-
-.uni-calendar__header-btn {
-  width: 10px;
-  height: 10px;
-  border-left-color: $uni-text-color-placeholder;
-  border-left-style: solid;
-  border-left-width: 1.5px;
-  border-top-color: $uni-color-subtitle;
-  border-top-style: solid;
-  border-top-width: 1.5px;
-}
-
-.uni-calendar--left {
-  transform: rotate(-45deg);
-}
-
-.uni-calendar--right {
-  transform: rotate(135deg);
-}
-
-.uni-calendar__weeks {
-  position: relative;
-  /* #ifndef APP-NVUE */
-  display: flex;
-  /* #endif */
-  flex-direction: row;
-}
-
-.uni-calendar__weeks-item {
-  flex: 1;
-}
-
-.uni-calendar__weeks-day {
-  flex: 1;
-  /* #ifndef APP-NVUE */
-  display: flex;
-  /* #endif */
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  height: 45px;
-  border-bottom-color: #f5f5f5;
-  border-bottom-style: solid;
-  border-bottom-width: 1px;
-}
-
-.uni-calendar__weeks-day-text {
-  font-size: $uni-font-size-base;
-}
-
-.uni-calendar__box {
-  position: relative;
-}
-
-.uni-calendar__box-bg {
-  /* #ifndef APP-NVUE */
-  display: flex;
-  /* #endif */
-  justify-content: center;
-  align-items: center;
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-}
-
-.uni-calendar__box-bg-text {
-  font-size: 200px;
-  font-weight: bold;
-  color: $uni-text-color-grey;
-  opacity: 0.1;
-  text-align: center;
-  /* #ifndef APP-NVUE */
-  line-height: 1;
-  /* #endif */
-}
-</style>

+ 0 - 350
src/components/oa-calendar/util.js

@@ -1,350 +0,0 @@
-import CALENDAR from './calendar.js'
-
-class Calendar {
-	constructor({
-		date,
-		selected,
-		startDate,
-		endDate,
-		range
-	} = {}) {
-		// 当前日期
-		this.date = this.getDate(new Date()) // 当前初入日期
-		// 打点信息
-		this.selected = selected || [];
-		// 范围开始
-		this.startDate = startDate
-		// 范围结束
-		this.endDate = endDate
-		this.range = range
-		// 多选状态
-		this.cleanMultipleStatus()
-		// 每周日期
-		this.weeks = {}
-		// this._getWeek(this.date.fullDate)
-	}
-	/**
-	 * 设置日期
-	 * @param {Object} date
-	 */
-	setDate(date) {
-		this.selectDate = this.getDate(date)
-		this._getWeek(this.selectDate.fullDate)
-	}
-
-	/**
-	 * 清理多选状态
-	 */
-	cleanMultipleStatus() {
-		this.multipleStatus = {
-			before: '',
-			after: '',
-			data: []
-		}
-	}
-
-	/**
-	 * 重置开始日期
-	 */
-	resetSatrtDate(startDate) {
-		// 范围开始
-		this.startDate = startDate
-
-	}
-
-	/**
-	 * 重置结束日期
-	 */
-	resetEndDate(endDate) {
-		// 范围结束
-		this.endDate = endDate
-	}
-
-	/**
-	 * 获取任意时间
-	 */
-	getDate(date, AddDayCount = 0, str = 'day') {
-		if (!date) {
-			date = new Date()
-		}
-		if (typeof date !== 'object') {
-			date = date.replace(/-/g, '/')
-		}
-		const dd = new Date(date)
-		switch (str) {
-			case 'day':
-				dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期
-				break
-			case 'month':
-				if (dd.getDate() === 31) {
-					dd.setDate(dd.getDate() + AddDayCount)
-				} else {
-					dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期
-				}
-				break
-			case 'year':
-				dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期
-				break
-		}
-		const y = dd.getFullYear()
-		const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0
-		const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0
-		return {
-			fullDate: y + '-' + m + '-' + d,
-			year: y,
-			month: m,
-			date: d,
-			day: dd.getDay()
-		}
-	}
-
-
-	/**
-	 * 获取上月剩余天数
-	 */
-	_getLastMonthDays(firstDay, full) {
-		let dateArr = []
-		for (let i = firstDay; i > 0; i--) {
-			const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate()
-			dateArr.push({
-				date: beforeDate,
-				month: full.month - 1,
-				lunar: this.getlunar(full.year, full.month - 1, beforeDate),
-				disable: true
-			})
-		}
-		return dateArr
-	}
-	/**
-	 * 获取本月天数
-	 */
-	_currentMonthDys(dateData, full) {
-		let dateArr = []
-		let fullDate = this.date.fullDate
-		for (let i = 1; i <= dateData; i++) {
-			let nowDate = full.year + '-' + (full.month < 10 ?
-				full.month : full.month) + '-' + (i < 10 ?
-				'0' + i : i)
-			// 是否今天
-			let isDay = fullDate === nowDate
-			// 获取打点信息
-			let info = this.selected && this.selected.find((item) => {
-				if (this.dateEqual(nowDate, item.date)) {
-					return item
-				}
-			})
-
-			// 日期禁用
-			let disableBefore = true
-			let disableAfter = true
-			if (this.startDate) {
-				// let dateCompBefore = this.dateCompare(this.startDate, fullDate)
-				// disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate)
-				disableBefore = this.dateCompare(this.startDate, nowDate)
-			}
-
-			if (this.endDate) {
-				// let dateCompAfter = this.dateCompare(fullDate, this.endDate)
-				// disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate)
-				disableAfter = this.dateCompare(nowDate, this.endDate)
-			}
-			let multiples = this.multipleStatus.data
-			let checked = false
-			let multiplesStatus = -1
-			if (this.range) {
-				if (multiples) {
-					multiplesStatus = multiples.findIndex((item) => {
-						return this.dateEqual(item, nowDate)
-					})
-				}
-				if (multiplesStatus !== -1) {
-					checked = true
-				}
-			}
-			let data = {
-				fullDate: nowDate,
-				year: full.year,
-				date: i,
-				multiple: this.range ? checked : false,
-				beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate),
-				afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate),
-				month: full.month,
-				lunar: this.getlunar(full.year, full.month, i),
-				disable: !(disableBefore && disableAfter),
-				isDay
-			}
-			if (info) {
-				data.extraInfo = info
-			}
-
-			dateArr.push(data)
-		}
-		return dateArr
-	}
-	/**
-	 * 获取下月天数
-	 */
-	_getNextMonthDays(surplus, full) {
-		let dateArr = []
-		for (let i = 1; i < surplus + 1; i++) {
-			dateArr.push({
-				date: i,
-				month: Number(full.month) + 1,
-				lunar: this.getlunar(full.year, Number(full.month) + 1, i),
-				disable: true
-			})
-		}
-		return dateArr
-	}
-
-	/**
-	 * 获取当前日期详情
-	 * @param {Object} date
-	 */
-	getInfo(date) {
-		if (!date) {
-			date = new Date()
-		}
-		const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate)
-		return dateInfo
-	}
-
-	/**
-	 * 比较时间大小
-	 */
-	dateCompare(startDate, endDate) {
-		// 计算截止时间
-		startDate = new Date(startDate.replace('-', '/').replace('-', '/'))
-		// 计算详细项的截止时间
-		endDate = new Date(endDate.replace('-', '/').replace('-', '/'))
-		if (startDate <= endDate) {
-			return true
-		} else {
-			return false
-		}
-	}
-
-	/**
-	 * 比较时间是否相等
-	 */
-	dateEqual(before, after) {
-		// 计算截止时间
-		before = new Date(before.replace('-', '/').replace('-', '/'))
-		// 计算详细项的截止时间
-		after = new Date(after.replace('-', '/').replace('-', '/'))
-		if (before.getTime() - after.getTime() === 0) {
-			return true
-		} else {
-			return false
-		}
-	}
-
-
-	/**
-	 * 获取日期范围内所有日期
-	 * @param {Object} begin
-	 * @param {Object} end
-	 */
-	geDateAll(begin, end) {
-		var arr = []
-		var ab = begin.split('-')
-		var ae = end.split('-')
-		var db = new Date()
-		db.setFullYear(ab[0], ab[1] - 1, ab[2])
-		var de = new Date()
-		de.setFullYear(ae[0], ae[1] - 1, ae[2])
-		var unixDb = db.getTime() - 24 * 60 * 60 * 1000
-		var unixDe = de.getTime() - 24 * 60 * 60 * 1000
-		for (var k = unixDb; k <= unixDe;) {
-			k = k + 24 * 60 * 60 * 1000
-			arr.push(this.getDate(new Date(parseInt(k))).fullDate)
-		}
-		return arr
-	}
-	/**
-	 * 计算阴历日期显示
-	 */
-	getlunar(year, month, date) {
-		return CALENDAR.solar2lunar(year, month, date)
-	}
-	/**
-	 * 设置打点
-	 */
-	setSelectInfo(data, value) {
-		this.selected = value
-		this._getWeek(data)
-	}
-
-	/**
-	 *  获取多选状态
-	 */
-	setMultiple(fullDate) {
-		let {
-			before,
-			after
-		} = this.multipleStatus
-
-		if (!this.range) return
-		if (before && after) {
-			this.multipleStatus.before = ''
-			this.multipleStatus.after = ''
-			this.multipleStatus.data = []
-		} else {
-			if (!before) {
-				this.multipleStatus.before = fullDate
-			} else {
-				this.multipleStatus.after = fullDate
-				if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) {
-					this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after);
-				} else {
-					this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before);
-				}
-			}
-		}
-		this._getWeek(fullDate)
-	}
-
-	/**
-	 * 获取每周数据
-	 * @param {Object} dateData
-	 */
-	_getWeek(dateData) {
-		const {
-			year,
-			month
-		} = this.getDate(dateData)
-		let firstDay = new Date(year, month - 1, 1).getDay()
-		let currentDay = new Date(year, month, 0).getDate()
-		let dates = {
-			lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天
-			currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数
-			nextMonthDays: [], // 下个月开始几天
-			weeks: []
-		}
-		let canlender = []
-		const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length)
-		dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData))
-		canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays)
-		let weeks = {}
-		// 拼接数组  上个月开始几天 + 本月天数+ 下个月开始几天
-		for (let i = 0; i < canlender.length; i++) {
-			if (i % 7 === 0) {
-				weeks[parseInt(i / 7)] = new Array(7)
-			}
-			weeks[parseInt(i / 7)][i % 7] = canlender[i]
-		}
-		this.canlender = canlender
-		this.weeks = weeks
-	}
-
-	//静态方法
-	// static init(date) {
-	// 	if (!this.instance) {
-	// 		this.instance = new Calendar(date);
-	// 	}
-	// 	return this.instance;
-	// }
-}
-
-
-export default Calendar

+ 0 - 65
src/components/oa-dropdown/index.vue

@@ -1,65 +0,0 @@
-<template>
-  <view>
-    <view class="oa-dropdown" :class="dropdownShow ? 'show' : 'none'">
-      <view class="content">
-        <slot name="content"></slot>
-      </view>
-    </view>
-    <view v-if="closeOnClickOverlay" class="oa-dropdown" :class="dropdownShow ? 'mask' : 'none'" @click="close()"> </view>
-  </view>
-</template>
-<script setup>
-import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, watchEffect, toRefs } from "vue";
-
-const emit = defineEmits(["close"]);
-const props = defineProps({
-  //显示隐藏
-  dropdownShow: {
-    type: Boolean,
-    default: false,
-  },
-  //是否开启遮罩层关闭
-  closeOnClickOverlay: {
-    type: Boolean,
-    default: true,
-  },
-});
-
-const { dropdownShow, closeOnClickOverlay } = toRefs(props);
-
-function close() {
-  emit("close", false);
-}
-</script>
-<style lang="scss" scoped>
-.oa-dropdown {
-  position: absolute;
-  width: 100%;
-  background-color: #fff;
-  max-height: 0;
-  overflow: hidden;
-  z-index: 90;
-  transition: max-height 0.4s ease-in-out;
-  box-shadow: 0px 1px 2px 0px rgba(141, 141, 141, 0.4);
-
-  &.show {
-    max-height: 100%;
-  }
-
-  &.mask {
-    position: fixed;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    background-color: transparent;
-    height: 100%;
-    z-index: 50;
-  }
-
-  .content {
-    padding: 10px;
-  }
-}
-</style>

+ 0 - 149
src/components/oa-movable/index.vue

@@ -1,149 +0,0 @@
-<template>
-  <movable-area class="fixed-box">
-    <movable-view class="fixed-button" direction="all" :inertia="true" y="100px">
-      <view class="menuBox">
-        <view class="mainMenu iconfont oaIcon-jiahao menu-item-icon" :style="{ background: themesColor }" @click="declick"></view>
-        <view class="posi" :animation="animationData">
-          <slot name="content"> </slot>
-        </view>
-      </view>
-    </movable-view>
-  </movable-area>
-</template>
-<script setup>
-import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, watchEffect, toRefs, toRef, watch } from "vue";
-
-const emit = defineEmits(["load", "refresh"]);
-const props = defineProps({
-  //主题颜色
-  themesColor: {
-    type: String,
-    default: "#3f99ff",
-  },
-});
-
-const defaultArray = reactive({
-  off: true,
-  animation: null,
-  animationData: {},
-});
-
-const { themesColor } = toRefs(props);
-const { off, animation, animationData } = toRefs(defaultArray);
-
-// 悬浮按钮
-function declick() {
-  if (off.value) {
-    //使用动画
-    rotateAndScale();
-  } else {
-    norotateAndScale();
-  }
-  off.value = !off.value;
-}
-
-//定义动画内容
-function rotateAndScale() {
-  animation.value.rotate(0).translateY(-1).step();
-  //导出动画数据传递给data层
-  animationData.value = animation.value.export();
-}
-
-//当!off的时候动画回到原始位置
-function norotateAndScale() {
-  animation.value.rotate(0).translateY(150).step();
-  animationData.value = animation.value.export();
-}
-
-onLoad((option) => {
-  animation.value = uni.createAnimation();
-});
-
-onShow(() => {
-  var animation1 = uni.createAnimation({
-    duration: 500,
-    trmingFunction: "ease",
-  });
-  animation.value = animation1;
-});
-</script>
-
-<style lang="scss" scoped>
-.fixed-box {
-  pointer-events: none;
-  width: 100vw;
-  height: 100vh;
-  position: fixed;
-  left: 0;
-  bottom: 0;
-  z-index: 100000;
-}
-
-.fixed-button {
-  right: 0;
-  top: 60vh;
-  left: auto;
-  width: 50px;
-  height: 150px;
-  display: flex;
-  padding: 5px 5px;
-  justify-content: center;
-  align-items: center;
-  pointer-events: auto;
-}
-
-.menuBox {
-  width: 100%;
-  height: 100%;
-  position: relative;
-  z-index: 1;
-  overflow: hidden;
-  border-radius: 25px;
-}
-
-.mainMenu {
-  width: 50px;
-  height: 50px;
-  position: absolute;
-  right: 0;
-  bottom: 0;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  border-radius: 100%;
-}
-
-:deep(.iconfont) {
-  color: #fff;
-  font-size: 28px;
-}
-
-.posi {
-  width: 50px;
-  position: relative;
-  z-index: -1;
-  transform: rotate(0deg) translateY(150px);
-  background-color: #fff;
-  border-radius: 50rpx;
-  padding-bottom: 50px;
-
-  :deep(.iconfont) {
-    width: 50px;
-    height: 50px;
-    font-size: 18px;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    color: #333333 !important;
-  }
-}
-
-/* 适配iphonex 有底部横条的 */
-@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) {
-  .fixed-box {
-    bottom: constant(safe-area-inset-bottom);
-    bottom: env(safe-area-inset-bottom);
-  }
-}
-</style>

+ 0 - 263
src/components/oa-scroll/index.vue

@@ -1,263 +0,0 @@
-<template>
-  <scroll-view
-    :class="customClass"
-    :style="{
-      //#ifdef APP-PLUS || MP-WEIXIN
-      height: `calc(100vh - (${!isSticky ? '0px' : '44px'}))`,
-      //#endif
-      //#ifdef H5
-      height: `calc(100vh - (${!isSticky ? '44px' : '88px'}))`,
-      //#endif
-      ...customStyle,
-    }"
-    :scroll-y="true"
-    scroll-with-animation
-    :refresher-threshold="refresherThreshold"
-    :refresher-default-style="refresherDefaultStyle"
-    :refresherEnabled="refresherEnabled"
-    :refresher-triggered="triggered"
-    :refresher-background="refresherBackground"
-    :scroll-top="scrollTop"
-    :scroll-into-view="scrollIntoView"
-    @refresherrefresh="onRefresh"
-    @scrolltolower="scrolltolower"
-  >
-    <slot name="topLoading" v-if="refresherDefaultStyle === 'none'">
-      <view
-        class="topBox"
-        :style="{
-          marginTop: '-' + refresherThreshold + 'px',
-          height: refresherThreshold + 'px',
-        }"
-      >
-        <view class="loader">
-          <view v-for="(v, i) in 10" :key="v" :style="{ transform: 'rotate(' + i * 36 + 'deg)', animationDelay: v == 10 ? 1 + 's' : '0.' + v + 's' }"> </view>
-        </view>
-        <view class="title">
-          {{ topTis }}
-        </view>
-      </view>
-    </slot>
-    <slot name="default"> </slot>
-    <slot name="bottomLoading">
-      <div class="bottoBox">
-        <span
-          v-show="total != 0 && refresherLoad && refresherLoadTitle"
-          :style="{
-            marginTop: '20px',
-            marginBottom: '20px',
-          }"
-        >
-          {{ pageSize >= total ? "没有更多啦~" : isScrolltolower }}
-        </span>
-        <span
-          v-show="total == 0 && refresherEnabled && refresherEnabledTitle && !triggered"
-          :style="{
-            marginTop: '20px',
-            marginBottom: '20px',
-          }"
-        >
-          <image style="width: 160px; height: 160px" src="@/static/images/data.png"></image>
-          <view>暂无数据</view>
-        </span>
-      </div>
-    </slot>
-  </scroll-view>
-</template>
-<script setup>
-import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, watchEffect, toRefs, toRef, watch, computed } from "vue";
-
-const emit = defineEmits(["load", "refresh"]);
-const props = defineProps({
-  //当前页数量
-  pageSize: {
-    type: Number,
-    default: 30,
-  },
-  //数据总数
-  total: {
-    type: Number,
-    default: 0,
-  },
-  //设置滚动条位置
-  scrollTop: {
-    type: String,
-    default: "",
-  },
-  //设置外部class
-  customClass: {
-    type: String,
-    default: "",
-  },
-  //设置外部style
-  customStyle: {
-    type: [String, Object],
-    default: {},
-  },
-  //是否开启吸顶高度自适应
-  isSticky: {
-    type: Boolean,
-    default: false,
-  },
-  //是否开启上拉加载
-  refresherLoad: {
-    type: Boolean,
-    default: false,
-  },
-  //是否显示上拉加载文字
-  refresherLoadTitle: {
-    type: Boolean,
-    default: true,
-  },
-  //是否开启下拉刷新
-  refresherEnabled: {
-    type: Boolean,
-    default: false,
-  },
-  //是否显示下拉刷新文字
-  refresherEnabledTitle: {
-    type: Boolean,
-    default: true,
-  },
-  //距离顶部下拉刷新距离
-  refresherThreshold: {
-    type: Number,
-    default: 44,
-  },
-  //是否使用默认下拉刷新样式(支持设置 black、white、none/none 表示不使用默认样式)
-  refresherDefaultStyle: {
-    type: String,
-    default: "black",
-  },
-  //设置自定义下拉刷新区域背景颜色
-  refresherBackground: {
-    type: String,
-    default: "#fff",
-  },
-  //是否滚动到指定id的位置
-  scrollIntoView: {
-    type: String,
-    default: "",
-  },
-});
-
-const {
-  pageSize,
-  total,
-  scrollTop,
-  customClass,
-  customStyle,
-  refresherLoad,
-  refresherLoadTitle,
-  refresherEnabled,
-  refresherEnabledTitle,
-  refresherThreshold,
-  refresherDefaultStyle,
-  refresherBackground,
-} = toRefs(props);
-
-const state = reactive({
-  StatusBarHeight: computed(() => {
-    let systemInfo = uni.getSystemInfoSync();
-    return systemInfo.statusBarHeight + "px";
-  }),
-  tabBarHeight: computed(() => {
-    let systemInfo = uni.getSystemInfoSync();
-    return systemInfo.screenHeight - systemInfo.safeArea.bottom + "px";
-  }),
-  triggered: false,
-  topTis: "松手刷新",
-  isScrolltolower: "上拉加载更多",
-});
-
-const { StatusBarHeight, tabBarHeight, triggered, topTis, isScrolltolower } = toRefs(state);
-
-/**
- * @scrollView上拉刷新
- */
-function onRefresh() {
-  isScrolltolower.value = "上拉加载更多";
-  topTis.value = "努力加载中";
-  //做一个判断,判断triggered 是否为true
-  if (!triggered.value) {
-    triggered.value = true;
-    setTimeout((e) => {
-      triggered.value = false;
-      topTis.value = "松手刷新";
-      emit("refresh");
-    }, 1000);
-  }
-}
-
-/**
- * @scrollView触底事件
- */
-function scrolltolower(e) {
-  if (!refresherLoad.value || pageSize.value >= total.value) {
-    return;
-  } else {
-    isScrolltolower.value = "正在加载中~";
-    setTimeout(() => {
-      emit("load");
-      isScrolltolower.value = "上拉加载更多";
-    }, 1000);
-  }
-}
-
-onLoad((option) => {});
-</script>
-
-<style scoped>
-.topBox {
-  width: 100%;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  color: gray;
-}
-
-.topBox .loader {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  height: 100%;
-  position: relative;
-  margin-top: -25rpx;
-}
-
-.topBox .loader view {
-  width: 2px;
-  height: 6px;
-  background-color: gray;
-  transform-origin: 50% 150%;
-  position: absolute;
-  animation: color-change 1s infinite;
-}
-
-.topBox .title {
-  position: relative;
-  margin-left: 35rpx;
-  color: #c0c4cc;
-  font-size: 14px;
-}
-
-@keyframes color-change {
-  from {
-    background-color: gray;
-  }
-
-  to {
-    background-color: white;
-  }
-}
-
-.bottoBox {
-  display: flex;
-  align-items: center;
-  text-align: center;
-  justify-content: center;
-  color: #c0c4cc;
-  font-size: 14px;
-}
-</style>

+ 0 - 55
src/components/oa-tabbar/index.vue

@@ -1,55 +0,0 @@
-<template>
-  <u-tabbar :value="tabbarValue" @change="tabbarChange" :fixed="true" :placeholder="true" :safeAreaInsetBottom="true" :border="true" :activeColor="proxy.$settingStore.themeColor.color">
-    <u-tabbar-item :text="tab.text" v-for="(tab, index) in tabbarList" :key="index" :dot="tab.dot">
-      <template #active-icon>
-        <!-- <image style="width: 24px; height: 24px" :src="proxy.$settingStore.themeColor.tabList[index]"></image> -->
-        <text class="iconfont font20" :class="tab.iconClass" :style="{ color: proxy.$settingStore.themeColor.color }"></text>
-      </template>
-      <template #inactive-icon>
-        <!-- <image style="width: 24px; height: 24px" :src="tab.iconPath"></image> -->
-        <text class="iconfont font20" :class="tab.iconClass" style="color: #7d7e80"></text>
-      </template>
-    </u-tabbar-item>
-  </u-tabbar>
-</template>
-<script setup>
-/*----------------------------------依赖引入-----------------------------------*/
-import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, watchEffect, toRefs } from "vue";
-/*----------------------------------接口引入-----------------------------------*/
-/*----------------------------------组件引入-----------------------------------*/
-/*----------------------------------store引入-----------------------------------*/
-/*----------------------------------公共方法引入-----------------------------------*/
-/*----------------------------------公共变量-----------------------------------*/
-const { proxy } = getCurrentInstance();
-/*----------------------------------变量声明-----------------------------------*/
-const props = defineProps({
-  //数据集
-  tabbarList: {
-    type: Object,
-    default: [],
-  },
-  //选中值
-  tabbarValue: {
-    type: Number,
-    default: 0,
-  },
-  //是否使用tabBar跳转页面
-  isSwitchTab: {
-    type: Boolean,
-    default: true,
-  },
-});
-
-const { tabbarValue, tabbarList, isSwitchTab } = toRefs(props);
-
-function tabbarChange(e) {
-  if (isSwitchTab.value) {
-    proxy.$tab.switchTab(tabbarList.value[e].pagePath);
-  } else {
-    proxy.$tab.redirectTo(tabbarList.value[e].pagePath);
-  }
-}
-
-onLoad((option) => {});
-</script>

+ 0 - 115
src/components/oa-timeLine-item/index.vue

@@ -1,115 +0,0 @@
-<template>
-  <view class="oa-timeLine-item">
-    <view class="oa-timeLine-item-header">
-      <view class="oa-timeLine-item-header-icon">
-        <u-icon name="info-circle-fill" :color="iconColor" size="18"></u-icon>
-      </view>
-      <view class="oa-timeLine-item-header-cont">
-        <view class="title">
-          {{ titleValue }}
-        </view>
-        <!-- <view style="margin: auto"> </view> -->
-        <view class="time">
-          {{ timeValue }}
-        </view>
-      </view>
-    </view>
-
-    <view class="oa-timeLine-item-content">
-      <view class="oa-timeLine-item-content-icon">
-        <view class="icon"></view>
-      </view>
-      <view class="oa-timeLine-item-content-cont">
-        <slot class="content"></slot>
-      </view>
-    </view>
-  </view>
-</template>
-
-<script setup>
-import { toRefs } from "vue";
-
-const props = defineProps({
-  titleValue: {
-    type: String,
-    default: "",
-  },
-  timeValue: {
-    type: String,
-    default: "",
-  },
-  iconColor: {
-    type: String,
-    default: "#149eff",
-  },
-});
-
-const { titleValue, timeValue, iconColor } = toRefs(props);
-</script>
-
-<style lang="scss" scoped>
-.oa-timeLine-item {
-  .oa-timeLine-item-header {
-    display: flex;
-    height: 25px;
-    line-height: 25px;
-
-    .oa-timeLine-item-header-icon {
-      margin: auto 0;
-    }
-
-    .oa-timeLine-item-header-cont {
-      display: flex;
-      width: calc(100% - 18px - 15px);
-      margin-left: 15px;
-
-      .title {
-        font-size: 15px;
-        color: #000000;
-        overflow: hidden; //超出的文本隐藏
-        text-overflow: ellipsis; //溢出用省略号显示
-        white-space: nowrap; // 默认不换行;
-      }
-
-      .time {
-        font-size: 14px;
-        color: #b5b5b5;
-        margin-left: auto;
-      }
-    }
-  }
-
-  .oa-timeLine-item-content {
-    display: flex;
-
-    .oa-timeLine-item-content-icon {
-      width: 18px;
-      display: flex;
-
-      .icon {
-        width: 2px;
-        background-color: #e4e7ed;
-        margin: -5px auto;
-      }
-    }
-
-    .oa-timeLine-item-content-cont {
-      width: 100%;
-      margin: 15px 0px 15px 15px;
-      padding: 15px;
-      background-color: #fff;
-      border-radius: 10px;
-    }
-  }
-}
-
-// .oa-timeLine-item:last-child {
-//   .oa-timeLine-item-content {
-//     .oa-timeLine-item-content-icon {
-//       .icon {
-//         margin-bottom: 15px;
-//       }
-//     }
-//   }
-// }
-</style>

+ 0 - 62
src/components/oa-timeLine/index.vue

@@ -1,62 +0,0 @@
-<template>
-  <view class="oa-timeLine">
-    <view class="oa-timeLine-btn" :style="{ color: fontColor }">
-      <span @click="activitiesSortClick()">排序</span>
-    </view>
-    <slot></slot>
-  </view>
-</template>
-
-<script setup>
-import { ref, toRefs } from "vue";
-
-const emit = defineEmits(["activitiesSortChange"]);
-
-const props = defineProps({
-  sort: {
-    type: String,
-    default: "DESC",
-  },
-  fontColor: {
-    type: String,
-    default: "#149eff",
-  },
-});
-
-const { sort, fontColor } = toRefs(props);
-
-const _sort = ref(sort.value);
-
-function activitiesSortClick() {
-  if (_sort.value == "ASC") {
-    _sort.value = "DESC";
-  } else {
-    _sort.value = "ASC";
-  }
-
-  emit("activitiesSortChange", _sort.value);
-}
-</script>
-
-<style lang="scss" scoped>
-.oa-timeLine {
-  padding: 0px 15px;
-  padding-bottom: 15px;
-
-  .u-steps-item__wrapper {
-    background-color: #f1f1f1;
-  }
-
-  .oa-timeLine-btn {
-    margin: 0px -3.5px;
-    font-size: 13px;
-  }
-}
-
-.oa-timeLine-data {
-  padding: 0px 15px;
-  text-align: center;
-  color: #bdbdbd;
-  font-size: 14px;
-}
-</style>

+ 0 - 90
src/components/oa-touch/index.vue

@@ -1,90 +0,0 @@
-<template>
-  <view @touchstart="fingerstart" @touchend="fingerend">
-    <slot name="content"> </slot>
-  </view>
-</template>
-
-<script setup>
-import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance, toRefs } from "vue";
-
-const emit = defineEmits(["touchChange"]);
-const props = defineProps({});
-const {} = toRefs(props);
-
-const startData = ref({
-  clientX: "",
-  clientY: "",
-});
-const updDistance = ref(100);
-const lrDistance = ref(50);
-const topMed = ref("");
-const bottomMed = ref("");
-const leftMed = ref("");
-const rightMed = ref("");
-
-/**
- * @当按下去的时候
- */
-function fingerstart(e) {
-  // 记录 距离可视区域左上角 左边距 和 上边距
-  startData.value.clientX = e.changedTouches[0].clientX;
-  startData.value.clientY = e.changedTouches[0].clientY;
-}
-
-/**
- * @当抬起来的时候
- */
-function fingerend(e) {
-  // 当前位置 减去 按下位置 计算 距离
-  const subX = e.changedTouches[0].clientX - startData.value.clientX;
-  const subY = e.changedTouches[0].clientY - startData.value.clientY;
-  if (subY > updDistance.value || subY < -updDistance.value) {
-    if (subY > updDistance.value) {
-      bottomscroll(subY);
-    } else if (subY < -updDistance.value) {
-      topscroll(subY);
-    }
-  } else {
-    if (subX > lrDistance.value) {
-      rightscroll(subX);
-    } else if (subX < -lrDistance.value) {
-      leftscroll(subX);
-    } else {
-      console.log("无效操作");
-    }
-  }
-}
-/**
- * @上滑触发
- */
-function topscroll(dista) {
-  topMed.value ? (topMed.value = dista) : (topMed.value = null);
-  // console.log("触发了上滑方法!");
-  emit("change", "上滑");
-}
-/**
- * @下滑触发
- */
-function bottomscroll(dista) {
-  bottomMed.value ? (bottomMed.value = dista) : (bottomMed.value = null);
-  // console.log("触发了下滑方法!");
-  emit("change", "下滑");
-}
-/**
- * @右滑触发
- */
-function rightscroll(dista) {
-  rightMed.value ? (rightMed.value = dista) : (rightMed.value = null);
-  // console.log("触发了右滑方法!");
-  emit("change", "右滑");
-}
-/**
- * @左滑触发
- */
-function leftscroll(dista) {
-  leftMed.value ? (leftMed.value = dista) : (leftMed.value = null);
-  // console.log("触发了左滑方法!");
-  emit("change", "左滑");
-}
-</script>

+ 0 - 119
src/components/oa-transForm/index.vue

@@ -1,119 +0,0 @@
-<template>
-  <view
-    class="content-section"
-    :style="[
-      {
-        transform: coverTransform,
-        transition: coverTransition,
-      },
-    ]"
-    @touchstart="coverTouchstart"
-    @touchmove="coverTouchmove"
-    @touchend="coverTouchend"
-  >
-    <image class="mine-image" src="@/static/images/mine/arc.png"></image>
-    <slot name="content"></slot>
-  </view>
-</template>
-<script setup>
-/*----------------------------------依赖引入-----------------------------------*/
-import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, watchEffect, toRefs } from "vue";
-/*----------------------------------接口引入-----------------------------------*/
-/*----------------------------------组件引入-----------------------------------*/
-/*----------------------------------store引入-----------------------------------*/
-/*----------------------------------公共方法引入-----------------------------------*/
-/*----------------------------------公共变量-----------------------------------*/
-const { proxy } = getCurrentInstance();
-/*----------------------------------变量声明-----------------------------------*/
-const state = reactive({
-  coverTransform: "translateY(0px)",
-  coverTransition: "0s",
-  moving: false,
-});
-
-const { coverTransform, coverTransition, moving } = toRefs(state);
-
-let startY = 0,
-  moveY = 0,
-  pageAtTop = true;
-
-/**
- * @触摸开始
- */
-function coverTouchstart(e) {
-  if (pageAtTop === false) {
-    return;
-  }
-  coverTransition.value = "transform .1s linear";
-  startY = e.touches[0].clientY;
-}
-
-/**
- * @触摸移动
- */
-function coverTouchmove(e) {
-  moveY = e.touches[0].clientY;
-  let moveDistance = moveY - startY;
-  if (moveDistance < 0) {
-    moving.value = false;
-    return;
-  }
-  moving.value = true;
-  if (moveDistance >= 80 && moveDistance < 100) {
-    moveDistance = 80;
-  }
-  if (moveDistance > 0 && moveDistance <= 80) {
-    coverTransform.value = `translateY(${moveDistance}px)`;
-  }
-}
-
-/**
- * @触摸结束
- */
-function coverTouchend() {
-  if (moving.value === false) {
-    return;
-  }
-  moving.value = false;
-  coverTransition.value = "transform 0.3s cubic-bezier(.21,1.93,.53,.64)";
-  coverTransform.value = "translateY(0px)";
-}
-
-onLoad((option) => {});
-</script>
-<style lang="scss" scoped>
-.content-section {
-  position: relative;
-  margin-top: -85px;
-  padding-bottom: 50.67px;
-  background-color: #f5f6f7;
-
-  .mine-image {
-    position: absolute;
-    left: 0;
-    top: -16px;
-    width: 100%;
-    height: 18px;
-  }
-
-  .mine-actions {
-    margin: 0.625rem 0.625rem;
-    padding: 20px 0px;
-    border-radius: 8px;
-    background-color: white;
-
-    .action-item {
-      .icon {
-        font-size: 28px;
-      }
-
-      .text {
-        display: block;
-        font-size: 13px;
-        margin: 8px 0px;
-      }
-    }
-  }
-}
-</style>

+ 0 - 70
src/components/oa-ttsAudio/index.vue

@@ -1,70 +0,0 @@
-<template></template>
-<script setup>
-import { onReady, onLoad, onUnload, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
-import { defineComponent, getCurrentInstance, inject, nextTick, onMounted, watchEffect, ref } from "vue";
-
-const emit = defineEmits(["onEnded", "onError"]);
-const props = defineProps({
-  //播放原地址
-  audioUrl: {
-    type: String,
-    defualt: "",
-  },
-  //是否开启
-  audioBool: {
-    type: Boolean,
-    defualt: "",
-  },
-});
-
-const isPlay = ref(false);
-const innerAudio = ref(null);
-
-function handleTTS() {
-  if (!audioBool) {
-    return;
-  }
-
-  if (innerAudio.value) {
-    try {
-      innerAudio.value.pause();
-      innerAudio.value.destroy();
-      innerAudio.value = null;
-    } catch (e) {
-      //TODO handle the exception
-    }
-  }
-
-  innerAudio.value = uni.createInnerAudioContext();
-  innerAudio.value.autoplay = true;
-  innerAudio.value.volume = 1;
-  innerAudio.value.src = props.audioUrl;
-  innerAudio.value.onPlay(() => {
-    console.log("开始播放");
-  });
-  innerAudio.value.onEnded((res) => {
-    console.log("音频播放结束");
-    isPlay.value = false;
-  });
-  innerAudio.value.onError((res) => {
-    console.log("音频播放出错" + res);
-    console.log(res.errCode);
-  });
-
-  innerAudio.value.play();
-}
-
-watchEffect(() => {
-  if (props.audioUrl) {
-    handleTTS();
-  }
-});
-
-onUnload(() => {
-  if (innerAudio.value) {
-    innerAudio.value.stop();
-    innerAudio.value.destroy();
-  }
-});
-</script>
-<style lang="scss" scoped></style>

+ 0 - 91
src/components/oa-ttsAudio/ttsAudio.js

@@ -1,91 +0,0 @@
-// 这个东西我都没执行yarn add crypto竟然能用,可能另一个项目安装了全局共享了,如报错找不到,执行一下yarn add crypto
-import crypto from 'crypto'
-
-export class AccessToken {
-    static encodeText(text) {
-        let encodedText = encodeURIComponent(text);
-        return encodedText.replace('+', '%20').replace('*', '%2A').replace('~', '%7E');
-    }
-
-    static encodeDict(dict) {
-        let keys = Object.keys(dict).sort();
-        return keys.map(key => `${this.encodeText(key)}=${this.encodeText(dict[key])}`).join('&');
-    }
-
-    static async createToken(accessKeyId, accessKeySecret) {
-        const parameters = {
-            AccessKeyId: accessKeyId,
-            Action: 'CreateToken',
-            Format: 'JSON',
-            RegionId: 'cn-shanghai',
-            SignatureMethod: 'HMAC-SHA1',
-            SignatureNonce: uuidv4(),
-            SignatureVersion: '1.0',
-            Timestamp: new Date().toISOString(),
-            Version: '2019-02-28'
-        };
-
-        const queryString = this.encodeDict(parameters);
-        console.log('Normalized request string:', queryString);
-
-        const stringToSign = `GET&${this.encodeText('/')}&${this.encodeText(queryString)}`;
-        console.log('String to sign:', stringToSign);
-
-        const hmac = crypto.createHmac('sha1', `${accessKeySecret}&`);
-        hmac.update(stringToSign);
-        const signature = hmac.digest('base64');
-        console.log('Signature:', signature);
-
-        const encodedSignature = this.encodeText(signature);
-        console.log('URL-encoded signature:', encodedSignature);
-
-        const fullUrl = `https://nls-meta.cn-shanghai.aliyuncs.com/?Signature=${encodedSignature}&${queryString}`;
-        console.log('URL:', fullUrl);
-
-        let resData =  await new Promise((resolve, reject) => {
-            uni.request({
-                url: fullUrl,
-                method: 'GET',
-                success: res => {
-                    const data = res.data
-                    resolve({
-                        token: data.Token.Id,
-                        expireTime: data.Token.ExpireTime
-                    })
-                },
-                fail: error => {
-                    console.log(error)
-                    reject(error)
-                }
-            })
-        })
-         console.log('res',resData)
-         if(resData){
-            return resData
-         }
-        // Using fetch for HTTP request
-        // const response = await fetch(fullUrl);
-        // if (response.ok) {
-        //     const jsonResponse = await response.json();
-        //     if (jsonResponse.Token) {
-        //         return {
-        //             token: jsonResponse.Token.Id,
-        //             expireTime: jsonResponse.Token.ExpireTime
-        //         };
-        //     }
-        // }
-        // console.error(await response.text());
-        return {
-            token: null,
-            expireTime: null
-        };
-    }
-}
-
-// Sample UUIDv4 function, or you could use a library like `uuid`
-function uuidv4() {
-    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
-        var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
-        return v.toString(16);
-    });
-}

+ 0 - 303
src/components/oa-upgrade/index.vue

@@ -1,303 +0,0 @@
-<template>
-  <view class="upgrade-popup" v-if="isModalShow">
-    <image class="header-bg" src="@/static/images/common/oa-upgrade.png" mode="widthFix"></image>
-    <view
-      class="iconfont oaIcon-upgrade header-bg"
-      style="font-size: 110px; margin-top: -110px"
-      :style="{
-        color: themesColor,
-        fill: themesColor,
-      }"
-    ></view>
-
-    <view class="main">
-      <view
-        class="version"
-        :style="{
-          color: themesColor,
-        }"
-      >
-        发现新版本v{{ versionName }}
-      </view>
-      <view class="content">
-        <text class="desc">{{ versionDesc }}</text>
-      </view>
-      <!--下载状态-进度条显示 -->
-      <view class="footer" v-if="isStartDownload">
-        <view class="progress-view" :class="{ active: !hasProgress }" @click="handleInstallApp">
-          <!-- 进度条 -->
-          <view v-if="hasProgress" style="height: 100%">
-            <view class="txt">{{ percentText }}</view>
-            <view class="progress" :style="setProStyle"></view>
-          </view>
-          <view v-else>
-            <view class="btn upgrade force">{{ isDownloadFinish ? "立即安装" : "下载中..." }}</view>
-          </view>
-        </view>
-      </view>
-      <!-- 强制更新 -->
-      <view class="footer" v-else-if="isForceUpdate">
-        <view class="btn upgrade force" @click="handleUpgrade">立即更新</view>
-      </view>
-      <!-- 可选择更新 -->
-      <view class="footer" v-else>
-        <view class="btn close" @click="handleCancel">以后再说</view>
-        <view
-          class="btn upgrade"
-          :style="{
-            backgroundColor: themesColor,
-          }"
-          @click="handleUpgrade"
-        >
-          立即更新
-        </view>
-      </view>
-    </view>
-  </view>
-  <view class="upgrade-show" v-if="isModalShow"></view>
-</template>
-<script setup>
-import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, watchEffect, toRefs, computed } from "vue";
-
-import { downloadApp, installApp } from "@/utils/upgrade.js";
-
-const { proxy } = getCurrentInstance();
-const props = defineProps({
-  //主题颜色
-  themesColor: {
-    type: String,
-    default: "#3f99ff",
-  },
-});
-const emits = defineEmits([]);
-const { themesColor } = toRefs(props);
-
-const checkInfo = reactive({
-  isModalShow: false, //是否打开弹窗
-  isForceUpdate: false, //是否强制更新
-  versionName: undefined, //版本名称
-  versionDesc: undefined, //更新说明
-  downloadUrl: undefined, //APP下载链接
-  isDownloadFinish: false, //是否下载完成
-  hasProgress: false, //是否能显示进度条
-  currentPercent: 0, //当前下载百分比
-  isStartDownload: false, //是否开始下载
-  newFileName: "", //下载后app本地路径名称
-});
-
-const { isModalShow, isForceUpdate, versionName, versionDesc, downloadUrl, isDownloadFinish, hasProgress, currentPercent, isStartDownload, newFileName } = toRefs(checkInfo);
-
-//设置进度条样式,实时更新进度位置
-const setProStyle = computed(() => {
-  return {
-    width: (510 * currentPercent.value) / 100 + "rpx", //510:按钮进度条宽度
-  };
-});
-
-//百分比文字
-const percentText = computed(() => {
-  let percent = currentPercent.value;
-  if (typeof percent !== "number" || isNaN(percent)) return "下载中...";
-  if (percent < 100) return `下载中${percent}%`;
-  return "立即安装";
-});
-
-//更新
-function handleUpgrade() {
-  if (downloadUrl.value) {
-    isStartDownload.value = true;
-    //开始下载App
-    downloadApp(downloadUrl.value, (current) => {
-      //下载进度监听
-      hasProgress.value = true;
-      currentPercent.value = current;
-    })
-      .then((fileName) => {
-        //下载完成
-        isDownloadFinish.value = true;
-        newFileName.value = fileName;
-        if (fileName) {
-          //自动安装App
-          handleInstallApp();
-        }
-      })
-      .catch((e) => {
-        console.log(e, "e");
-      });
-  } else {
-    uni.showToast({
-      title: "下载链接不存在",
-      icon: "none",
-    });
-  }
-}
-
-//安装app
-function handleInstallApp() {
-  //下载完成才能安装,防止下载过程中点击
-  if (isDownloadFinish.value && newFileName.value) {
-    installApp(newFileName.value, () => {
-      //安装成功,关闭升级弹窗
-      isModalShow.value = false;
-    });
-  }
-}
-
-/** 打开弹窗 */
-function openUpgrade(e) {
-  isModalShow.value = true;
-
-  versionName.value = e.modalArray.buildVersion;
-  versionDesc.value = e.modalArray.buildUpdateDescription.replace(/\\n/, "\n");
-  downloadUrl.value = e.modalArray.downloadURL;
-}
-
-/** 取消按钮 */
-function handleCancel() {
-  isModalShow.value = false;
-}
-
-onLoad((option) => {});
-
-defineExpose({
-  openUpgrade,
-});
-</script>
-
-<style lang="scss" scoped>
-.upgrade-popup {
-  width: 580rpx;
-  height: auto;
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  transform: translate(-50%, -50%);
-  background: #fff;
-  border-radius: 20rpx;
-  box-sizing: border-box;
-  border: 1px solid #eee;
-  z-index: 1200;
-}
-
-.header-bg {
-  display: flex;
-  width: 230rpx;
-  margin: -112rpx auto 0 auto;
-}
-
-.main {
-  padding: 10rpx 30rpx 30rpx;
-  box-sizing: border-box;
-  .version {
-    font-size: 36rpx;
-    font-weight: 700;
-    width: 100%;
-    text-align: center;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    letter-spacing: 1px;
-  }
-
-  .content {
-    margin-top: 60rpx;
-    .desc {
-      display: block;
-      box-sizing: border-box;
-      margin-top: 20rpx;
-      font-size: 28rpx;
-      color: #6a6a6a;
-      max-height: 80vh;
-      overflow-y: auto;
-    }
-  }
-
-  .footer {
-    width: 100%;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    position: relative;
-    flex-shrink: 0;
-    margin-top: 100rpx;
-
-    .btn {
-      width: 246rpx;
-      display: flex;
-      justify-content: center;
-      align-items: center;
-      position: relative;
-      z-index: 999;
-      height: 90rpx;
-      box-sizing: border-box;
-      font-size: 30rpx;
-      border-radius: 10rpx;
-      letter-spacing: 2rpx;
-
-      &.force {
-        width: 500rpx;
-      }
-
-      &.close {
-        border: 1px solid #e0e0e0;
-        margin-right: 25rpx;
-        color: #000;
-      }
-
-      &.upgrade {
-        color: white;
-      }
-    }
-
-    .progress-view {
-      width: 510rpx;
-      height: 90rpx;
-      display: flex;
-      position: relative;
-      align-items: center;
-      border-radius: 6rpx;
-      background-color: #dcdcdc;
-      display: flex;
-      justify-content: flex-start;
-      padding: 0px;
-      box-sizing: border-box;
-      border: none;
-      overflow: hidden;
-
-      &.active {
-        background-color: #026df7;
-      }
-
-      .progress {
-        height: 100%;
-        background-color: #026df7;
-        padding: 0px;
-        box-sizing: border-box;
-        border: none;
-        border-top-left-radius: 10rpx;
-        border-bottom-left-radius: 10rpx;
-      }
-
-      .txt {
-        font-size: 28rpx;
-        position: absolute;
-        top: 50%;
-        left: 50%;
-        transform: translate(-50%, -50%);
-        color: #fff;
-      }
-    }
-  }
-}
-
-.upgrade-show {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1110;
-  background: rgba(0, 0, 0, 0.6);
-}
-</style>

+ 0 - 205
src/components/oa-upload/index.vue

@@ -1,205 +0,0 @@
-<template>
-  <!-- 图片上传数量等于1显示 -->
-  <view class="oa-upload" v-if="uploadCount == 1">
-    <view v-if="uploadImage" class="uploadView" :style="uploadStyle">
-      <view class="uploadUimage">
-        <u-image width="100%" height="100%" :src="uploadImage" @click="handlePreviewImage(uploadImage)"></u-image>
-      </view>
-
-      <view v-if="!uploadCloseStatus" class="uploadViewClose" @click="uploadViewClose()">
-        <u-icon name="close" color="#ffffff" size="12"></u-icon>
-      </view>
-    </view>
-    <view v-if="!uploadImage" :class="uploadCloseStatus ? 'uploadView upload-buttom uploadDisabled' : 'uploadView upload-buttom'" :style="uploadStyle" @click="uploadClick()">
-      <u-icon style="margin: auto" name="plus" color="#909399" :size="uploadIconSize"></u-icon>
-    </view>
-  </view>
-
-  <!-- 图片上传数量大于1显示 -->
-  <view class="oa-upload" v-if="uploadCount > 1">
-    <view class="uploadView" :style="uploadStyle" v-for="(up, index) in uploadList" :key="index">
-      <view class="uploadUimage">
-        <u-image width="100%" height="100%" :src="up[uploadListSrc]" @click="handlePreviewImage(up[uploadListSrc])"></u-image>
-      </view>
-
-      <view v-if="!uploadCloseStatus" class="uploadViewClose" @click="uploadViewClose(index)">
-        <u-icon name="close" color="#ffffff" size="12"></u-icon>
-      </view>
-    </view>
-    <view v-if="uploadCount > uploadList.length" :class="uploadCloseStatus ? 'uploadView upload-buttom uploadDisabled' : 'uploadView upload-buttom'" :style="uploadStyle" @click="uploadClick()">
-      <u-icon style="margin: auto" name="plus" color="#909399" :size="uploadIconSize"></u-icon>
-    </view>
-  </view>
-</template>
-
-<script setup>
-import { uploadAvatar } from "@/api/system/user.js";
-import { ref, toRefs } from "vue";
-
-const emit = defineEmits(["uploadSuccessChange", "uploadDeleteChange"]);
-
-const props = defineProps({
-  //图片路径(uploadCount为1时使用)
-  uploadImage: {
-    type: String,
-    default: "",
-  },
-  //图片集合(uploadCount大于1时使用)
-  uploadList: {
-    type: Object,
-    default: [],
-  },
-  //图片集合src(uploadCount大于1时使用)
-  uploadListSrc: {
-    type: String,
-    default: "url",
-  },
-  //样式
-  uploadStyle: {
-    type: Object,
-    default: {
-      width: "80px",
-      height: "80px",
-    },
-  },
-  //icon大小
-  uploadIconSize: {
-    type: String,
-    default: "20px",
-  },
-  //是否禁用
-  uploadCloseStatus: {
-    type: Boolean,
-    default: false,
-  },
-  //上传图片数量
-  uploadCount: {
-    type: Number,
-    default: 1,
-  },
-});
-
-const { uploadImage, uploadList, uploadListSrc, uploadStyle, uploadIconSize, uploadCloseStatus, uploadCount } = toRefs(props);
-
-/**
- * @查看图片
- * @点击事件
- */
-function handlePreviewImage(url) {
-  uni.previewImage({
-    urls: [url],
-    current: url,
-  });
-}
-
-/**
- * @upload图片上传
- * @点击事件
- */
-function uploadClick() {
-  uni.chooseImage({
-    count: uploadCount.value, //默认9
-    sizeType: ["original", "compressed"], //可以指定是原图还是压缩图,默认二者都有
-    sourceType: ["album", "camera"], //从相册选择、摄像头
-    success: function (res) {
-      res.tempFilePaths.forEach((url) => {
-        if (uploadCount.value >= uploadList.value.length) {
-          uploadApi(url);
-        }
-      });
-    },
-  });
-}
-
-/**
- * @upload图片上传
- * @api接口请求
- */
-function uploadApi(url) {
-  let data = { name: "file", filePath: url };
-  uploadAvatar(data).then((response) => {
-    emit("uploadSuccessChange", response.data);
-  });
-}
-
-/**
- * @upload图片上传
- * @点击事件
- * @删除事件
- */
-function uploadViewClose(index) {
-  if (uploadCount.value > 1) {
-    uploadList.value.splice(index, 1);
-    emit("uploadDeleteChange", uploadList.value);
-  } else {
-    emit("uploadDeleteChange", "");
-  }
-}
-</script>
-
-<style scoped>
-.oa-upload {
-  width: 100%;
-  display: flex;
-  flex-wrap: wrap;
-}
-
-.uploadView {
-  position: relative;
-  overflow: hidden;
-  width: calc(33% - 10px);
-  height: 110px;
-  margin: 0 10px 10px 0;
-  border: 1px solid #d9d9d9;
-  border-radius: 6px;
-  cursor: pointer;
-}
-
-.uploadView .uploadUimage {
-  height: 100%;
-}
-
-.uploadView .uploadUimage > uni-view {
-  height: 100%;
-}
-
-.uploadView .uploadViewClose {
-  position: absolute;
-  background-color: #409eff;
-  transform: rotate(45deg);
-  width: 40px;
-  height: 24px;
-  text-align: center;
-  right: -15px;
-  top: -6px;
-  cursor: pointer;
-}
-
-.uploadView .uploadViewClose .u-icon {
-  font-size: 12px;
-  margin-top: 4px;
-  margin-left: 10px;
-  transform: rotate(-45deg);
-  color: #ffffff;
-}
-
-.uploadView img {
-  width: 100%;
-}
-
-.upload-buttom {
-  display: flex;
-  font-size: 28px;
-  color: #909399;
-  border: 1px dashed #d9d9d9;
-  background-color: #fafafa;
-}
-
-.upload-buttom:hover {
-  border: 1px dashed #409eff;
-}
-
-:deep(.uploadDisabled) {
-  display: none !important;
-}
-</style>

+ 0 - 111
src/components/oa-weather/index.vue

@@ -1,111 +0,0 @@
-<template>
-  <!-- 天气 -->
-  <view class="app-common-window bg-white radius shadow-default" v-if="state.weatherData.length != 0">
-    <view class="weather radius">
-      <view class="weather-header">
-        <view class="iconfont oaIcon-address"></view>
-        <view class="weather-header-location">{{ state.weatherData[0].location || "上海" }}</view>
-        <view class="weather-header-day">今天</view>
-        <view class="weather-header-text">{{ state.weatherData[0].text || "未知" }}</view>
-      </view>
-      <view class="weather-center">
-        <view class="weather-center-temperature">{{ state.weatherData[0].today.low + "/" + state.weatherData[0].today.high || "0℃" }}</view>
-        <image class="weather-center-image" :src="`${'/static/icons/white/' + state.weatherData[0].code.now + '.png'}`" mode="heightFix"></image>
-      </view>
-    </view>
-  </view>
-</template>
-<script setup>
-import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, watchEffect, toRefs, toRef, watch } from "vue";
-
-const emit = defineEmits(["load", "refresh"]);
-const props = defineProps({});
-
-const state = reactive({
-  weatherData: [],
-});
-
-/**
- * @获取天气信息
- */
-function getWeather(string) {
-  uni.request({
-    url: `https://widget-v3.seniverse.com/api/weather/7b8a7d89-f01d-4b14-bdec-5ae0b82c857f?unit=c&language=zh-Hans&location=${string}`,
-    success: (res) => {
-      if (res.statusCode == 200) {
-        state.weatherData = res.data.results[0].data;
-      } else {
-        console.log("获取天气信息失败");
-      }
-    },
-    fail: (err) => {
-      console.log("获取天气信息失败", err);
-    },
-  });
-}
-
-onLoad((option) => {});
-
-onShow(() => {});
-
-// 暴露变量
-defineExpose({
-  getWeather,
-});
-</script>
-
-<style lang="scss" scoped>
-.app-common-window {
-  position: relative;
-  margin-top: -20px;
-  margin: -20px 20upx 20upx 20upx;
-  z-index: 50;
-
-  .weather {
-    padding: 10px;
-    background-image: url("@/static/images/index/weather.png");
-    background-size: 100% 100%;
-    background-position: center center;
-    background-repeat: no-repeat;
-
-    .weather-header {
-      display: flex;
-      margin-bottom: 10px;
-      font-size: 14px;
-
-      &-location {
-        margin-right: 15px;
-      }
-
-      &-day {
-        margin: 0 auto 0 0;
-      }
-
-      &-text {
-        margin: 0;
-      }
-
-      .iconfont {
-        margin: auto 5px auto 0;
-        color: #0c83fa;
-      }
-    }
-
-    .weather-center {
-      display: flex;
-
-      &-temperature {
-        margin: auto auto auto 0;
-        font-size: 18px;
-        font-weight: 600;
-      }
-
-      &-image {
-        margin: 0 0 0 0;
-        height: 30px !important;
-      }
-    }
-  }
-}
-</style>