14678f85 by 田浩浩
2 parents a3960c7c 74cf9497
Showing 50 changed files with 2626 additions and 506 deletions
......@@ -21,4 +21,6 @@ yarn-error.log*
*.njsproj
*.sln
*.sw?
/src/api/config.js
package-lock.json
......
export default {
SERVERAPI: '/service-bdcdj9',
// SERVERCAI: '/service-bdcdj-Tian'
}
\ No newline at end of file
......@@ -6,25 +6,25 @@ export function Init (data) {
let apiUrl = "";
switch (data.get("djlx")) {
case "100":
apiUrl = "/rest/ywbl/jsydsyqlr/fristInit";
apiUrl = "/rest/ywbl/dyaq/fristInit";
break;
case "200":
apiUrl = "/rest/ywbl/jsydsyqlr/transferInit";
apiUrl = "/rest/ywbl/dyaq/transferInit";
break;
case "300":
apiUrl = "/rest/ywbl/jsydsyqlr/changeInit";
apiUrl = "/rest/ywbl/dyaq/changeInit";
break;
case "400":
apiUrl = "/rest/ywbl/jsydsyqlr/logoutInit";
apiUrl = "/rest/ywbl/dyaq/logoutInit";
break;
case "500":
apiUrl = "/rest/ywbl/jsydsyqlr/riviseInit";
apiUrl = "/rest/ywbl/dyaq/riviseInit";
break;
case "901":
apiUrl = "/rest/ywbl/jsydsyqlr/renewalInit";
apiUrl = "/rest/ywbl/dyaq/renewalInit";
break;
case "902":
apiUrl = "/rest/ywbl/jsydsyqlr/replaceInit";
apiUrl = "/rest/ywbl/dyaq/replaceInit";
break;
}
return request({
......
import dialogBox from '@/components/DialogBox/dialogBox.vue'
import lbTable from '@/components/lbTable/lb-table.vue'
import LbTable from '@/components/LbTable/lb-table.vue'
import Theme from '@/components/Theme/theme.vue'
import Popup from '@/components/Popup/index'
import MessageBox from '@/components/MessageBox/index.js'
export default {
install: (Vue) => {
Vue.component('dialogBox', dialogBox);
Vue.component('lbTable', lbTable);
Vue.component('lbTable', LbTable);
Vue.component('Theme', Theme);
Vue.prototype.$popup = Popup.install
Vue.prototype.$popup = Popup.install;
Vue.prototype.$alertMes = MessageBox.alert;
}
}
\ No newline at end of file
......
/**
* @1900-2100区间内的公历、农历互转
* @charset UTF-8
* @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]
*/
const 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, 0x16a95, 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
0x092e0, 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"],
/**
* 阳历节日
*/
festival: {
'1-1': { title: '元旦节' },
'2-14': { title: '情人节' },
'5-1': { title: '劳动节' },
'5-4': { title: '青年节' },
'6-1': { title: '儿童节' },
'9-10': { title: '教师节' },
'10-1': { title: '国庆节' },
'12-25': { title: '圣诞节' },
'3-8': { title: '妇女节' },
'3-12': { title: '植树节' },
'4-1': { title: '愚人节' },
'5-12': { title: '护士节' },
'7-1': { title: '建党节' },
'8-1': { title: '建军节' },
'12-24': { title: '平安夜' },
},
/**
* 农历节日
*/
lFestival: {
'12-30': { title: '除夕' },
'1-1': { title: '春节' },
'1-15': { title: '元宵节' },
'2-2': { title: '龙抬头' },
'5-5': { title: '端午节' },
'7-7': { title: '七夕节' },
'7-15': { title: '中元节' },
'8-15': { title: '中秋节' },
'9-9': { title: '重阳节' },
'10-1': { title: '寒衣节' },
'10-15': { title: '下元节' },
'12-8': { title: '腊八节' },
'12-23': { title: '北方小年' },
'12-24': { title: '南方小年' },
},
/**
* 返回默认定义的阳历节日
*/
getFestival () {
return this.festival
},
/**
* 返回默认定义的内容里节日
*/
getLunarFestival () {
return this.lFestival
},
/**
*
* @param param {Object} 按照festival的格式输入数据,设置阳历节日
*/
setFestival (param = {}) {
this.festival = param
},
/**
*
* @param param {Object} 按照lFestival的格式输入数据,设置农历节日
*/
setLunarFestival (param = {}) {
this.lFestival = param
},
/**
* 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 y lunar Year
* @return Number
* @eg:var count = calendar.lYearDays(1987) ;//count=387
*/
lYearDays: function (y) {
let i, 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 y 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 y 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 y lunar Year
* @param m lunar Month
* @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 y solar Year
* @param m solar Month
* @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
const 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) {
const s = "\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf";
const 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 y公历年(1900-2100)
* @param n 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;
}
const _table = this.sTermInfo[y - 1900];
const _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()
];
const _calcDay = [
_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(_calcDay[n - 1]);
},
/**
* 传入农历数字月份返回汉语通俗表示法
* @param m lunar month
* @return Cn string
* @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
*/
toChinaMonth: function (m) { // 月 => \u6708
if (m > 12 || m < 1) {
return -1
} //若参数错误 返回-1
let s = this.nStr3[m - 1];
s += "\u6708";//加上月字
return s;
},
/**
* 传入农历日期数字返回汉字表示法
* @param d lunar day
* @return Cn string
* @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
*/
toChinaDay: function (d) { //日 => \u65e5
let s;
switch (d) {
case 10:
s = '\u521d\u5341';
break;
case 20:
s = '\u4e8c\u5341';
break;
case 30:
s = '\u4e09\u5341';
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
* !important! 公历参数区间1900.1.31~2100.12.31
* @param yPara solar year
* @param mPara solar month
* @param dPara solar day
* @return JSON object
* @eg:console.log(calendar.solar2lunar(1987,11,01));
*/
solar2lunar: function (yPara, mPara, dPara) {
let y = parseInt(yPara);
let m = parseInt(mPara);
let d = parseInt(dPara);
//年份限定、上限
if (y < 1900 || y > 2100) {
return -1;// undefined转换为数字变为NaN
}
//公历传参最下限
if (y === 1900 && m === 1 && d < 31) {
return -1;
}
//未传参 获得当天
let objDate;
if (!y) {
objDate = new Date();
} else {
objDate = new Date(y, parseInt(m) - 1, d);
}
let i, leap = 0, temp = 0;
//修正ymd参数
y = objDate.getFullYear();
m = objDate.getMonth() + 1;
d = objDate.getDate();
let 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--;
}
//是否今天
let isTodayObj = new Date(),
isToday = false;
if (isTodayObj.getFullYear() === y && isTodayObj.getMonth() + 1 === m && isTodayObj.getDate() === d) {
isToday = true;
}
//星期几
let nWeek = objDate.getDay(),
cWeek = this.nStr1[nWeek];
//数字表示周几顺应天朝周一开始的惯例
if (nWeek === 0) {
nWeek = 7;
}
//农历年
const year = i;
leap = this.leapMonth(i); //闰哪个月
let 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;
}
//农历月
const month = i;
//农历日
const day = offset + 1;
//天干地支处理
const sm = m - 1;
const gzY = this.toGanZhiYear(year);
// 当月的两个节气
// bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year`
const firstNode = this.getTerm(y, (m * 2 - 1));//返回当月「节」为几日开始
const secondNode = this.getTerm(y, (m * 2));//返回当月「节」为几日开始
// 依据12节气修正干支月
let gzM = this.toGanZhi((y - 1900) * 12 + m + 11);
if (d >= firstNode) {
gzM = this.toGanZhi((y - 1900) * 12 + m + 12);
}
//传入的日期的节气与否
let isTerm = false;
let 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 相差天数
const dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10;
const gzD = this.toGanZhi(dayCyclical + d - 1);
//该日期所属的星座
const astro = this.toAstro(m, d);
const solarDate = y + '-' + m + '-' + d;
const lunarDate = year + '-' + month + '-' + day;
const festival = this.festival;
const lFestival = this.lFestival;
const festivalDate = m + '-' + d;
const lunarFestivalDate = month + '-' + day;
return {
date: solarDate,
lunarDate: lunarDate,
festival: festival[festivalDate] ? festival[festivalDate].title : null,
lunarFestival: lFestival[lunarFestivalDate] ? lFestival[lunarFestivalDate].title : null,
'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
* !important! 参数区间1900.1.31~2100.12.1
* @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) {
y = parseInt(y)
m = parseInt(m)
d = parseInt(d)
isLeapMonth = !!isLeapMonth;
const leapOffset = 0;
const leapMonth = this.leapMonth(y);
const 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;
}//超出了最大极限值
const day = this.monthDays(y, m);
let _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;
}//参数合法性效验
//计算农历的时间差
let offset = 0;
let i;
for (i = 1900; i < y; i++) {
offset += this.lYearDays(i);
}
let leap = 0, isAdd = false;
for (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秒(该时间也是本农历的最开始起始点)
const strap = Date.UTC(1900, 1, 30, 0, 0, 0);
const calObj = new Date((offset + d - 31) * 86400000 + strap);
const cY = calObj.getUTCFullYear();
const cM = calObj.getUTCMonth() + 1;
const cD = calObj.getUTCDate();
return this.solar2lunar(cY, cM, cD);
}
};
export default calendar
\ No newline at end of file
<template>
<el-calendar v-model="date">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected: isSelected(date, data) }">
<div class="solar">{{ data.day.split('-')[2] }}</div>
<div class="lunar" :class="{ festival: isFestival(date, data) }">{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
</template>
<script>
import calendar from './calendar'
export default {
name: 'calendar',
data () {
return {
date: new Date(),
// 根据selectedDates设置选中日期
selectedDates: []
}
},
methods: {
// 是否选中日期
isSelected: function (slotDate, slotData) {
return this.selectedDates.includes(slotData.day)
},
// 是否节假日
isFestival (slotDate, slotData) {
let solarDayArr = slotData.day.split('-');
let lunarDay = calendar.solar2lunar(solarDayArr[0], solarDayArr[1], solarDayArr[2])
// 公历节日\农历节日\农历节气
let festAndTerm = [];
festAndTerm.push(lunarDay.festival == null ? '' : ' ' + lunarDay.festival)
festAndTerm.push(lunarDay.lunarFestival == null ? '' : '' + lunarDay.lunarFestival)
festAndTerm.push(lunarDay.Term == null ? '' : '' + lunarDay.Term)
festAndTerm = festAndTerm.join('')
return festAndTerm != ''
},
// 公历转农历
solarToLunar (slotDate, slotData) {
let solarDayArr = slotData.day.split('-');
let lunarDay = calendar.solar2lunar(solarDayArr[0], solarDayArr[1], solarDayArr[2])
// 农历日期
let lunarMD = lunarDay.IMonthCn + lunarDay.IDayCn
// 公历节日\农历节日\农历节气
let festAndTerm = [];
festAndTerm.push(lunarDay.festival == null ? '' : ' ' + lunarDay.festival)
festAndTerm.push(lunarDay.lunarFestival == null ? '' : '' + lunarDay.lunarFestival)
festAndTerm.push(lunarDay.Term == null ? '' : '' + lunarDay.Term)
festAndTerm = festAndTerm.join('')
return festAndTerm == '' ? lunarMD : festAndTerm
}
}
}
</script>
<style scoped>
/**隐藏上一月、本月、下一月*/
.el-calendar__button-group {
display: none;
}
/deep/.el-calendar__body {
padding: 12px !important;
}
/deep/.el-calendar-table .el-calendar-day {
height: auto;
padding: 5px;
}
/**月份居中*/
.el-calendar__title {
width: 100%;
text-align: center;
}
/**日期div的样式*/
.el-calendar-table tr td:first-child {
border-left: 0px;
}
.el-calendar-table td {
min-height: 110px;
min-width: 110px;
border-right: 0px;
}
.el-calendar-table td.is-selected {
background-color: white;
}
.el-calendar-table .el-calendar-day {
padding: 0px;
text-align: center;
}
.el-calendar-table .el-calendar-day>div {
text-align: center
}
/**日期div的样式-公历*/
.el-calendar-table .el-calendar-day>div .solar {
text-align: center
}
/**日期div的样式-农历*/
.el-calendar-table .el-calendar-day>div .lunar {
padding-top: 5px;
font-size: 12px;
text-align: center
}
/**日期div的样式-选中*/
.el-calendar-table .el-calendar-day>div.selected {
background-color: #fef2f2;
border: 3px solid #fb0;
border-radius: 20px;
text-align: center
}
/**本月周末设置为红色*/
.el-calendar-table .current:nth-last-child(-n+2) .solar {
color: red;
}
/**本月农历设置为灰色*/
.el-calendar-table .current .lunar {
color: #606266;
font-size: 12px;
}
/**本月农历节日设置为红色*/
.el-calendar-table .current .lunar.festival {
color: red;
}
.el-calendar-table td {
border-right: none !important;
}
/**禁用点击效果*/
/*.el-calendar-table td {*/
/*pointer-events: none;*/
/*}*/
</style>
\ No newline at end of file
.dialogBox {
border-radius: 8px;
overflow: hidden;
background: #FFFFFF;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.10);
.dialog_title {
display: flex;
position: relative;
top: -2px;
b {
@include flex-center;
flex: 1;
width: 100%;
}
}
.dialog_full {
position: absolute;
top: 0;
right: 30px;
}
.el-dialog__body {
max-height: 88vh;
overflow-x: hidden;
overflow-y: hidden;
}
.dialog_footer {
margin-top: 8px;
@include flex-center;
}
}
.dialog_title {
@include flex;
justify-content: space-between;
width: 100%;
}
.el-dialog__header {
margin-bottom: 10px;
color: #4A4A4A;
background-color: #FCFDFD;
border-bottom: 1px solid #E4EBF4;
}
.el-dialog__body {
padding-top: 10px;
padding-bottom: 0;
}
.el-dialog__headerbtn .el-dialog__close {
color: #6B7A99 !important;
position: relative;
top: -2px;
}
.el-form-item {
@include flex;
width: 100%;
}
.el-dialog__wrapper {
width: 100%;
height: 100%;
overflow: hidden;
}
.contentCenter {
position: absolute;
top: 50%;
left: 50%;
transform: translate(calc(-50% + 85px), -50%);
}
.mainCenter {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
\ No newline at end of file
<template>
<el-dialog :visible.sync="dialogVisible" v-if="dialogVisible" :width="width" :fullscreen="fullscreen" top="0"
:append-to-body="appendToBody" :lock-scroll="true" :close-on-click-modal="false" @close="closeDialog" :key="key"
:custom-class="isMain ? 'mainCenter dialogBox' : 'contentCenter dialogBox'" :destroy-on-close="true" ref="dialogBox"
id="dialogBox">
<div slot="title">
<div class="dialog_title">
<b>{{ title }}</b>
<div v-if="isFullscreen" class="dialog_full">
<i class="el-icon-rank" v-if="fullscreen" @click="handleFullscreen"></i>
<i class="el-icon-full-screen" v-else @click="handleFullscreen" />
</div>
</div>
</div>
<div class="dialogBox-content" :style="{ height: scrollerHeight ? scrollerHeight : 'auto' }">
<slot></slot>
</div>
<div slot="footer" class="dialog_footer" v-if="isButton">
<el-button @click="closeDialog" v-if="isReset">取消</el-button>
<el-button type="primary" plain @click="submitForm" v-if="isSave" :disabled="btnDisabled" :loading="saveloding">
{{ saveButton }}</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
props: {
value: { type: Boolean, default: false },
isMain: {
type: Boolean,
default: false
},
appendToBody: {
type: Boolean,
default: true
},
isButton: {
type: Boolean,
default: true,
},
width: {
type: String,
default: '70%',
},
title: {
type: String,
default: '',
},
isFullscreen: {
type: Boolean,
default: true,
},
isSave: {
type: Boolean,
default: true,
},
saveButton: {
type: String,
default: '提交',
},
isReset: {
type: Boolean,
default: true,
},
saveloding: {
type: Boolean,
default: false,
},
btnDisabled: {
type: Boolean,
default: false
}
},
data () {
return {
key: 0,
dialogVisible: false,
fullscreen: false,
scrollerHeight: false,
}
},
watch: {
value (val) {
this.dialogVisible = val
}
},
methods: {
handleFullscreen (val) {
this.fullscreen = !this.fullscreen
let height = document.getElementById('dialogBox').clientHeight
if (!this.fullscreen) {
this.scrollerHeight = false
} else {
this.scrollerHeight = (window.innerHeight - 180) + 'px'
}
},
submitForm () {
if (this.isButton) {
this.$emit('submitForm');
}
},
closeDialog () {
this.key++
this.$emit('input', false)
this.$emit('closeDialog')
}
},
}
</script>
<style rel="stylesheet/scss" lang="scss" >
@import "~@/styles/mixin.scss";
@import "./dialogBox.scss";
</style>
<style rel="stylesheet/scss" scoped lang="scss" >
/deep/.is-fullscreen {
position: absolute;
top: 50% !important;
left: 50% !important;
transform: translate(-50%, -50%) !important;
}
</style>
\ No newline at end of file
## 这个是弹框组件,对于element自带的组件进行封装,方便修改全局样式做统一操作
### 使用时在组件中引用
export default {
selection: {
renderHeader: (h, { store }) => {
return (
<el-checkbox
disabled={store.states.data && store.states.data.length === 0}
indeterminate={
store.states.selection.length > 0 && !store.states.isAllSelected
}
nativeOn-click={store.toggleAllSelection}
value={store.states.isAllSelected}
/>
)
},
renderCell: (h, { row, column, store, $index }) => {
return (
<el-checkbox
nativeOn-click={event => event.stopPropagation()}
value={store.isSelected(row)}
disabled={
column.selectable
? !column.selectable.call(null, row, $index)
: false
}
on-input={() => {
store.commit('rowSelectedChanged', row)
}}
/>
)
},
sortable: false,
resizable: false
},
index: {
renderHeader: (h, scope) => {
return <span>{scope.column.label || '#'}</span>
},
renderCell: (h, { $index, column }) => {
let i = $index + 1
const index = column.index
if (typeof index === 'number') {
i = $index + index
} else if (typeof index === 'function') {
i = index($index)
}
return <div>{i}</div>
},
sortable: false
},
expand: {
renderHeader: (h, scope) => {
return <span>{scope.column.label || ''}</span>
},
renderCell: (h, { row, store }, proxy) => {
const expanded = store.states.expandRows.indexOf(row) > -1
return (
<div
class={
'el-table__expand-icon ' +
(expanded ? 'el-table__expand-icon--expanded' : '')
}
on-click={e => proxy.handleExpandClick(row, e)}
>
<i class='el-icon el-icon-arrow-right' />
</div>
)
},
sortable: false,
resizable: false,
className: 'el-table__expand-column'
}
}
/*
* FileName: lb-column.vue
* Remark: element-column
* Project: lb-element-table
* Author: 任超
* File Created: Tuesday, 19th March 2019 9:58:23 am
* Last Modified: Tuesday, 19th March 2019 10:14:42 am
* Modified By: 任超
*/
<template>
<el-table-column v-bind="$attrs"
v-on="$listeners"
:prop="column.prop"
:label="column.label"
:type="column.type"
:index="column.index"
:column-key="column.columnKey"
:width="column.width"
:min-width="column.minWidth"
:fixed="column.fixed"
:scoped-slot="column.renderHeader"
:sortable="column.sortable || false"
:sort-method="column.sortMethod"
:sort-by="column.sortBy"
:sort-orders="column.sortOrders"
:resizable="column.resizable || true"
:formatter="column.formatter"
:show-overflow-tooltip="column.showOverflowTooltip || false"
:align="column.align || align || 'center'"
:header-align="column.headerAlign || headerAlign || column.align || align || 'center'"
:class-name="column.className"
:label-class-name="column.labelClassName"
:selectable="column.selectable"
:reserve-selection="column.reserveSelection || false"
:filters="column.filters"
:filter-placement="column.filterPlacement"
:filter-multiple="column.filterMultiple"
:filter-method="column.filterMethod"
:filtered-value="column.filteredValue">
<template slot="header"
slot-scope="scope">
<lb-render v-if="column.renderHeader"
:scope="scope"
:render="column.renderHeader">
</lb-render>
<span v-else>{{ scope.column.label }}</span>
</template>
<template slot-scope="scope">
<lb-render :scope="scope"
:render="column.render">
</lb-render>
</template>
<template v-if="column.children">
<lb-column v-for="(col, index) in column.children"
:key="index"
:column="col">
</lb-column>
</template>
</el-table-column>
</template>
<script>
import LbRender from './lb-render'
import forced from './forced.js'
export default {
name: 'LbColumn',
props: {
column: Object,
headerAlign: String,
align: String
},
components: {
LbRender
},
methods: {
setColumn () {
if (this.column.type) {
this.column.renderHeader = forced[this.column.type].renderHeader
this.column.render = this.column.render || forced[this.column.type].renderCell
}
if (this.column.formatter) {
this.column.render = (h, scope) => {
return <span>{ scope.column.formatter(scope.row, scope.column, scope.row, scope.$index) }</span>
}
}
if (!this.column.render) {
this.column.render = (h, scope) => {
return <span>{ scope.row[scope.column.property] }</span>
}
}
}
},
watch: {
column: {
handler () {
this.setColumn()
},
immediate: true
}
}
}
</script>
/*
* FileName: lb-render.vue
* Remark: 自定义render
* Project: lb-element-table
* Author: 任超
* File Created: Tuesday, 19th March 2019 10:15:30 am
* Last Modified: Tuesday, 19th March 2019 10:15:32 am
* Modified By: 任超
*/
<script>
export default {
name: 'LbRender',
functional: true,
props: {
scope: Object,
render: Function
},
render: (h, ctx) => {
return ctx.props.render ? ctx.props.render(h, ctx.props.scope) : ''
}
}
</script>
/*
* FileName: lb-table.vue
* Remark: element table
* Project: lb-element-table
* Author: 任超
* File Created: Tuesday, 19th March 2019 9:55:27 am
* Last Modified: Tuesday, 19th March 2019 9:55:34 am
* Modified By: 任超
*/
<template>
<div :class="['lb-table', customClass]">
<el-table v-if="!heightNumSetting" class="table-fixed" :row-style="{ height: '50px' }" ref="elTable"
:border='border' :row-class-name="tableRowClassName" :show-header='showHeader'
:header-cell-style="{ background: 'rgb(236, 245, 255)' }" v-bind="$attrs" :height="tableHeight" v-on="$listeners"
:data="data" style="width: 100%" :span-method="this.merge ? this.mergeMethod : this.spanMethod">
<lb-column v-bind="$attrs" v-for="(item, index) in column" :key="index" :column="item">
</lb-column>
</el-table>
<el-table v-else ref="elTable" class="table-fixed" :row-style="{ height: '50px' }" :border='border'
:row-class-name="tableRowClassName" :show-header='showHeader'
:header-cell-style="{ background: 'rgb(236, 245, 255)' }" v-bind="$attrs" :max-height="maxHeight"
v-on="$listeners" :data="data" style="width: 100%" :span-method="this.merge ? this.mergeMethod : this.spanMethod">
<lb-column v-bind="$attrs" v-for="(item, index) in column" :key="index" :column="item">
</lb-column>
</el-table>
<br>
<el-pagination class="lb-table-pagination" v-if="pagination" v-bind="$attrs" v-on="$listeners" background
:page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next" @current-change="paginationCurrentChange"
:style="{ 'margin-top': paginationTop, 'text-align': paginationAlign }">
</el-pagination>
</div>
</template>
<script>
import LbColumn from './lb-column'
export default {
props: {
column: Array,
data: Array,
spanMethod: Function,
pagination: {
type: Boolean,
default: true,
},
border: {
type: Boolean,
default: true,
},
showHeader: {
type: Boolean,
default: true,
},
paginationTop: {
type: String,
default: '0',
},
heightNum: {
type: Number,
default: 265,
},
maxHeight: {
type: Number,
default: 500
},
heightNumSetting: {
type: Boolean,
default: false,
},
customClass: {
type: String,
default: '',
},
paginationAlign: {
type: String,
default: 'left',
},
merge: Array,
},
components: {
LbColumn,
},
data () {
return {
tableHeight: '',
mergeLine: {},
mergeIndex: {},
}
},
created () {
this.getMergeArr(this.data, this.merge)
this.getHeight()
},
computed: {
dataLength () {
return [] || this.data.length
},
},
methods: {
tableRowClassName ({ row, rowIndex }) {
if (rowIndex % 2 === 1) {
return 'interlaced';
}
},
getHeight () {
if (!this.heightNumSetting) {
this.tableHeight = window.innerHeight - this.heightNum
}
},
clearSelection () {
this.$refs.elTable.clearSelection()
},
toggleRowSelection (row, selected) {
this.$refs.elTable.toggleRowSelection(row, selected)
},
toggleAllSelection () {
this.$refs.elTable.toggleAllSelection()
},
toggleRowExpansion (row, expanded) {
this.$refs.elTable.toggleRowExpansion(row, expanded)
},
setCurrentRow (row) {
this.$refs.elTable.setCurrentRow(row)
},
clearSort () {
this.$refs.elTable.clearSort()
},
clearFilter (columnKey) {
this.$refs.elTable.clearFilter(columnKey)
},
doLayout () {
this.$refs.elTable.doLayout()
},
sort (prop, order) {
this.$refs.elTable.sort(prop, order)
},
paginationCurrentChange (val) {
this.$emit('p-current-change', val)
},
getMergeArr (tableData, merge) {
if (!merge) return
this.mergeLine = {}
this.mergeIndex = {}
merge.forEach((item, k) => {
tableData.forEach((data, i) => {
if (i === 0) {
this.mergeIndex[item] = this.mergeIndex[item] || []
this.mergeIndex[item].push(1)
this.mergeLine[item] = 0
} else {
if (data[item] === tableData[i - 1][item]) {
this.mergeIndex[item][this.mergeLine[item]] += 1
this.mergeIndex[item].push(0)
} else {
this.mergeIndex[item].push(1)
this.mergeLine[item] = i
}
}
})
})
},
mergeMethod ({ row, column, rowIndex, columnIndex }) {
const index = this.merge.indexOf(column.property)
if (index > -1) {
const _row = this.mergeIndex[this.merge[index]][rowIndex]
const _col = _row > 0 ? 1 : 0
return {
rowspan: _row,
colspan: _col,
}
}
},
},
watch: {
merge () {
this.getMergeArr(this.data, this.merge)
},
dataLength () {
this.getMergeArr(this.data, this.merge)
}
},
}
</script>
<style rel="stylesheet/scss" scoped lang="scss">
.lb-table {
margin-top: 1px;
.interlaced {
background: #fafcff;
border: 1px solid #ebf2fa;
}
}
/deep/.el-table .cell {
padding-left: 3px;
padding-right: 3px;
}
</style>
## 这是对于element-table 进行的二次封装
### 文档地址
<!-- table 已经全局注册不需要每个页面单独注册 -->
[Windows/Mac/Linux 全平台客户端](https://github.liubing.me/lb-element-table/zh/guide/)
import service from './src/index';
export default {
install (Vue) {
Vue.prototype.$loading = service;
},
service
};
import Vue from 'vue';
import loadingVue from './loading.vue';
import { addClass, removeClass, getStyle } from 'element-ui/src/utils/dom';
import { PopupManager } from 'element-ui/src/utils/popup';
import afterLeave from 'element-ui/src/utils/after-leave';
import merge from 'element-ui/src/utils/merge';
const LoadingConstructor = Vue.extend(loadingVue);
const defaults = {
text: null,
fullscreen: true,
body: false,
lock: false,
customClass: ''
};
let fullscreenLoading;
LoadingConstructor.prototype.originalPosition = '';
LoadingConstructor.prototype.originalOverflow = '';
LoadingConstructor.prototype.close = function() {
if (this.fullscreen) {
fullscreenLoading = undefined;
}
afterLeave(this, _ => {
const target = this.fullscreen || this.body
? document.body
: this.target;
removeClass(target, 'el-loading-parent--relative');
removeClass(target, 'el-loading-parent--hidden');
if (this.$el && this.$el.parentNode) {
this.$el.parentNode.removeChild(this.$el);
}
this.$destroy();
}, 300);
this.visible = false;
};
const addStyle = (options, parent, instance) => {
let maskStyle = {};
if (options.fullscreen) {
instance.originalPosition = getStyle(document.body, 'position');
instance.originalOverflow = getStyle(document.body, 'overflow');
maskStyle.zIndex = PopupManager.nextZIndex();
} else if (options.body) {
instance.originalPosition = getStyle(document.body, 'position');
['top', 'left'].forEach(property => {
let scroll = property === 'top' ? 'scrollTop' : 'scrollLeft';
maskStyle[property] = options.target.getBoundingClientRect()[property] +
document.body[scroll] +
document.documentElement[scroll] +
'px';
});
['height', 'width'].forEach(property => {
maskStyle[property] = options.target.getBoundingClientRect()[property] + 'px';
});
} else {
instance.originalPosition = getStyle(parent, 'position');
}
Object.keys(maskStyle).forEach(property => {
instance.$el.style[property] = maskStyle[property];
});
};
const Loading = (options = {}) => {
if (Vue.prototype.$isServer) return;
options = merge({}, defaults, options);
if (typeof options.target === 'string') {
options.target = document.querySelector(options.target);
}
options.target = options.target || document.body;
if (options.target !== document.body) {
options.fullscreen = false;
} else {
options.body = true;
}
if (options.fullscreen && fullscreenLoading) {
return fullscreenLoading;
}
let parent = options.body ? document.body : options.target;
let instance = new LoadingConstructor({
el: document.createElement('div'),
data: options
});
addStyle(options, parent, instance);
if (instance.originalPosition !== 'absolute' && instance.originalPosition !== 'fixed' && instance.originalPosition !== 'sticky') {
addClass(parent, 'el-loading-parent--relative');
}
if (options.fullscreen && options.lock) {
addClass(parent, 'el-loading-parent--hidden');
}
parent.appendChild(instance.$el);
Vue.nextTick(() => {
instance.visible = true;
});
if (options.fullscreen) {
fullscreenLoading = instance;
}
return instance;
};
export default Loading;
<template>
<transition name="el-loading-fade" @after-leave="handleAfterLeave">
<div v-show="visible" class="el-loading-mask" :style="{ backgroundColor: background || '' }"
:class="[customClass, { 'is-fullscreen': fullscreen }]">
<div class="el-loading-spinner">
<!-- <svg v-if="!spinner" class="circular" viewBox="25 25 50 50">
<circle class="path" cx="50" cy="50" r="20" fill="none" />
</svg>
<i v-else :class="spinner"></i> -->
<img class="img" src="../../../image/progress.gif" alt="">
<p v-if="text" class="el-loading-text">{{ text }}</p>
</div>
</div>
</transition>
</template>
<script>
export default {
data () {
return {
text: null,
spinner: null,
background: null,
fullscreen: true,
visible: false,
customClass: ''
};
},
methods: {
handleAfterLeave () {
this.$emit('after-leave');
},
setText (text) {
this.text = text;
}
}
};
</script>
<style scoped lang="scss">
.el-loading-spinner {
margin-top: -100px !important;
.img {
width: 80px;
height: 80px;
}
}
</style>
\ No newline at end of file
import MessageBox from './src/main.js';
export default MessageBox;
const defaults = {
title: null,
message: '',
type: '',
iconClass: '',
showInput: false,
showClose: true,
modalFade: true,
lockScroll: true,
closeOnClickModal: true,
closeOnPressEscape: true,
closeOnHashChange: true,
inputValue: null,
inputPlaceholder: '',
inputType: 'text',
inputPattern: null,
inputValidator: null,
inputErrorMessage: '',
showConfirmButton: true,
showCancelButton: false,
confirmButtonPosition: 'right',
confirmButtonHighlight: false,
cancelButtonHighlight: false,
confirmButtonText: '',
cancelButtonText: '',
confirmButtonClass: '',
cancelButtonClass: '',
customClass: '',
beforeClose: null,
dangerouslyUseHTMLString: false,
center: false,
roundButton: false,
distinguishCancelAndClose: false
};
import Vue from 'vue';
import msgboxVue from './main.vue';
import merge from 'element-ui/src/utils/merge';
import { isVNode } from 'element-ui/src/utils/vdom';
const MessageBoxConstructor = Vue.extend(msgboxVue);
let currentMsg, instance;
let msgQueue = [];
const defaultCallback = action => {
if (currentMsg) {
let callback = currentMsg.callback;
if (typeof callback === 'function') {
if (instance.showInput) {
callback(instance.inputValue, action);
} else {
callback(action);
}
}
if (currentMsg.resolve) {
if (action === 'confirm') {
if (instance.showInput) {
currentMsg.resolve({ value: instance.inputValue, action });
} else {
currentMsg.resolve(action);
}
} else if (currentMsg.reject && (action === 'cancel' || action === 'close')) {
currentMsg.reject(action);
}
}
}
};
const initInstance = () => {
instance = new MessageBoxConstructor({
el: document.createElement('div')
});
instance.callback = defaultCallback;
};
const showNextMsg = () => {
if (!instance) {
initInstance();
}
instance.action = '';
if (!instance.visible || instance.closeTimer) {
if (msgQueue.length > 0) {
currentMsg = msgQueue.shift();
let options = currentMsg.options;
for (let prop in options) {
if (options.hasOwnProperty(prop)) {
instance[prop] = options[prop];
}
}
if (options.callback === undefined) {
instance.callback = defaultCallback;
}
let oldCb = instance.callback;
instance.callback = (action, instance) => {
oldCb(action, instance);
showNextMsg();
};
if (isVNode(instance.message)) {
instance.$slots.default = [instance.message];
instance.message = null;
} else {
delete instance.$slots.default;
}
['modal', 'showClose', 'closeOnClickModal', 'closeOnPressEscape', 'closeOnHashChange'].forEach(prop => {
if (instance[prop] === undefined) {
instance[prop] = true;
}
});
document.body.appendChild(instance.$el);
Vue.nextTick(() => {
instance.visible = true;
});
}
}
};
const MessageBox = function(options, callback) {
if (Vue.prototype.$isServer) return;
if (typeof options === 'string' || isVNode(options)) {
options = {
message: options
};
if (typeof arguments[1] === 'string') {
options.title = arguments[1];
}
} else if (options.callback && !callback) {
callback = options.callback;
}
if (typeof Promise !== 'undefined') {
return new Promise((resolve, reject) => { // eslint-disable-line
msgQueue.push({
options: merge({}, defaults, MessageBox.defaults, options),
callback: callback,
resolve: resolve,
reject: reject
});
showNextMsg();
});
} else {
msgQueue.push({
options: merge({}, defaults, MessageBox.defaults, options),
callback: callback
});
showNextMsg();
}
};
MessageBox.setDefaults = defaults => {
MessageBox.defaults = defaults;
};
MessageBox.alert = (message, title, options) => {
if (typeof title === 'object') {
options = title;
title = '';
} else if (title === undefined) {
title = '';
}
return MessageBox(merge({
title: title,
message: message,
$type: 'alert',
closeOnPressEscape: false,
closeOnClickModal: false
}, options));
};
MessageBox.close = () => {
instance.doClose();
instance.visible = false;
msgQueue = [];
currentMsg = null;
};
export default MessageBox;
export { MessageBox };
<template>
<transition name="msgbox-fade">
<div class="el-message-box__wrapper" tabindex="-1" v-show="visible" @click.self="handleWrapperClick" role="dialog"
aria-modal="true" :aria-label="title || 'dialog'">
<div class="el-message-box" :class="[customClass, center && 'el-message-box--center']">
<div class="el-message-box__header" v-if="title !== null">
<div class="el-message-box__title">
<div :class="['el-message-box__status', icon]" v-if="icon && center">
</div>
<span>{{ title }}</span>
</div>
<button type="button" class="el-message-box__headerbtn" aria-label="Close" v-if="showClose"
@click="handleAction(distinguishCancelAndClose ? 'close' : 'cancel')"
@keydown.enter="handleAction(distinguishCancelAndClose ? 'close' : 'cancel')">
<i class="el-message-box__close el-icon-close"></i>
</button>
</div>
<div class="el-message-box__content">
<div class="el-message-box__message" v-if="message !== ''">
<slot>
<p>{{ message }}</p>
</slot>
</div>
</div>
</div>
</div>
</transition>
</template>
<script type="text/babel">
import Popup from 'element-ui/src/utils/popup';
import Locale from 'element-ui/src/mixins/locale';
import { addClass, removeClass } from 'element-ui/src/utils/dom';
import { t } from 'element-ui/src/locale';
import Dialog from 'element-ui/src/utils/aria-dialog';
let messageBox;
let typeMap = {
success: 'success',
info: 'info',
warning: 'warning',
error: 'error'
};
export default {
mixins: [Popup, Locale],
props: {
modal: {
default: true
},
lockScroll: {
default: true
},
showClose: {
type: Boolean,
default: true
},
closeOnClickModal: {
default: true
},
closeOnPressEscape: {
default: true
},
closeOnHashChange: {
default: true
},
center: {
default: false,
type: Boolean
},
roundButton: {
default: false,
type: Boolean
}
},
components: {
ElInput,
ElButton
},
computed: {
icon () {
const { type, iconClass } = this;
return iconClass || (type && typeMap[type] ? `el-icon-${typeMap[type]}` : '');
},
confirmButtonClasses () {
return `el-button--primary ${this.confirmButtonClass}`;
},
cancelButtonClasses () {
return `${this.cancelButtonClass}`;
}
},
methods: {
getSafeClose () {
const currentId = this.uid;
return () => {
this.$nextTick(() => {
if (currentId === this.uid) this.doClose();
});
};
},
doClose () {
if (!this.visible) return;
this.visible = false;
this._closing = true;
this.onClose && this.onClose();
messageBox.closeDialog(); // 解绑
if (this.lockScroll) {
setTimeout(this.restoreBodyStyle, 200);
}
this.opened = false;
this.doAfterClose();
setTimeout(() => {
if (this.action) this.callback(this.action, this);
});
},
handleWrapperClick () {
if (this.closeOnClickModal) {
this.handleAction(this.distinguishCancelAndClose ? 'close' : 'cancel');
}
},
handleInputEnter () {
if (this.inputType !== 'textarea') {
return this.handleAction('confirm');
}
},
handleAction (action) {
if (this.$type === 'prompt' && action === 'confirm' && !this.validate()) {
return;
}
this.action = action;
if (typeof this.beforeClose === 'function') {
this.close = this.getSafeClose();
this.beforeClose(action, this, this.close);
} else {
this.doClose();
}
},
validate () {
if (this.$type === 'prompt') {
const inputPattern = this.inputPattern;
if (inputPattern && !inputPattern.test(this.inputValue || '')) {
this.editorErrorMessage = this.inputErrorMessage || t('el.messagebox.error');
addClass(this.getInputElement(), 'invalid');
return false;
}
const inputValidator = this.inputValidator;
if (typeof inputValidator === 'function') {
const validateResult = inputValidator(this.inputValue);
if (validateResult === false) {
this.editorErrorMessage = this.inputErrorMessage || t('el.messagebox.error');
addClass(this.getInputElement(), 'invalid');
return false;
}
if (typeof validateResult === 'string') {
this.editorErrorMessage = validateResult;
addClass(this.getInputElement(), 'invalid');
return false;
}
}
}
this.editorErrorMessage = '';
removeClass(this.getInputElement(), 'invalid');
return true;
},
getFirstFocus () {
const btn = this.$el.querySelector('.el-message-box__btns .el-button');
const title = this.$el.querySelector('.el-message-box__btns .el-message-box__title');
return btn || title;
},
getInputElement () {
const inputRefs = this.$refs.input.$refs;
return inputRefs.input || inputRefs.textarea;
},
handleClose () {
this.handleAction('close');
}
},
watch: {
inputValue: {
immediate: true,
handler (val) {
this.$nextTick(_ => {
if (this.$type === 'prompt' && val !== null) {
this.validate();
}
});
}
},
visible (val) {
if (val) {
this.uid++;
if (this.$type === 'alert' || this.$type === 'confirm') {
this.$nextTick(() => {
this.$refs.confirm.$el.focus();
});
}
this.focusAfterClosed = document.activeElement;
messageBox = new Dialog(this.$el, this.focusAfterClosed, this.getFirstFocus());
}
// prompt
if (this.$type !== 'prompt') return;
if (val) {
setTimeout(() => {
if (this.$refs.input && this.$refs.input.$el) {
this.getInputElement().focus();
}
}, 500);
} else {
this.editorErrorMessage = '';
removeClass(this.getInputElement(), 'invalid');
}
}
},
mounted () {
this.$nextTick(() => {
if (this.closeOnHashChange) {
window.addEventListener('hashchange', this.close);
}
});
},
beforeDestroy () {
if (this.closeOnHashChange) {
window.removeEventListener('hashchange', this.close);
}
setTimeout(() => {
messageBox.closeDialog();
});
},
data () {
return {
uid: 1,
title: undefined,
message: '',
type: '',
iconClass: '',
customClass: '',
showInput: false,
inputValue: null,
inputPlaceholder: '',
inputType: 'text',
inputPattern: null,
inputValidator: null,
inputErrorMessage: '',
showConfirmButton: true,
showCancelButton: false,
action: '',
confirmButtonText: '',
cancelButtonText: '',
confirmButtonLoading: false,
cancelButtonLoading: false,
confirmButtonClass: '',
confirmButtonDisabled: false,
cancelButtonClass: '',
editorErrorMessage: null,
callback: null,
dangerouslyUseHTMLString: false,
focusAfterClosed: null,
isOnComposition: false,
distinguishCancelAndClose: false
};
}
};
</script>
<template>
<div class="my-outbox">
<div class="my-inbox" ref='box'>
<div class="my-list" :style="note" v-for="(item,index) in sendVal" :key='index' ref='list'>
<span class="my-uname">{{ item }}</span>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'my-marquee-left',
props: {
sendVal: {
type: Array,
default: []
}
},
data () {
return {
note: {
backgroundSize: "20px 20px",
backgroundRepeat: "no-repeat",
backgroundPosition: "1% 50%"
},
// 定时器标识
nowTime: null,
// 每一个内容的宽度
disArr: []
}
},
mounted () {
// var that = this
var item = this.$refs.list
var len = this.sendVal.length
var arr = []
// 因为设置的margin值一样,所以取第一个就行。
var margin = this.getMargin(item[0])
for (var i = 0; i < len; i++) {
arr.push(item[i].clientWidth + margin) // 把宽度和 margin 加起来就是每一个元素需要移动的距离
}
this.disArr = arr
this.moveLeft()
},
beforeDestroy () {
// 页面关闭清除定时器
clearInterval(this.nowTime)
// 清除定时器标识
this.nowTime = null
},
methods: {
// 获取margin属性
getMargin (obj) {
var marg = window.getComputedStyle(obj, null)['margin-right']
marg = marg.replace('px', '')
return Number(marg) // 强制转化成数字
},
// 移动的方法
moveLeft () {
var that = this
var outbox = this.$refs.box
// 初始位置
var startDis = 0
// console.log('that.disArr: ', that.disArr)
this.nowTime = setInterval(function () {
startDis -= 0.5
// console.log('初始化移动:', startDis)
if (Math.abs(startDis) > Math.abs(that.disArr[0])) {
// 每次移动完一个元素的距离,就把这个元素的宽度
that.disArr.push(that.disArr.shift())
// 每次移动完一个元素的距离,就把列表数据的第一项放到最后一项
// console.log('that.sendVal: ', that.sendVal)
// console.log('that.sendVal: ', that.sendVal.shift())
that.sendVal.push(that.sendVal.shift())
startDis = 0
// console.log('移动')
} else {
// console.log('不来不来就不来...')
}
// 每次都让盒子移动指定的距离,在我自己做的项目中,这种字符串拼接的方法并没有生效
// outbox.style = 'transform: translateX3d(' + startDis + 'px)'
// 后面换了es6的模板字符串就可以了
outbox.style = `transform: translateX(${startDis}px)`
// outbox.style = 'transform: translateX(\' + startDis + \' px)'
// outbox.style.marginLeft = 'startDis'
// console.log('这里:', startDis)
}, 1000 / 60)
}
}
}
</script>
<style lang="scss" scoped>
.my-outbox {
color: #fff;
overflow: hidden;
line-height: 28px;
// background: $light-blue;
width: 500px;
.my-inbox {
white-space: nowrap;
.my-list {
margin-right: 15px;
display: inline-block;
font-size: 14px;
text-indent: 30px;
.my-uname {
color: #fff;
}
}
}
}
</style>
\ No newline at end of file
......@@ -107,7 +107,7 @@ export default {
.ls-mask {
width: 100%;
height: 100%;
z-index: 100000;
z-index: 2000;
position: fixed;
left: 0;
top: 0;
......
<template>
<div class="navbar" v-theme.background="mTheme">
<div class="logo">
<img v-if="logo" :src="logo" class="header-logo">
</div>
<div class="backdrop">
<theme style="float: right;height: 26px;width: 26px;margin-top: 26px;" @change="themeChange" />
</div>
<div class="right-menu">
<el-dropdown class="avatar-container right-menu-item hover-effect" @command="handleCommand">
<div class="avatar-wrapper">
<span style="padding-right:10px">{{ name }}</span>
<img :src="avatar + '?imageView2/1/w/80/h/80'" class="user-avatar" />
</div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="a">个人中心</el-dropdown-item>
<el-dropdown-item command="f">退出登录</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<div class="navbar-con">
<div class="navbar" v-theme.background="mTheme">
<div class="logo">
<img v-if="logo" :src="logo" class="header-logo">
</div>
<div class="backdrop">
<theme style="float: right;height: 26px;width: 26px;margin-top: 26px;" @change="themeChange" />
</div>
<div class="right-menu">
<el-dropdown class="avatar-container right-menu-item hover-effect" @command="handleCommand">
<div class="avatar-wrapper">
<span style="padding-right:10px">{{ name }}</span>
<img :src="avatar + '?imageView2/1/w/80/h/80'" class="user-avatar" />
</div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="a">个人中心</el-dropdown-item>
<el-dropdown-item command="f">退出登录</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
<NoticeBar class="NoticeBar" :sendVal="sendVal" />
</div>
</template>
<script>
import NoticeBar from '@/components/NoticeBar/index'
import { mapGetters } from 'vuex'
export default {
components: {
NoticeBar
},
computed: {
...mapGetters(['sidebar', 'avatar', 'name'])
},
data () {
return {
logo: require('../../image/logo.png')
logo: require('../../image/logo.png'),
sendVal: [
'222222222222222222222222222222222',
'222222233333333333333333333333'
]
}
},
methods: {
......@@ -53,6 +64,16 @@ export default {
}
</script>
<style lang="scss" scoped>
.navbar-con {
position: relative;
}
.NoticeBar {
position: absolute;
left: 330px;
bottom: 0;
}
.el-dropdown-menu {
padding: 0 !important;
border: 1px solid #EBEEF5;
......
......@@ -24,6 +24,7 @@ router.beforeEach(async (to, from, next) => {
const accessRoutes = await store.dispatch('permission/generateRoutes', getMenuData)
router.addRoutes([...accessRoutes, { path: '*', redirect: '/404', hidden: true }])
const routeTo = Cookies.get('routerTo')
console.log(routeTo)
if (routeTo && routeTo !== '/') {
next({ ...to, replace: true })
} else {
......
......@@ -116,23 +116,20 @@
.title-block {
display: inline-block;
position: relative;
background: #3498db;
color: #fff !important;
text-align: center;
padding: 0px 20px;
height: 30px;
line-height: 30px;
border-radius: 5px 5px 5px 0px;
letter-spacing: 2px;
text-align: left;
width: 100%;
line-height: 26px;
padding-left: 10px;
font-size: 16px;
border-bottom: 1px solid $borderColor;
}
.title-block .triangle {
width: 0px;
height: 0px;
.title-block:after {
content: " ";
width: 0;
height: 16px;
position: absolute;
border: 5px solid transparent;
border-top: 5px solid #3498db;
border-right: 5px solid #3498db;
left: 0px;
bottom: -10px;
border-left: 3px solid $light-blue;
left: 0;
top: 5px;
}
\ No newline at end of file
......
......@@ -16,7 +16,7 @@
left: 0;
z-index: 1001;
background-color: $subMenuBg;
overflow: hidden;
// overflow: hidden;
.horizontal-collapse-transition {
transition: 0s width ease-in-out, 0s padding-left ease-in-out,
......@@ -25,8 +25,9 @@
.scrollbar-wrapper {
overflow-x: hidden !important;
overflow-y: auto;
// overflow-y: auto;
margin-right: 0 !important;
height: 90vh;
&::-webkit-scrollbar {
display: none;
......@@ -52,7 +53,6 @@
background-color: transparent !important;
border: none;
height: 100%;
// overflow-y: auto;
width: 100% !important;
}
......
import Loading from '@/components/loading/index.js';
import Loading from '@/components/Loading/index.js';
// 定义 loading
let loading
......
......@@ -3,7 +3,8 @@
作者:calliope
-->
<template>
<lb-table border :column="tableData.columns" :data="tableData.data" :maxHeight="200" heightNumSetting :pagination="false">
<lb-table border :column="tableData.columns" :data="tableData.data" :maxHeight="200" heightNumSetting
:pagination="false">
</lb-table>
</template>
<script>
......@@ -40,7 +41,7 @@ export default {
}
},
{
width: '200',
width: '150',
label: '身份证读卡器',
render: (h, scope) => {
return (
......@@ -51,7 +52,7 @@ export default {
}
},
{
width: '200',
width: '150',
prop: 'sqrxm',
label: '姓名/名称',
render: (h, scope) => {
......@@ -66,7 +67,7 @@ export default {
label: '证件种类',
render: (h, scope) => {
return (
<el-select value={scope.row[scope.column.property]}
<el-select class="width100" value={scope.row[scope.column.property]}
onChange={(val) => { scope.row[scope.column.property] = val }}>
{
this.dictData['A30'].map(option => {
......
......@@ -7,6 +7,28 @@
justify-content: space-between;
}
.workbench {
flex-wrap: wrap;
height: 100%;
li {
width: 32.5%;
height: 118px;
@include flex-center;
flex-direction: column;
color: #fff;
i {
color: #fff;
font-size: 30px;
}
}
li:nth-child(1) {
margin-bottom: 6px;
}
}
.marginZL15 {
margin: 0 15px;
}
......@@ -36,7 +58,7 @@
ul {
li {
line-height: 36px;
p {
white-space: nowrap;
}
......
......@@ -3,8 +3,14 @@
<div class="home-left">
<el-row :gutter="8">
<el-col :span="12">
<el-card shadow="hover">
鼠标悬浮时显示
<el-card shadow="hover" :body-style="{ padding: '0' }">
<ul class="workbench flexst">
<li v-for="(item, index) in newsListData" class="pointer" :key="index"
:style="{ backgroundColor: item.color }">
<i class="el-icon-s-claim"></i>
{{ item.title }}
</li>
</ul>
</el-card>
</el-col>
<el-col :span="12">
......@@ -14,7 +20,7 @@
<i class="el-icon-s-unfold pointer"></i>
</div>
<ul>
<li v-for="(item, index) in notice" :key="index" class="flexst">
<li v-for="(item, index) in notice" :key="index" class="flexst pointer">
<p class="list-title">{{ item.title }}</p>
<p class="marginZL15">{{ item.date }}</p>
<p>{{ item.state }}</p>
......@@ -41,11 +47,11 @@
<el-col :span="12">
<el-card shadow="hover">
<div slot="header" class="flexst">
<h5 class="title">公司邮件</h5>
<h5 class="title">法律法规</h5>
<i class="el-icon-s-unfold pointer"></i>
</div>
<ul>
<li v-for="(item, index) in mailList" :key="index" class="flexst">
<li v-for="(item, index) in mailList" @click="handleView" :key="index" class="flexst pointer">
<p class="right15">{{ item.date }}</p>
<p class="list-title">{{ item.title }}</p>
</li>
......@@ -73,6 +79,38 @@ export default {
components: { calendar },
data () {
return {
newsListData: [
{
icon: '',
title: '任务',
color: '#61AEFF'
},
{
icon: '',
title: '邮件',
color: '#43DEB3'
},
{
icon: '',
title: '消息',
color: '#F3C143'
},
{
icon: '',
title: '日历',
color: '#F09936'
},
{
icon: '',
title: '常用功能',
color: '#9C92FF'
},
{
icon: '',
title: '申请',
color: '#589FFF'
}
],
chartData: [{
year: '1991',
value: 15468
......@@ -92,14 +130,11 @@ export default {
year: '1996',
value: 31056
}, {
year: '1997',
value: 31982
}, {
year: '1998',
value: 32040
year: '1995',
value: 17000
}, {
year: '1999',
value: 33233
year: '1996',
value: 31056
}],
notice: [
{
......@@ -168,6 +203,10 @@ export default {
this.buildChart();
},
methods: {
handleView () {
const href = 'http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf'
window.open(href, '_blank');
},
buildChart () {
var chart = new G2.Chart({
container: 'mountNode',
......@@ -204,5 +243,6 @@ export default {
}
</script>
<style scoped lang="scss">
@import "~@/styles/mixin.scss";
@import "./index.scss";
</style>
\ No newline at end of file
......
......@@ -61,6 +61,7 @@ class data extends filter {
},
{
label: "操作",
width: 100,
render: (h, scope) => {
return <el-button type="text" icon='el-icon-view' onClick={() => { vm.dydjbClick(scope) }}>打印登记薄</el-button>
}
......
<template>
<dialogBox title="家庭房产查询" @closeDialog="closeDialog" width="90%" :isButton="false" v-model="myValue">
<dialogBox title="家庭房产查询" @closeDialog="closeDialog" isMain width="70%" :isButton="false" v-model="myValue">
<div class="jtfccx-edit">
<div class="jtfccx-edit-con">
<b class="title">申请信息</b>
......@@ -24,21 +24,20 @@
<personInfoTable @getInfoList="handleGetSqList" :dataList="sqdataList" />
<b class="title">权利人</b>
<personInfoTable @getInfoList="handleGetQlList" :dataList="qldataList" />
<personInfoTable @getInfoList="handleGetQlList" :dataList="qldataList" />
<div class="submit-button">
<el-button type="primary" @click="queryChick()">查询</el-button>
<el-button @click="resetClick()">重置</el-button>
<el-button type="primary" @click="queryChick">查询</el-button>
<el-button @click="resetClick">重置</el-button>
</div>
<b class="title">查询结果</b>
<!-- <p>查询编号:{{cxbh}}</p> -->
<lb-table :column="searchData.columns" border :data="searchData.data" :maxHeight="200" heightNumSetting
<b class="title" v-if="isSearch">查询结果</b>
<lb-table :column="searchData.columns" v-if="isSearch" :data="searchData.data" :maxHeight="200" heightNumSetting
:pagination="false">
</lb-table>
</div>
<div class="submit-button" style="padding-bottom:20px">
<el-button type="primary">无房证明打印(1)</el-button>
<el-button type="primary">房产结果打印(1)</el-button>
<div class="submit-button" v-if="isSearch" style="padding-bottom:20px">
<el-button type="primary" v-if="searchData.data.length > 0">房产结果打印(1)</el-button>
<el-button type="primary" v-else>无房证明打印(1)</el-button>
<el-button @click="closeDialog">关闭</el-button>
</div>
</div>
......@@ -57,10 +56,9 @@ export default {
props: {
value: { type: Boolean, default: false },
},
mounted() {
mounted () {
sendThis(this);
},
data () {
return {
myValue: this.value,
......@@ -69,6 +67,7 @@ export default {
ycyrgx: 1,
cxlx: '1' //查询类型 1:房产查询 2:登记簿查询
},
isSearch: false,
dataList: [{
sqrxm: '',
sqrzjlxbm: '',
......@@ -129,16 +128,12 @@ export default {
this.addJtfc.qlrxx = val
}
},
queryChick () {
queryChick () {
this.addJtfc.djSqcxDO = { ...this.ruleForm }
// this.$message({
// type: 'success',
// message: '删除成功!'
// });
addJtfcCxjgXx(this.addJtfc).then(res => {
this.searchData.data = res.result;
console.log(res);
this.isSearch = true
})
},
resetClick () {
......@@ -148,12 +143,12 @@ export default {
handleRead (row) { },
//抵押
dyClick(){
dyClick () {
},
//查封
cfClick(){
cfClick () {
}
}
......@@ -162,6 +157,7 @@ export default {
<style scoped lang="scss">
@import "~@/styles/mixin.scss";
@import "~@/styles/public.scss";
.title {
padding-bottom: 10px;
margin-bottom: 10px;
......
......@@ -61,7 +61,6 @@ class data extends filter {
{
label: '登记状态',
width: '150',
align: 'center',
fixed: 'right',
render: (h, scope) => {
......@@ -69,9 +68,7 @@ class data extends filter {
<div>
<el-button type="text" icon="el-icon-edit-outline" onClick={() => { this.dyClick(scope) }}>抵押</el-button>
<el-button type="text" icon="el-icon-edit-outline" onClick={() => { this.cfClick(scope) }}>查封</el-button>
</div>
)
}
}
......
......@@ -81,8 +81,18 @@ export default {
handleAdd () {
this.isDialog = true;
},
},
};
handleViewClick (scope) {
var sqcxBsm = scope.row.bsmSqcx;
this.$popup("申请查询记录", "sqcx/sqcxjl/components/sqcxjlInfo", {
formData: {
sqcxBsm: sqcxBsm,
},
cancel: function () { }, //取消事件的回调
confirm: function () { },
});
}
}
}
</script>
<style scoped lang="scss">
@import "~@/styles/public.scss";
......
......@@ -69,6 +69,13 @@ class data extends filter {
{
prop: "cxyt",
label: "查询用途"
},
{
label: "操作",
width: 80,
render: (h, scope) => {
return <el-button type="text" icon='el-icon-view' onClick={() => { vm.handleViewClick(scope) }}>查看</el-button>
}
}
]
}
......
<template>
<div >
<div>
<el-form :model="ruleForm" label-width="120px">
<el-row>
<el-col :span="24" style="margin-bottom: 15px">
......@@ -29,14 +29,8 @@
<el-row>
<el-col>
<lb-table
:column="sqrData.columns"
border
:data="sqrData.data"
:maxHeight="200"
heightNumSetting
:pagination="false"
>
<lb-table :column="sqrData.columns" border :data="sqrData.data" :maxHeight="200" heightNumSetting
:pagination="false">
</lb-table>
</el-col>
</el-row>
......@@ -51,14 +45,8 @@
</el-row>
<el-row>
<el-col>
<lb-table
:column="qlrData.columns"
border
:data="qlrData.data"
:maxHeight="200"
heightNumSetting
:pagination="false"
>
<lb-table :column="qlrData.columns" border :data="qlrData.data" :maxHeight="200" heightNumSetting
:pagination="false">
</lb-table>
</el-col>
</el-row>
......@@ -73,19 +61,13 @@
</el-row>
<el-row>
<el-col>
<p>查询编号:{{cxbh}}</p>
<p>查询编号:{{ cxbh }}</p>
</el-col>
</el-row>
<el-row>
<el-col>
<lb-table
border
:column="cxjgData.columns"
:data="cxjgData.data"
:maxHeight="200"
heightNumSetting
:pagination="false"
>
<lb-table :column="cxjgData.columns" :data="cxjgData.data" :maxHeight="200" heightNumSetting
:pagination="false">
</lb-table>
</el-col>
</el-row>
......@@ -104,12 +86,12 @@ export default {
// },
props: ["formData"],
created() {
created () {
// debugger;
// alert(this.formData.sqcxBsm);
},
data() {
data () {
return {
ruleForm: {
cxyt: "",
......@@ -134,8 +116,7 @@ export default {
};
},
mounted() {
debugger;
mounted () {
sendThis(this);
var sqcxBsm = this.formData.sqcxBsm;
......@@ -145,19 +126,17 @@ export default {
this.sqrData.data = res.result.sqxx;
this.qlrData.data = res.result.qlrxx;
this.cxjgData.data = res.result.djSqcxCxjgDOList;
this.cxbh=res.result.djSqcxDO.cxbh;
this.cxbh = res.result.djSqcxDO.cxbh;
}
})
.catch((error) => {
console.log(error);
});
})
},
methods: {},
};
</script>
<style scoped lang="scss">
@import "~@/styles/mixin.scss";
</style>
......
......@@ -8,7 +8,7 @@ class data extends filter {
constructor() {
super()
}
cxjgcolumns() {
cxjgcolumns () {
return [
{
prop: 'qszt',
......@@ -73,7 +73,6 @@ class data extends filter {
{
label: '登记状态',
width: '150',
align: 'center',
fixed: 'right',
render: (h, scope) => {
......@@ -86,7 +85,7 @@ class data extends filter {
}
]
}
sqrcolumns() {
sqrcolumns () {
return [
{
prop: 'sqrxm',
......@@ -107,7 +106,7 @@ class data extends filter {
]
}
qlrcolumns() {
qlrcolumns () {
return [
{
prop: 'sqrxm',
......
......@@ -78,7 +78,6 @@ export default {
handleViewClick (scope) {
var sqcxBsm = scope.row.bsmSqcx;
this.$popup("申请查询记录", "sqcx/sqcxjl/components/sqcxjlInfo", {
height: "800px",
formData: {
sqcxBsm: sqcxBsm,
},
......
......@@ -65,10 +65,11 @@ class data extends filter {
},
{
label: "操作",
width: 80,
render: (h, scope) => {
return <el-button type="text" icon='el-icon-view' onClick={() => { vm.handleViewClick(scope) }}>查看</el-button>
}
},
}
]
}
}
......
......@@ -85,6 +85,9 @@
padding-left: 5px !important;
}
/deep/.el-menu {
border-right: none;
}
/deep/.el-menu-item.is-active {
......
......@@ -8,11 +8,6 @@
<el-form :model="ruleForm" ref="ruleForm" label-width="100px">
<el-row>
<el-col :span="8">
<el-form-item label="业务来源" prop="ywlymc">
<el-input v-model="ruleForm.ywlymc"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="申请业务名称" prop="sqywmc">
<el-input v-model="ruleForm.sqywmc"></el-input>
</el-form-item>
......@@ -22,13 +17,13 @@
<el-input v-model="ruleForm.qlrmc"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="义务人" prop="ywrmc">
<el-input v-model="ruleForm.ywrmc"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="受理时间" prop="slsj">
<el-date-picker v-model="ruleForm.slsj" value-format="yyyy-MM-dd" class="width100" type="date"
......@@ -55,7 +50,6 @@ export default {
return {
myValue: this.value,
ruleForm: {
ywlymc: '',
sqywmc: '',
qlrmc: '',
ywrmc: '',
......
<template>
<div class="from-clues">
<!-- 表单部分 -->
<div class="from-clues-header">
<el-form :model="queryForm" ref="queryForm" @submit.native.prevent label-width="80px">
<el-row>
......@@ -57,7 +56,7 @@
</div>
<div class="from-clues-content">
<lb-table :page-size="pageData.size" class="loadingtext" @sort-change="handleSort"
:current-page.sync="pageData.currentPage" :heightNum="300" :total="tableData.total"
:current-page.sync="pageData.currentPage" :heightNum="290" :total="tableData.total"
@size-change="handleSizeChange" @p-current-change="handleCurrentChange" :column="tableData.columns"
:data="tableData.data">
</lb-table>
......@@ -98,6 +97,13 @@ export default {
sendThis(this);
this.queryClick()
},
watch: {
queryForm: {
handler (newName, oldName) {
},
immediate: true
}
},
methods: {
// 列表渲染接口
queryClick () {
......
<template>
<!-- 受理信息 -->
<div class="slxx">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" :label-position="flag ? 'top' : ''" :inline="flag"
label-width="120px">
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
:label-position="flag ? 'top' : ''"
:inline="flag"
label-width="120px"
>
<div class="slxx_con">
<div class="slxx_title">受理信息</div>
<div class="slxx_title title-block">受理信息</div>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="业务号:" prop="ywh">
<el-input disabled v-model="ruleForm.ywh"></el-input>
<el-form-item :class="flag ? 'marginBot0' : ''" label="业务号:">
<el-input disabled v-model="ruleForm.slywxx.ywh"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="受理人员:" prop="slry">
<el-input disabled v-model="ruleForm.slry"></el-input>
<el-form-item :class="flag ? 'marginBot0' : ''" label="受理人员:">
<el-input disabled v-model="ruleForm.slywxx.slry"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="受理时间:" prop="slsj">
<el-input disabled v-model="ruleForm.slsj"></el-input>
<el-form-item :class="flag ? 'marginBot0' : ''" label="受理时间:">
<el-input disabled v-model="ruleForm.slywxx.slsj"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="权利类型:" prop="qllx">
<el-select disabled v-model="ruleForm.qllx" filterable clearable placeholder="请选择权利类型">
<el-option v-for="item in dictData['A8']" :key="item.dcode" :label="item.dname" :value="item.dcode">
</el-option>
</el-select>
<el-form-item
:class="flag ? 'marginBot0' : ''"
label="权利类型:"
prop="qllx"
>
<el-input disabled v-model="ruleForm.slywxx.qllxmc"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="登记类型:" prop="djlx">
<el-select disabled v-model="ruleForm.djlx" filterable clearable placeholder="请选择登记类型">
<el-option v-for="item in dictData['A21']" :key="item.dcode" :label="item.dname" :value="item.dcode">
</el-option>
</el-select>
<el-form-item
:class="flag ? 'marginBot0' : ''"
label="登记类型:"
prop="djlx"
>
<el-input disabled v-model="ruleForm.slywxx.djlxmc"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="登记情形:" prop="djqx">
<el-input disabled v-model="ruleForm.djqxmc"></el-input>
</el-form-item>
</el-col>
</el-row>
<div class="slxx_title">查封不动产情况</div>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="不动产权证号:" prop="bdcqzh">
<el-input disabled v-model="ruleForm.bdcdyh"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="权利人:" prop="qlr">
<el-input disabled v-model="ruleForm.qlr"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="不动产单元号:" prop="bdcdyh">
<el-input disabled v-model="ruleForm.bdcdyh"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="面积:" prop="mj">
<el-input disabled v-model="ruleForm.mj"></el-input>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item :class="flag ? 'marginBot0' : ''" label="坐落:" prop="zl">
<el-input disabled v-model="ruleForm.zl"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="权利性质" prop="qlxz">
<el-input disabled v-model="ruleForm.zrzDetail.zrzh"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="用途:" prop="yt">
<el-input disabled v-model="ruleForm.ghytmc"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="取得价格:" prop="qdjg">
<el-input disabled v-model="ruleForm.qdjg"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="查封机关:">
<el-input disabled v-model="ruleForm.fwyt"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="查封类型:">
<el-input disabled v-model="ruleForm.fwxz"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="查封文件:">
<el-input disabled v-model="ruleForm.fwjg"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="查封文号:">
<el-input disabled v-model="ruleForm.fwyt"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="查封起始时间:">
<el-input disabled v-model="ruleForm.fwxz"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :class="flag ? 'marginBot0' : ''" label="查封结束时间:">
<el-input disabled v-model="ruleForm.fwjg"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col>
<el-form-item :class="flag ? 'marginBot0' : ''" label="查封范围:" prop="cffw">
<el-input class="textArea" type="textarea" v-model="ruleForm.cffw"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col>
<el-form-item :class="flag ? 'marginBot0' : ''" label="附记:" prop="fj">
<el-input class="textArea" type="textarea" v-model="ruleForm.fj"></el-input>
</el-form-item>
</el-col>
</el-row>
<div class="slxx_title">不动产权利人信息</div>
<el-row :gutter="10">
<el-col :span="14">
<el-form-item :class="flag ? 'marginBot0' : ''" label="共有方式:">
<el-radio-group v-model="ruleForm.gyfs">
<el-radio label="1">单独所有</el-radio>
<el-radio label="2">共同共有</el-radio>
<el-radio label="3">按份所有</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="5" v-show="ruleForm.gyfs == '2'">
<el-form-item :class="flag ? 'marginBot0' : ''" label="是否分别持证:">
<el-radio-group v-model="ruleForm.sffbcz">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="5" v-show="ruleForm.gyfs == '2'">
<el-form-item :class="flag ? 'marginBot0' : ''" label="持证人:">
<el-select v-model="ruleForm.czr" placeholder="持证人">
<el-option v-for="item in czrOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<InformationTable :tableData="ruleForm.qlrxx" :gyfs="ruleForm.gyfs" />
<div class="slxx_title">登记原因</div>
<el-row :gutter="10">
<el-col>
<el-form-item :class="flag ? 'marginBot0' : ''" label="登记原因:" prop="djyy">
<el-input class="textArea" type="textarea" v-model="ruleForm.djyy"></el-input>
<el-form-item
:class="flag ? 'marginBot0' : ''"
label="登记情形:"
prop="djqx"
>
<el-input disabled v-model="ruleForm.slywxx.djqxmc"></el-input>
</el-form-item>
</el-col>
</el-row>
<div class="slxx_title title-block">抵押不动产情况</div>
</div>
<el-row class="btn" v-if="!$route.query.viewtype">
<el-form-item :class="flag ? 'marginBot0' : ''">
......@@ -192,17 +72,15 @@ import InformationTable from "@/views/workflow/components/InformationTable";
import { Init } from "@/api/diyaqFlow.js";
import { mapGetters } from "vuex";
export default {
async created () {
async created() {
this.propsParam = this.$attrs;
var formdata = new FormData();
formdata.append("bsmSldy", this.propsParam.bsmSldy);
formdata.append("bsmSlsq", this.$route.query.bsmSlsq);
formdata.append("djlx", this.propsParam.djlx);
Init(formdata).then((res) => {
if (res.code === 200 && res.result) {
this.ruleForm = {
...res.result,
...res.result.qlxxdatas,
}
this.ruleForm = res.result;
}
});
},
......@@ -210,42 +88,12 @@ export default {
computed: {
...mapGetters(["dictData", "flag"]),
},
data () {
data() {
return {
disabled: true,
tdytOption: [],
czrOptions: [],
ruleForm: {
ywh: "",
slry: "",
slsj: "",
qllx: "",
djlx: "",
djqx: "",
// 宗地代码
zddm: "",
bdcdyh: "",
qlxzmc: "",
qlrxx: [],
// 自然幢号
zrzh: "",
// 户不动产单元号
hbdcdyh: '',
djzt: '',
// 图幅丘幢号
tfqzh: '',
zl: '',
// 房屋用途
fwyt: '',
fwxz: '',
fwjg: '',
// 权利人信息
gyfs: "1",
// 是否分别持证
sffbcz: "",
// 持证人
czr: "",
djyy: ''
slywxx:{}
},
//传递参数
propsParam: {},
......@@ -253,9 +101,9 @@ export default {
};
},
methods: {
list (bsmSldy) {
list(bsmSldy) {
Init({
bsmSldy: bsmSldy.split(',')
bsmSldy: bsmSldy.split(","),
}).then((res) => {
if (res.code === 200 && res.result) {
this.ruleForm = {
......@@ -267,7 +115,7 @@ export default {
}
});
},
onSubmit () {
onSubmit() {
fristReg(this.ruleForm).then((res) => {
if (res.code === 200 && res.result) {
console.log(res);
......@@ -280,77 +128,5 @@ export default {
</script>
<style scoped lang='scss'>
@import "~@/styles/public.scss";
/deep/.el-form {
display: flex;
flex-direction: column;
height: calc(100vh - 130px);
background-color: aqua;
}
/deep/.el-form-item__label {
padding: 0;
}
/deep/.el-radio {
margin-right: 10px;
}
/deep/.el-select {
width: 100%;
}
/deep/.el-form-item {
margin-bottom: 8px;
}
.marginBot0 {
margin-bottom: 0 !important;
}
.slxx {
box-sizing: border-box;
}
.slxx_con {
flex: 1;
height: 100%;
background-color: #ffffff;
overflow-y: auto;
padding-right: 3px;
overflow-x: hidden;
}
.submit_btn {
height: 50px;
}
.slxx_title {
border-bottom: 1px solid $borderColor;
padding-left: 10px;
padding-bottom: 5px;
margin-bottom: 10px;
margin-top: 5px;
font-size: 16px;
font-weight: 500;
color: #4a4a4a;
}
.btn {
text-align: center;
padding-top: 10px;
height: 36px;
background-color: #ffffff;
padding: 5px 0;
}
.textArea {
/deep/.el-textarea__inner {
min-height: 90px !important;
}
}
/deep/.el-form-item__label {
padding-bottom: 0px;
}
@import "~@/styles/slxx/slxx.scss";
</style>
......
......@@ -124,6 +124,10 @@ export default {
});
},
handleSelectionChange (val) {
val.forEach((item, index) => {
item.bsmSsql = item.bsmQlxx
item.ybdcqzsh = item.bdcqzh
})
this.bdcdysz = val
}
},
......
......@@ -30,7 +30,7 @@ export function queueDjywmc (djywbm) {
case "A07400":
vm = "jsydsyq200";
break;
case "A07100"://抵押权首次
case "A37100"://抵押权首次
vm = "bdcqlMain";
break;
case "A37200"://抵押权转移
......
......@@ -30,7 +30,7 @@
flex-direction: column;
.item-list {
max-height: calc(100vh - 380px);
max-height: calc(100vh - 360px);
overflow-y: auto;
}
......@@ -146,6 +146,7 @@
flex: 1;
width: 100%;
padding: 3px;
}
p:nth-child(2) {
......@@ -189,7 +190,7 @@
cursor: pointer;
margin-bottom: 15px;
p {
p:nth-child(2) {
@include flex-center;
}
......@@ -202,6 +203,9 @@
flex: 1;
width: 100%;
padding: 3px;
padding-left: 30px;
display: flex;
align-items: center;
}
p:nth-child(2) {
......
......@@ -31,36 +31,20 @@
</ul>
</div>
<div class="right-situation el-card box-card is-always-shadow">
<div v-if="n >= 0">
<div class="right-title">常办业务列表</div>
<ul>
<li v-for="(item, index) in ywList" :key="index" @click="handleSelectYw(item, ywList)"
:class="item.cselect ? 'cactive' : ''">
<p>
{{ item.djywmc }}<br>
{{ item.nodename }}
</p>
<div class="right-title">{{ obj[n] }}</div>
<ul>
<li v-for="(item, index) in itemList" :key="index" @click="handleSelectYw(item, ywList)"
:class="item.cselect ? 'cactive' : ''">
<p>
{{ item.djywmc }}<br>
{{ item.nodename }}
</p>
<p v-if="item.sffqlc == 1" class="active" @click.stop="handleCollection(item)">
<i class="el-icon-star-off active"></i>
</p>
</li>
</ul>
</div>
<div v-if="n == -1">
<div class="right-title">登记情形</div>
<ul class="registration">
<li v-for="(item, index) in djqxList" @click="handleSelectYw(item, djqxList)"
:class="item.cselect ? 'cactive' : ''" :key="index">
<p>
{{ item.nodename }}
</p>
<p :class="item.userCollect == 1 ? 'active' : ''" @click.stop="handleCollection(item)">
<i class="el-icon-star-off" :class="item.userCollect == 1 ? 'active' : ''"></i>
</p>
</li>
</ul>
</div>
<p :class="item.userCollect == 1 ? 'active' : ''" @click.stop="handleCollection(item)">
<i class="el-icon-star-off" :class="item.userCollect == 1 ? 'active' : ''"></i>
</p>
</li>
</ul>
</div>
<div class="submit-button">
<el-button type="primary" :disabled="btnDisabled" @click="bthSelectClick">选择不动产</el-button>
......@@ -70,7 +54,6 @@
</div>
</template>
<script>
import Cookies from 'js-cookie'
import fqsqDialog from "./slectBdc.vue"
import { getCollectBiz, getleftMenu, getNextNode, addCollectBiz, deleteCollectBiz } from "@/api/ywbl"
export default {
......@@ -81,10 +64,17 @@ export default {
leftList: [
'常办业务', '一并申请', '登记簿补录',
],
// 左侧列表
list: [],
djlxList: [],
itemList: [],
ywList: [],
djqxList: [],
obj: {
'0': '常办业务列表',
'-1': '登记情形'
},
isDialog: false,
btnDisabled: true,
djywbm: '',
......@@ -104,12 +94,16 @@ export default {
},
methods: {
getDataList () {
getCollectBiz({ 'target': '#ywsq' }).then(res => {
getCollectBiz().then(res => {
let { result } = res
this.ywList = result
this.ywList.forEach(item => {
this.$set(item, 'cselect', false)
item.userCollect = 1
})
if (this.n == 0) {
this.itemList = this.ywList
}
})
getleftMenu().then(res => {
let { result } = res
......@@ -118,9 +112,14 @@ export default {
},
handleleftTitle (index) {
this.n = index
let obj = {
'0': this.ywList
}
this.itemList = obj[this.n]
this.list.forEach(item => {
if (item.check) item.check = false
})
},
// 业务-登记情形选择
handleSelectYw (item, list) {
......@@ -135,7 +134,6 @@ export default {
this.btnDisabled = false
this.bsmSqyw = item.bsmSqyw
this.djywbm = item.djywbm
console.log(this.djywbm, 'this.djywbm');
}
},
handleList (list, obj) {
......@@ -147,11 +145,11 @@ export default {
this.$set(obj, 'check', true)
this.getNextNode(obj.bsmSqyw)
this.djqxList = []
this.djlxList = []
this.itemList = []
},
// 获取下个节点类型
getNextNode (bsmSqyw, type) {
getNextNode(bsmSqyw, { 'target': '#ywsq' }).then(res => {
getNextNode (bsmSqyw, type = true) {
getNextNode(bsmSqyw).then(res => {
if (res.result.djqx) this.djqxList = res.result.djqx
if (res.result.djlx) this.djlxList = res.result.djlx
if (type) {
......@@ -162,6 +160,7 @@ export default {
this.$set(item, 'cselect', false)
})
}
this.itemList = this.djqxList
})
},
handleCollection (item) {
......@@ -178,15 +177,26 @@ export default {
}
})
} else {
deleteCollectBiz(item.bsmSqyw).then(res => {
if (res.code == 200) {
item.userCollect = '2'
that.$message({
message: '取消收藏成功!',
type: 'success'
})
that.getDataList()
}
this.$confirm('此操作将取消收藏, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteCollectBiz(item.bsmSqyw).then(res => {
if (res.code == 200) {
item.userCollect = '2'
that.$message({
message: '取消收藏成功!',
type: 'success'
})
that.getDataList()
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消收藏'
})
})
}
},
......@@ -198,11 +208,11 @@ export default {
},
// 登记类型
handleDjlxSelect (item) {
this.btnDisabled = true
this.djlxList.forEach(item => {
if (item.cselect) item.cselect = false
item.cselect = false
})
this.$set(item, 'cselect', true)
this.btnDisabled = true
item.cselect = true
if (item.sffqlc == '1') {
this.btnDisabled = false
this.bsmSqyw = item.bsmSqyw
......@@ -225,4 +235,12 @@ export default {
<style scoped lang='scss'>
@import "~@/styles/mixin.scss";
@import './ywsq.scss';
/deep/.el-collapse-item__content {
padding-bottom: 0;
}
/deep/.el-collapse-item__wrap {
border-bottom: none;
}
</style>
\ No newline at end of file
......
......@@ -6,17 +6,26 @@
<el-row>
<el-col :span="5">
<el-form-item label="分发编号">
<el-input v-model="approveForm.batchno" @clear="queryClick()" clearable placeholder="分发编号"></el-input>
<el-input v-model="ruleForm.batchno" @clear="queryClick()" clearable placeholder="分发编号"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="领取时间">
<el-date-picker v-model="ruleForm.ffsj" type="daterange" range-separator="至" start-placeholder="开始日期"
end-placeholder="结束日期" @change="timeChange()" value-format="yyyy-MM-dd HH:mm:ss" clearable>
<el-col :span="5">
<el-form-item label="开始日期">
<el-date-picker v-model="ruleForm.ffkssj" :picker-options="pickerOptionsStart" type="date"
placeholder="开始日期" value-format="yyyy-MM-dd" clearable>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="结束时间">
<el-date-picker v-model="ruleForm.ffjssj" :picker-options="pickerOptionsEnd" type="date"
placeholder="结束日期" value-format="yyyy-MM-dd" clearable>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="11" class="btnColRight">
<el-col :span="9" class="btnColRight">
<el-form-item>
<el-button type="primary" native-type="submit" @click="queryClick()">查询</el-button>
<el-button type="primary" @click="openDialog()">新增</el-button>
......@@ -55,10 +64,6 @@ export default {
isDialog: false,
value: '',
ruleForm: {
batchno: "",
ffsj: ""
},
approveForm: {
batchno: '',
ffkssj: '',
ffjssj: ''
......@@ -68,6 +73,26 @@ export default {
columns: datas.columns(),
data: [],
},
// 开始结束日期限制
pickerOptionsStart: {
disabledDate: (time) => {
if (this.ruleForm.ffjssj) {
return (
time.getTime() >= new Date(this.ruleForm.ffjssj).getTime()
);
}
}
},
// 结束日期限制
pickerOptionsEnd: {
disabledDate: (time) => {
if (this.ruleForm.ffkssj) {
return (
time.getTime() <= new Date(this.ruleForm.ffkssj).getTime()
);
}
}
}
}
},
methods: {
......@@ -76,7 +101,7 @@ export default {
},
// 列表渲染接口
fetchData () {
getZsglffList({ ...this.approveForm, ...this.pageData }).then(res => {
getZsglffList({ ...this.ruleForm, ...this.pageData }).then(res => {
if (res.code === 200) {
let { total, records } = res.result
this.tableData.total = total;
......@@ -100,17 +125,6 @@ export default {
queryClick () {
this.fetchData()
},
//修改筛选时间
timeChange () {
if (this.ruleForm.ffsj != null) {
this.approveForm.ffkssj = this.ruleForm.ffsj[0];
this.approveForm.ffjssj = this.ruleForm.ffsj[1];
} else {
this.approveForm.ffkssj = ''
this.approveForm.ffjssj = ''
}
this.fetchData()
},
//确定证书分发
confrimVerify (item) {
this.$confirm('是否确定分发', '提示', {
......@@ -161,4 +175,8 @@ export default {
</script>
<style scoped lang="scss">
@import "~@/styles/public.scss";
/deep/.el-icon-date {
display: none;
}
</style>
......
......@@ -9,14 +9,21 @@
<el-input v-model="ruleForm.batchno" @clear="queryClick()" clearable placeholder="入库编号"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="人库时间">
<el-date-picker v-model="ruleForm.rksj" type="datetimerange" range-separator="至" start-placeholder="开始日期"
end-placeholder="结束日期" @change="timeChange()" value-format="yyyy-MM-dd HH:mm:ss" clearable>
<el-col :span="5">
<el-form-item label="开始日期">
<el-date-picker v-model="ruleForm.rkkssj" :picker-options="pickerOptionsStart" type="date"
placeholder="开始日期" value-format="yyyy-MM-dd" clearable>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="结束时间">
<el-date-picker v-model="ruleForm.rkjssj" :picker-options="pickerOptionsEnd" type="date"
placeholder="结束日期" value-format="yyyy-MM-dd" clearable>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="11" class="btnColRight">
<el-col :span="9" class="btnColRight">
<el-form-item>
<el-button type="primary" native-type="submit" @click="queryClick()">查询</el-button>
<el-button type="primary" @click="openDialog()">新增</el-button>
......@@ -54,7 +61,6 @@ export default {
isDialog: false,
viewDialog: false,
ruleForm: {
rksj: '',
batchno: '',
rkkssj: '',
rkjssj: ''
......@@ -64,7 +70,27 @@ export default {
columns: datas.columns(),
data: [],
},
};
// 开始结束日期限制
pickerOptionsStart: {
disabledDate: (time) => {
if (this.ruleForm.rkjssj) {
return (
time.getTime() >= new Date(this.ruleForm.rkjssj).getTime()
);
}
}
},
// 结束日期限制
pickerOptionsEnd: {
disabledDate: (time) => {
if (this.ruleForm.rkkssj) {
return (
time.getTime() <= new Date(this.ruleForm.rkkssj).getTime()
);
}
}
}
}
},
methods: {
// 列表渲染接口
......@@ -92,17 +118,6 @@ export default {
queryClick () {
this.fetchData()
},
//修改筛选时间
timeChange (val) {
if (this.ruleForm.rksj != null) {
this.ruleForm.rkkssj = this.ruleForm.rksj[0];
this.ruleForm.rkjssj = this.ruleForm.rksj[1];
} else {
this.ruleForm.rkkssj = ''
this.ruleForm.rkjssj = ''
}
this.fetchData()
},
//删除证书入库数据
delZsrk (item) {
this.$confirm('确定要删除吗, 是否继续?', '提示', {
......@@ -153,4 +168,8 @@ export default {
</script>
<style scoped lang="scss">
@import "~@/styles/public.scss";
/deep/.el-icon-date {
display: none;
}
</style>
......
import filter from '@/utils/filter.js'
let vm = null
const sendThis = (_this) => {
vm = _this
}
......@@ -60,7 +59,6 @@ class data extends filter {
},
{
label: '操作',
width: '200',
align: 'center',
fixed: 'right',
render: (h, scope) => {
......