@@ -54,7 +54,7 @@
:page.sync="listQuery.pageNo"
:limit.sync="listQuery.pageSize"
:total="listQuery.total"
- @pagination="getDataList" />
+ @pagination="getNavDataList" />
parseTime(val, '{y}年{m}月{d}日'),
},
{
prop: 'originArea',
label: '原片下片面积',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'deepArea',
label: '深加工下片面积',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'originPrice',
label: '原片成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'deepPrice',
label: '深加工成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'price',
label: '总成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
];
const tableProps2 = [
@@ -244,19 +248,12 @@ export default {
},
methods: {
buttonClick(val) {
- if (val.statisticType === 2) {
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年第{w}周');
- }else{
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年{m}月{d}日');
- }
this.formConfig2[0].startPlaceholder = '开始时间';
this.formConfig2[0].endPlaceholder = '结束时间';
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.bindObjectId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
@@ -274,7 +271,7 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.bindObjectId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
@@ -334,12 +331,19 @@ export default {
this.otherMethods(val);
}
},
+ getNavDataList(){
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
+ },
/** 导出按钮操作 */
handleExport() {
let exportURL, title;
if (this.activeName === 'his') {
exportURL = exportCostSumExcel;
- title = '总成本统计-按日期';
+ title = '总成本统计';
} else {
exportURL = exportRawStatisticsRealtimeExcel;
title = '总成本统计-按规格';
diff --git a/src/views/cost/deep/24hourCostMonitor/index.vue b/src/views/cost/deep/24hourCostMonitor/index.vue
index 5210f68b..6fbb11fc 100644
--- a/src/views/cost/deep/24hourCostMonitor/index.vue
+++ b/src/views/cost/deep/24hourCostMonitor/index.vue
@@ -77,7 +77,7 @@ export default {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.name = val.name||null;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
@@ -90,7 +90,7 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.name = val.name;
this.listQuery.recTime = val.searchTime;
this.handleExport();
diff --git a/src/views/cost/deep/costDeepEnergy/index.vue b/src/views/cost/deep/costDeepEnergy/index.vue
index 50bed04b..3813a81e 100644
--- a/src/views/cost/deep/costDeepEnergy/index.vue
+++ b/src/views/cost/deep/costDeepEnergy/index.vue
@@ -54,7 +54,7 @@
:page.sync="listQuery.pageNo"
:limit.sync="listQuery.pageSize"
:total="listQuery.total"
- @pagination="getDataList" />
+ @pagination="getNavDataList" />
parseTime(val, '{y}年{m}月{d}日'),
+ },
+ {
+ prop: 'remark',
+ label: '备注',
},
{
prop: 'energyTypeName',
label: '能源类型',
},
- {
- prop: 'bindObjectName',
- label: '监控对象',
- filter: (val) => (val != null ? val : '--'),
- },
- {
- prop: 'meterName',
- label: '抄表名',
- filter: (val) => (val != null ? val : '--'),
- },
+ // {
+ // prop: 'bindObjectName',
+ // label: '监控对象',
+ // filter: (val) => (val != null ? val : '--'),
+ // },
+ // {
+ // prop: 'meterName',
+ // label: '抄表名',
+ // filter: (val) => (val != null ? val : '--'),
+ // },
{
prop: 'quantity',
label: '累计使用量',
@@ -115,20 +118,24 @@ const tableProps = [
},
];
const tableProps2 = [
+ {
+ prop: 'remark',
+ label: '备注',
+ },
{
prop: 'energyTypeName',
label: '能源类型',
},
- {
- prop: 'bindObjectName',
- label: '监控对象',
- filter: (val) => (val != null ? val : '--'),
- },
- {
- prop: 'meter',
- label: '抄表名',
- filter: (val) => (val != null ? val : '--'),
- },
+ // {
+ // prop: 'bindObjectName',
+ // label: '监控对象',
+ // filter: (val) => (val != null ? val : '--'),
+ // },
+ // {
+ // prop: 'meter',
+ // label: '抄表名',
+ // filter: (val) => (val != null ? val : '--'),
+ // },
{
prop: 'quantity',
label: '累计使用量',
@@ -207,13 +214,16 @@ export default {
{
type: 'datePicker',
label: '时间范围',
- dateType: 'daterange',
- format: 'yyyy-MM-dd',
+ dateType: 'datetimerange',
+ format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
+ defaultTime: ['08:30:00', '08:30:00'],
param: 'searchTime',
+ width: 350,
+ clearable: false,
},
{
type: 'button',
@@ -262,26 +272,18 @@ export default {
},
methods: {
buttonClick(val) {
- if (val.statisticType === 2) {
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年第{w}周');
- }else{
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年{m}月{d}日');
- }
- this.formConfig2[1].startPlaceholder = '开始时间';
- this.formConfig2[1].endPlaceholder = '结束时间';
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.energyTypeId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
- this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
- : null;
+ this.listQuery.endTime = val.searchTime ? val.searchTime[1] : null;
if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
this.getDataList();
} else {
this.getDataList2();
@@ -292,13 +294,18 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.energyTypeId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
+ if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
+ }
this.handleExport();
break;
default:
@@ -320,15 +327,26 @@ export default {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
- this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 00:00:00';
- this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 23:59:59';
- this.formConfig2[1].startPlaceholder = parseTime(start).substr(0, 10);
- this.formConfig2[1].endPlaceholder = parseTime(end).substr(0, 10);
+ this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 08:30:00';
+ this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 08:30:00';
+ this.$nextTick(() => {
+ this.$refs.searchBarForm2.formInline.searchTime = [
+ this.listQuery.startTime,
+ this.listQuery.endTime,
+ ];
+ });
this.listQuery.name = null;
this.listQuery.pageNo = 1;
this.getDataList2();
}
},
+ getNavDataList(){
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
+ },
// 获取数据2列表
getDataList2() {
if (this.listQuery.startTime) {
diff --git a/src/views/cost/deep/costDeepOthercostHis/index.vue b/src/views/cost/deep/costDeepOthercostHis/index.vue
index 74f25aa6..875f1e8d 100644
--- a/src/views/cost/deep/costDeepOthercostHis/index.vue
+++ b/src/views/cost/deep/costDeepOthercostHis/index.vue
@@ -54,7 +54,7 @@
:page.sync="listQuery.pageNo"
:limit.sync="listQuery.pageSize"
:total="listQuery.total"
- @pagination="getDataList" />
+ @pagination="getNavDataList" />
parseTime(val, '{y}年{m}月{d}日'),
+ },
+ {
+ prop: 'remark',
+ label: '备注',
},
{
prop: 'otherCostName',
@@ -99,9 +102,14 @@ const tableProps = [
prop: 'price',
label: '总价(元)',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
];
const tableProps2 = [
+ // {
+ // prop: 'remark',
+ // label: '备注',
+ // },
{
prop: 'otherCostName',
label: '成本名称',
@@ -110,6 +118,7 @@ const tableProps2 = [
prop: 'price',
label: '总价(元)',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
];
export default {
@@ -182,13 +191,16 @@ export default {
{
type: 'datePicker',
label: '时间范围',
- dateType: 'daterange',
- format: 'yyyy-MM-dd',
+ dateType: 'datetimerange',
+ format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
+ defaultTime: ['08:30:00', '08:30:00'],
param: 'searchTime',
+ width: 350,
+ clearable: false,
},
{
type: 'button',
@@ -237,26 +249,20 @@ export default {
},
methods: {
buttonClick(val) {
- if (val.statisticType === 2) {
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年第{w}周');
- }else{
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年{m}月{d}日');
- }
- this.formConfig2[1].startPlaceholder = '开始时间';
- this.formConfig2[1].endPlaceholder = '结束时间';
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.name = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
this.getDataList();
} else {
this.getDataList2();
@@ -267,13 +273,18 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.name = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
+ if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
+ }
this.handleExport();
break;
default:
@@ -295,15 +306,26 @@ export default {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
- this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 00:00:00';
- this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 23:59:59';
- this.formConfig2[1].startPlaceholder = parseTime(start).substr(0, 10);
- this.formConfig2[1].endPlaceholder = parseTime(end).substr(0, 10);
+ this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 08:30:00';
+ this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 08:30:00';
+ this.$nextTick(() => {
+ this.$refs.searchBarForm2.formInline.searchTime = [
+ this.listQuery.startTime,
+ this.listQuery.endTime,
+ ];
+ });
this.listQuery.name = null;
this.listQuery.pageNo = 1;
this.getDataList2();
}
},
+ getNavDataList(){
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
+ },
// 获取数据2列表
getDataList2() {
getRawOthercostSunPage(this.listQuery).then((response) => {
diff --git a/src/views/cost/deep/costDeepOthercostLog/index.vue b/src/views/cost/deep/costDeepOthercostLog/index.vue
index 0e41f5f7..d8b76d4c 100644
--- a/src/views/cost/deep/costDeepOthercostLog/index.vue
+++ b/src/views/cost/deep/costDeepOthercostLog/index.vue
@@ -65,6 +65,7 @@ const tableProps = [
prop: 'price',
label: '成本金额',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'remark',
@@ -161,7 +162,7 @@ export default {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.name = val.name||null;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
@@ -174,7 +175,7 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.name = val.name||null;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
diff --git a/src/views/cost/deep/costDeepOthercostRule/typeRule.vue b/src/views/cost/deep/costDeepOthercostRule/typeRule.vue
index d5ebce60..fc26ca89 100644
--- a/src/views/cost/deep/costDeepOthercostRule/typeRule.vue
+++ b/src/views/cost/deep/costDeepOthercostRule/typeRule.vue
@@ -10,9 +10,9 @@
{{
injectData.type == 1
- ? `每天等价,${injectData.price}元`
+ ? `每天等价,${Number(injectData.price)}元`
: injectData.type == 2
- ? `总价${injectData.price}元,年折旧率${injectData.ratio}%,折旧年限${injectData.timeLimit}年`
+ ? `总价${Number(injectData.price)}元,年折旧率${injectData.ratio}%,折旧年限${injectData.timeLimit}年`
: '-'
}}
diff --git a/src/views/cost/deep/costDeepRatioHis/index.vue b/src/views/cost/deep/costDeepRatioHis/index.vue
index 3dd40db1..3d5157c1 100644
--- a/src/views/cost/deep/costDeepRatioHis/index.vue
+++ b/src/views/cost/deep/costDeepRatioHis/index.vue
@@ -52,7 +52,7 @@
:page.sync="listQuery.pageNo"
:limit.sync="listQuery.pageSize"
:total="listQuery.total"
- @pagination="getDataList" />
+ @pagination="getNavDataList" />
parseTime(val, '{y}年{m}月{d}日'),
+ },
+ {
+ prop: 'remark',
+ label: '备注',
},
{
prop: 'productionLineName',
@@ -100,22 +103,27 @@ const tableProps = [
{
prop: 'innum',
label: '上片数量',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'outnum',
label: '下片数量',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'ratio',
label: '良品率',
- filter: (val) => (val ? val * 100 + '%' : '-'),
+ filter: (val) => (val ? Number(val * 100).toFixed(2) + '%' : '-'),
},
];
const tableProps2 = [
{
- prop: 'recTime',
+ prop: 'time',
label: '日期',
- filter: (val) => parseTime(val, '{y}年{m}月{d}日'),
+ },
+ {
+ prop: 'remark',
+ label: '备注',
},
{
prop: 'productionLineName',
@@ -128,15 +136,17 @@ const tableProps2 = [
{
prop: 'innum',
label: '进片数量',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'outnum',
label: '出片数量',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'ratio',
label: '良品率',
- filter: (val) => (val ? val * 100 + '%' : '-'),
+ filter: (val) => (val ? Number(val * 100).toFixed(2) + '%' : '-'),
},
];
export default {
@@ -170,13 +180,15 @@ export default {
{
type: 'datePicker',
label: '时间范围',
- dateType: 'daterange',
- format: 'yyyy-MM-dd',
+ dateType: 'datetimerange',
+ format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
+ defaultTime: ['08:30:00', '08:30:00'],
param: 'searchTime',
+ width: 350,
},
{
type: 'button',
@@ -225,22 +237,15 @@ export default {
},
methods: {
buttonClick(val) {
- if (val.statisticType === 2) {
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年第{w}周');
- }else{
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年{m}月{d}日');
- }
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.productionLineId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
if (this.activeName === 'his') {
this.getDataList();
@@ -253,12 +258,12 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.productionLineId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
this.handleExport();
break;
@@ -309,10 +314,20 @@ export default {
this.otherMethods(val);
}
},
+ getNavDataList(){
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
+ },
successSubmit() {
this.handleCancel();
- const val = this.activeName === 'his' ? '产线良品率' : 'now';
- this.currentMenu(val);
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
},
/** 导出按钮操作 */
handleExport() {
diff --git a/src/views/cost/deep/costStatistics/index.vue b/src/views/cost/deep/costStatistics/index.vue
index 319db503..5ae2769e 100644
--- a/src/views/cost/deep/costStatistics/index.vue
+++ b/src/views/cost/deep/costStatistics/index.vue
@@ -54,7 +54,7 @@
:page.sync="listQuery.pageNo"
:limit.sync="listQuery.pageSize"
:total="listQuery.total"
- @pagination="getDataList" />
+ @pagination="getNavDataList" />
parseTime(val, '{y}年{m}月{d}日'),
+ },
+ {
+ prop: 'remark',
+ label: '备注',
},
{
prop: 'bindObjectName',
@@ -102,33 +105,42 @@ const tableProps = [
{
prop: 'inCount',
label: '上片数量',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'outCount',
label: '下片数量',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'ratio',
label: '良品率',
- filter: (val) => (val ? val * 100 + '%' : '-'),
+ filter: (val) => (val ? Number(val * 100).toFixed(2) + '%' : '-'),
},
{
prop: 'costSum',
label: '深加工成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'costPiece',
label: '单片成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'costArea',
label: '每平米成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
];
const tableProps2 = [
+ {
+ prop: 'remark',
+ label: '备注',
+ },
{
prop: 'bindObjectName',
label: '产线',
@@ -140,30 +152,35 @@ const tableProps2 = [
{
prop: 'inCount',
label: '上片数量',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'outCount',
label: '下片数量',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'ratio',
label: '良品率',
- filter: (val) => (val ? val * 100 + '%' : '-'),
+ filter: (val) => (val ? Number(val * 100).toFixed(2) + '%' : '-'),
},
{
prop: 'costSum',
label: '深加工成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'costPiece',
label: '单片成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'costArea',
label: '每平米成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
];
export default {
@@ -225,13 +242,16 @@ export default {
{
type: 'datePicker',
label: '时间范围',
- dateType: 'daterange',
- format: 'yyyy-MM-dd',
+ dateType: 'datetimerange',
+ format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
+ defaultTime: ['08:30:00', '08:30:00'],
param: 'searchTime',
+ width: 350,
+ clearable: false,
},
{
type: 'select',
@@ -288,26 +308,20 @@ export default {
},
methods: {
buttonClick(val) {
- if (val.statisticType === 2) {
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年第{w}周');
- }else{
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年{m}月{d}日');
- }
- this.formConfig2[0].startPlaceholder = '开始时间';
- this.formConfig2[0].endPlaceholder = '结束时间';
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.bindObjectId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
this.getDataList();
} else {
this.getDataList2();
@@ -318,13 +332,18 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.bindObjectId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
+ if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
+ }
this.handleExport();
break;
default:
@@ -346,15 +365,26 @@ export default {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
- this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 00:00:00';
- this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 23:59:59';
- this.formConfig2[0].startPlaceholder = parseTime(start).substr(0, 10);
- this.formConfig2[0].endPlaceholder = parseTime(end).substr(0, 10);
+ this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 08:30:00';
+ this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 08:30:00';
+ this.$nextTick(() => {
+ this.$refs.searchBarForm2.formInline.searchTime = [
+ this.listQuery.startTime,
+ this.listQuery.endTime,
+ ];
+ });
this.listQuery.name = null;
this.listQuery.pageNo = 1;
this.getDataList2();
}
},
+ getNavDataList(){
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
+ },
// 获取数据2列表
getDataList2() {
if (this.listQuery.startTime) {
diff --git a/src/views/cost/index.vue b/src/views/cost/index.vue
new file mode 100644
index 00000000..35aae8d9
--- /dev/null
+++ b/src/views/cost/index.vue
@@ -0,0 +1,423 @@
+
+
+
+
+
+
+
+ 生产总成本
+
+
+
+ {{ homeData.priceS }}万元
+ 总计成本
+
+
+ {{ homeData.matPriceS }}万元
+ 原料成本
+
+
+ {{ homeData.energyPriceS }}万元
+ 能源成本
+
+
+ {{ homeData.otherPriceS }}万元
+ 其他成本
+
+
+
+ {{ homeData.areaPriceS }}元
+ 综合每平米成本
+
+
+
+
+
+
+ 原片成本
+
+
+
+ {{ homeData.priceO }}万元
+ 原片总成本
+
+
+ {{ homeData.matPriceO }}万元
+ 原料成本
+
+
+ {{ homeData.energyPriceO }}万元
+ 能源成本
+
+
+ {{ homeData.otherPriceO }}万元
+ 其他成本
+
+
+ {{ homeData.ratioO }}
+ 原片良品率/%
+
+
+ {{ homeData.areaPriceO }}元
+ 原片每平米成本
+
+
+
+
+
+
+ 深加工成本
+
+
+
+ {{ homeData.priceD }}万元
+ 深加工总成本
+
+
+ {{ homeData.energyPriceD }}万元
+ 能源成本
+
+
+ {{ homeData.otherPriceD }}万元
+ 其他成本
+
+
+ {{ homeData.ratioD }}
+ 深加工良品率/%
+
+
+ {{ homeData.areaPriceD }}元
+ 深加工每平米成本
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ © 中建材智能自动化研究院有限公司
+
+
+
+
+
+
+
+
diff --git a/src/views/cost/indexDetail.vue b/src/views/cost/indexDetail.vue
new file mode 100644
index 00000000..3d469aaa
--- /dev/null
+++ b/src/views/cost/indexDetail.vue
@@ -0,0 +1,199 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/views/cost/raw/24hourCostMonitor/index.vue b/src/views/cost/raw/24hourCostMonitor/index.vue
index 5210f68b..6fbb11fc 100644
--- a/src/views/cost/raw/24hourCostMonitor/index.vue
+++ b/src/views/cost/raw/24hourCostMonitor/index.vue
@@ -77,7 +77,7 @@ export default {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.name = val.name||null;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
@@ -90,7 +90,7 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.name = val.name;
this.listQuery.recTime = val.searchTime;
this.handleExport();
diff --git a/src/views/cost/raw/costEnergy/index.vue b/src/views/cost/raw/costEnergy/index.vue
index cba5f4f8..0177d17e 100644
--- a/src/views/cost/raw/costEnergy/index.vue
+++ b/src/views/cost/raw/costEnergy/index.vue
@@ -54,7 +54,7 @@
:page.sync="listQuery.pageNo"
:limit.sync="listQuery.pageSize"
:total="listQuery.total"
- @pagination="getDataList" />
+ @pagination="getNavDataList" />
parseTime(val, '{y}年{m}月{d}日'),
+ },
+ {
+ prop: 'remark',
+ label: '备注',
},
{
prop: 'energyTypeName',
label: '能源类型',
},
- {
- prop: 'bindObjectName',
- label: '监控对象',
- filter: (val) => (val != null ? val : '--'),
- },
- {
- prop: 'meterName',
- label: '抄表名',
- filter: (val) => (val != null ? val : '--'),
- },
+ // {
+ // prop: 'bindObjectName',
+ // label: '监控对象',
+ // filter: (val) => (val != null ? val : '--'),
+ // },
+ // {
+ // prop: 'meterName',
+ // label: '抄表名',
+ // filter: (val) => (val != null ? val : '--'),
+ // },
{
prop: 'quantity',
label: '累计使用量',
@@ -115,20 +118,24 @@ const tableProps = [
},
];
const tableProps2 = [
+ {
+ prop: 'remark',
+ label: '备注',
+ },
{
prop: 'energyTypeName',
label: '能源类型',
},
- {
- prop: 'bindObjectName',
- label: '监控对象',
- filter: (val) => (val != null ? val : '--'),
- },
- {
- prop: 'meter',
- label: '抄表名',
- filter: (val) => (val != null ? val : '--'),
- },
+ // {
+ // prop: 'bindObjectName',
+ // label: '监控对象',
+ // filter: (val) => (val != null ? val : '--'),
+ // },
+ // {
+ // prop: 'meter',
+ // label: '抄表名',
+ // filter: (val) => (val != null ? val : '--'),
+ // },
{
prop: 'quantity',
label: '累计使用量',
@@ -207,13 +214,16 @@ export default {
{
type: 'datePicker',
label: '时间范围',
- dateType: 'daterange',
- format: 'yyyy-MM-dd',
+ dateType: 'datetimerange',
+ format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
+ defaultTime: ['08:30:00', '08:30:00'],
param: 'searchTime',
+ width: 350,
+ clearable: false,
},
{
type: 'button',
@@ -237,10 +247,11 @@ export default {
activeName: 'his',
tableProps,
tableProps2,
- tableBtn: [{
- type: 'edit',
- btnName: '编辑',
- }
+ tableBtn: [
+ {
+ type: 'edit',
+ btnName: '编辑',
+ },
].filter((v) => v),
tableData: [],
tableData2: [],
@@ -262,26 +273,18 @@ export default {
},
methods: {
buttonClick(val) {
- if (val.statisticType === 2) {
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年第{w}周');
- }else{
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年{m}月{d}日');
- }
- this.formConfig2[1].startPlaceholder = '开始时间';
- this.formConfig2[1].endPlaceholder = '结束时间';
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.energyTypeId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
- this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
- : null;
+ this.listQuery.endTime = val.searchTime ? val.searchTime[1] : null;
if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
this.getDataList();
} else {
this.getDataList2();
@@ -292,13 +295,16 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.energyTypeId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
- this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
- : null;
+ this.listQuery.endTime = val.searchTime ? val.searchTime[1] : null;
+ if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
+ }
this.handleExport();
break;
default:
@@ -320,15 +326,26 @@ export default {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
- this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 00:00:00';
- this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 23:59:59';
- this.formConfig2[1].startPlaceholder = parseTime(start).substr(0, 10);
- this.formConfig2[1].endPlaceholder = parseTime(end).substr(0, 10);
+ this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 08:30:00';
+ this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 08:30:00';
+ this.$nextTick(() => {
+ this.$refs.searchBarForm2.formInline.searchTime = [
+ this.listQuery.startTime,
+ this.listQuery.endTime,
+ ];
+ });
this.listQuery.name = null;
this.listQuery.pageNo = 1;
this.getDataList2();
}
},
+ getNavDataList() {
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
+ },
// 获取数据2列表
getDataList2() {
if (this.listQuery.startTime) {
diff --git a/src/views/cost/raw/costMaterial/add-or-updata.vue b/src/views/cost/raw/costMaterial/add-or-updata.vue
index f9e04897..2f7afc71 100644
--- a/src/views/cost/raw/costMaterial/add-or-updata.vue
+++ b/src/views/cost/raw/costMaterial/add-or-updata.vue
@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
- * @LastEditTime: 2024-09-05 15:34:28
+ * @LastEditTime: 2024-12-27 09:18:43
* @Description:
-->
@@ -22,7 +22,7 @@
placeholder="请输入原料名称" />
-
+
+ @pagination="getNavDataList" />
parseTime(val, '{y}年{m}月{d}日'),
+ },
+ {
+ prop: 'remark',
+ label: '备注',
},
{
prop: 'materialName',
@@ -97,13 +100,13 @@ const tableProps = [
},
{
prop: 'quantity',
- label: '累计使用量(吨)',
- },
- {
- prop: 'matPrice',
- label: '单价(元/吨)',
- align: 'right',
+ label: '累计使用量(千克)',
},
+ // {
+ // prop: 'matPrice',
+ // label: '单价(元/千克)',
+ // align: 'right',
+ // },
{
prop: 'price',
label: '总价(元)',
@@ -111,6 +114,10 @@ const tableProps = [
},
];
const tableProps2 = [
+ // {
+ // prop: 'remark',
+ // label: '备注',
+ // },
{
prop: 'materialName',
label: '原料名称',
@@ -123,13 +130,13 @@ const tableProps2 = [
},
{
prop: 'quantity',
- label: '累计使用量(吨)',
- },
- {
- prop: 'materialPrice',
- label: '单价(元/吨)',
- align: 'right',
+ label: '累计使用量(千克)',
},
+ // {
+ // prop: 'materialPrice',
+ // label: '单价(元/千克)',
+ // align: 'right',
+ // },
{
prop: 'price',
label: '总价(元)',
@@ -204,13 +211,16 @@ export default {
{
type: 'datePicker',
label: '时间范围',
- dateType: 'daterange',
- format: 'yyyy-MM-dd',
+ dateType: 'datetimerange',
+ format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
+ defaultTime: ['08:30:00', '08:30:00'],
param: 'searchTime',
+ width: 350,
+ clearable: false,
},
{
type: 'button',
@@ -234,10 +244,11 @@ export default {
activeName: 'his',
tableProps,
tableProps2,
- tableBtn: [{
- type: 'edit',
- btnName: '编辑',
- }
+ tableBtn: [
+ {
+ type: 'edit',
+ btnName: '编辑',
+ },
].filter((v) => v),
tableData: [],
tableData2: [],
@@ -259,26 +270,20 @@ export default {
},
methods: {
buttonClick(val) {
- if (val.statisticType === 2) {
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年第{w}周');
- }else{
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年{m}月{d}日');
- }
- this.formConfig2[1].startPlaceholder = '开始时间';
- this.formConfig2[1].endPlaceholder = '结束时间';
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.materialId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
this.getDataList();
} else {
this.getDataList2();
@@ -289,13 +294,18 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.materialId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
+ if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
+ }
this.handleExport();
break;
default:
@@ -317,15 +327,26 @@ export default {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
- this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 00:00:00';
- this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 23:59:59';
- this.formConfig2[1].startPlaceholder = parseTime(start).substr(0, 10);
- this.formConfig2[1].endPlaceholder = parseTime(end).substr(0, 10);
+ this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 08:30:00';
+ this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 08:30:00';
+ this.$nextTick(() => {
+ this.$refs.searchBarForm2.formInline.searchTime = [
+ this.listQuery.startTime,
+ this.listQuery.endTime,
+ ];
+ });
this.listQuery.name = null;
this.listQuery.pageNo = 1;
this.getDataList2();
}
},
+ getNavDataList() {
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
+ },
// 获取数据2列表
getDataList2() {
if (this.listQuery.startTime) {
diff --git a/src/views/cost/raw/costOriginRatioHis/add-or-updata.vue b/src/views/cost/raw/costOriginRatioHis/add-or-updata.vue
index 325cdad5..b9bfe514 100644
--- a/src/views/cost/raw/costOriginRatioHis/add-or-updata.vue
+++ b/src/views/cost/raw/costOriginRatioHis/add-or-updata.vue
@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
- * @LastEditTime: 2024-09-05 15:33:16
+ * @LastEditTime: 2025-06-13 10:59:54
* @Description:
-->
@@ -15,7 +15,9 @@
label-width="80px">
-
+
-
+
-
+
-
+
-
+
- (m²)
+ clearable />
+ {{ activeName === 'his' ? '(m²)' : '片' }}
-
+
- (m²)
+ clearable />
+ {{ activeName === 'his' ? '(m²)' : '片' }}
@@ -129,10 +133,12 @@ export default {
recTime: undefined,
},
dataRule: {},
+ activeName: 'his',
};
},
methods: {
- init(val, statisticType) {
+ init(val, statisticType, activeName) {
+ this.activeName = activeName;
this.visible = true;
this.$nextTick(() => {
this.$refs['dataForm'].resetFields();
@@ -148,17 +154,22 @@ export default {
if (!valid) {
return false;
}
- const udata = {
+ let udata = {
id: this.dataForm.id,
statisticType: this.dataForm.statisticType,
- modifyThick: this.dataForm.thick,
- modifySpeed: this.dataForm.speed,
- modifyWidth: this.dataForm.width,
modifyInArea: this.dataForm.inArea,
modifyOutArea: this.dataForm.outArea,
modifyRatio:
this.dataForm.ratio >= 0 ? this.dataForm.ratio / 100 : '',
};
+ if (this.activeName === 'his') {
+ udata = {
+ ...udata,
+ modifyThick: this.dataForm.thick,
+ modifySpeed: this.dataForm.speed,
+ modifyWidth: this.dataForm.width,
+ };
+ }
// 修改的提交
this.urlOptions.updateURL(udata).then((response) => {
this.$modal.msgSuccess('修改成功');
diff --git a/src/views/cost/raw/costOriginRatioHis/index.vue b/src/views/cost/raw/costOriginRatioHis/index.vue
index b1db84fa..faefd721 100644
--- a/src/views/cost/raw/costOriginRatioHis/index.vue
+++ b/src/views/cost/raw/costOriginRatioHis/index.vue
@@ -1,42 +1,71 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ 产线良品率
+
+
+ 工段良品率
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -44,16 +73,27 @@
import AddOrUpdate from './add-or-updata';
import basicPage from '@/mixins/basic-page';
import { getLinePage } from '@/api/base/productionLine';
-import { getcostOriginRatioHisPage,exportcostOriginRatioHisExcel } from '@/api/cost/costOriginRatioHis';
+import {
+ getcostOriginRatioHisPage,
+ getcostOriginWSRatioHisPage,
+ exportcostOriginWSRatioHisExcel,
+ exportcostOriginRatioHisExcel,
+} from '@/api/cost/costOriginRatioHis';
import { parseTime } from '@/filter/code-filter';
import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
+import ButtonNav from '@/components/ButtonNav';
+
+
const tableProps = [
{
- prop: 'recTime',
+ prop: 'time',
label: '日期',
- filter: (val) => parseTime(val, '{y}年{m}月{d}日'),
width:130,
},
+ {
+ prop: 'remark',
+ label: '备注',
+ },
{
prop: 'bindObjectName',
label: '产线',
@@ -62,27 +102,67 @@ const tableProps = [
{
prop: 'thick',
label: '厚度',
+ filter: (val) => (val != null ? Number(val).toFixed(1) : '-'),
},
{
prop: 'speed',
label: '在线速度',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'width',
label: '掰边宽度',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'inArea',
label: '拉引量/m²',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'outArea',
label: '下片面积/m²',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'ratio',
label: '良品率',
- filter: (val) => (val ? val * 100 + '%' : '-'),
+ filter: (val) => (val ? Number(val * 100).toFixed(2) + '%' : '-'),
+ },
+];
+const tableProps2 = [
+ {
+ prop: 'time',
+ label: '日期',
+ width:130,
+ },
+ {
+ prop: 'remark',
+ label: '备注',
+ },
+ {
+ prop: 'bindObjectName',
+ label: '工段',
+ width:145,
+ },
+ {
+ prop: 'spec',
+ label: '规格',
+ },
+ {
+ prop: 'inArea',
+ label: '进片数',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
+ },
+ {
+ prop: 'outArea',
+ label: '出片数',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
+ },
+ {
+ prop: 'ratio',
+ label: '良品率',
+ filter: (val) => (val ? Number(val * 100).toFixed(2) + '%' : '-'),
},
];
export default {
@@ -116,13 +196,15 @@ export default {
{
type: 'datePicker',
label: '时间范围',
- dateType: 'daterange',
- format: 'yyyy-MM-dd',
+ dateType: 'datetimerange',
+ format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
+ defaultTime: ['08:30:00', '08:30:00'],
param: 'searchTime',
+ width: 350,
},
{
type: 'button',
@@ -143,23 +225,27 @@ export default {
listQuery: {
statisticType: 1,
},
+ activeName: 'his',
tableProps,
+ tableProps2,
tableBtn: [{
type: 'edit',
btnName: '编辑',
}
].filter((v) => v),
tableData: [],
+ tableData2: [],
};
},
components: {
AddOrUpdate,
+ ButtonNav,
},
created() {
const params ={
pageNo: 1,
pageSize: 100,
- pdType: 1
+ pdType: 0
}
getLinePage(params).then((response) => {
this.formConfig[1].selectOptions = response.data.list;
@@ -167,36 +253,33 @@ export default {
},
methods: {
buttonClick(val) {
- if (val.statisticType === 2) {
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年第{w}周');
- }else{
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年{m}月{d}日');
- }
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.bindObjectId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
- this.getDataList();
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
break;
case 'add':
this.addOrUpdateHandle();
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.bindObjectId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
this.handleExport();
break;
@@ -204,23 +287,74 @@ export default {
console.log(val);
}
},
+ currentMenu(val) {
+ this.activeName = val === '产线良品率' ? 'his' : 'now';
+ if (this.activeName === 'his') {
+ this.$refs.searchBarForm.resetForm();
+ this.listQuery.bindObjectId = null;
+ this.listQuery.startTime = null;
+ this.listQuery.endTime = null;
+ this.listQuery.statisticType = 1;
+ this.listQuery.pageNo = 1;
+ this.getDataList();
+ } else {
+ this.$refs.searchBarForm.resetForm();
+ this.listQuery.bindObjectId = null;
+ this.listQuery.startTime = null;
+ this.listQuery.endTime = null;
+ this.listQuery.statisticType = 1;
+ this.listQuery.pageNo = 1;
+ this.getDataList2();
+ }
+ },
+ // 获取数据2列表
+ getDataList2() {
+ getcostOriginWSRatioHisPage(this.listQuery).then((response) => {
+ this.tableData2 = response.data.list;
+ this.listQuery.total = response.data.total;
+ });
+ },
//tableBtn点击
handleClick(val) {
if (val.type === 'edit') {
this.addOrUpdateVisible = true;
this.addOrEditTitle = '编辑';
this.$nextTick(() => {
- this.$refs.addOrUpdate.init(val.data, this.listQuery.statisticType);
+ this.$refs.addOrUpdate.init(
+ val.data,
+ this.listQuery.statisticType,
+ this.activeName
+ );
});
} else {
this.otherMethods(val);
}
},
+ getNavDataList(){
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
+ },
+ successSubmit() {
+ this.handleCancel();
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
+ },
/** 导出按钮操作 */
handleExport() {
let exportURL, title;
+ if (this.activeName === 'his') {
exportURL = exportcostOriginRatioHisExcel;
- title = '原片成本-原片良品率';
+ title = '原片-产线良品率';
+ } else {
+ exportURL = exportcostOriginWSRatioHisExcel;
+ title = '原片-工段良品率';
+ }
// 处理查询参数
let params = { ...this.listQuery };
params.pageNo = undefined;
diff --git a/src/views/cost/raw/costOthercostHis/index.vue b/src/views/cost/raw/costOthercostHis/index.vue
index 1c6c8b29..8a3cff11 100644
--- a/src/views/cost/raw/costOthercostHis/index.vue
+++ b/src/views/cost/raw/costOthercostHis/index.vue
@@ -54,7 +54,7 @@
:page.sync="listQuery.pageNo"
:limit.sync="listQuery.pageSize"
:total="listQuery.total"
- @pagination="getDataList" />
+ @pagination="getNavDataList" />
parseTime(val, '{y}年{m}月{d}日'),
+ },
+ {
+ prop: 'remark',
+ label: '备注',
},
{
prop: 'otherCostName',
@@ -102,6 +105,10 @@ const tableProps = [
},
];
const tableProps2 = [
+ // {
+ // prop: 'remark',
+ // label: '备注',
+ // },
{
prop: 'otherCostName',
label: '成本名称',
@@ -182,13 +189,16 @@ export default {
{
type: 'datePicker',
label: '时间范围',
- dateType: 'daterange',
- format: 'yyyy-MM-dd',
+ dateType: 'datetimerange',
+ format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
+ defaultTime: ['08:30:00', '08:30:00'],
param: 'searchTime',
+ width: 350,
+ clearable: false,
},
{
type: 'button',
@@ -237,24 +247,20 @@ export default {
},
methods: {
buttonClick(val) {
- if (val.statisticType === 2) {
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年第{w}周');
- }else{
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年{m}月{d}日');
- }
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.name = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
this.getDataList();
} else {
this.getDataList2();
@@ -265,13 +271,18 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.name = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
+ if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
+ }
this.handleExport();
break;
default:
@@ -297,6 +308,13 @@ export default {
this.getDataList2();
}
},
+ getNavDataList(){
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
+ },
// 获取数据2列表
getDataList2() {
getRawOthercostSunPage(this.listQuery).then((response) => {
diff --git a/src/views/cost/raw/costOthercostLog/index.vue b/src/views/cost/raw/costOthercostLog/index.vue
index a15d2453..b34aae95 100644
--- a/src/views/cost/raw/costOthercostLog/index.vue
+++ b/src/views/cost/raw/costOthercostLog/index.vue
@@ -65,6 +65,7 @@ const tableProps = [
prop: 'price',
label: '成本金额',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'remark',
@@ -161,7 +162,7 @@ export default {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.name = val.name||null;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
@@ -174,7 +175,7 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.name = val.name||null;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
diff --git a/src/views/cost/raw/costOthercostRule/typeRule.vue b/src/views/cost/raw/costOthercostRule/typeRule.vue
index d5ebce60..1c7f8670 100644
--- a/src/views/cost/raw/costOthercostRule/typeRule.vue
+++ b/src/views/cost/raw/costOthercostRule/typeRule.vue
@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-12-05 13:45:59
* @LastEditors: zwq
- * @LastEditTime: 2024-04-15 17:12:03
+ * @LastEditTime: 2024-12-25 16:20:38
* @Description
-->
@@ -10,9 +10,9 @@
{{
injectData.type == 1
- ? `每天等价,${injectData.price}元`
+ ? `每天等价,${Number(injectData.price)}元`
: injectData.type == 2
- ? `总价${injectData.price}元,年折旧率${injectData.ratio}%,折旧年限${injectData.timeLimit}年`
+ ? `总价${Number(injectData.price)}元,年折旧率${injectData.ratio}%,折旧年限${injectData.timeLimit}年`
: '-'
}}
diff --git a/src/views/cost/raw/costStatistics/index.vue b/src/views/cost/raw/costStatistics/index.vue
index b5c5e36b..b416e1f5 100644
--- a/src/views/cost/raw/costStatistics/index.vue
+++ b/src/views/cost/raw/costStatistics/index.vue
@@ -54,7 +54,7 @@
:page.sync="listQuery.pageNo"
:limit.sync="listQuery.pageSize"
:total="listQuery.total"
- @pagination="getDataList" />
+ @pagination="getNavDataList" />
parseTime(val, '{y}年{m}月{d}日'),
+ },
+ {
+ prop: 'remark',
+ label: '备注',
},
{
prop: 'bindObjectName',
@@ -98,32 +101,41 @@ const tableProps = [
{
prop: 'thick',
label: '厚度',
+ filter: (val) => (val != null ? Number(val).toFixed(1) : '-'),
},
{
prop: 'inArea',
label: '拉引量/m²',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'outArea',
label: '下片面积/m²',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'ratio',
label: '良品率',
- filter: (val) => (val ? val * 100 + '%' : '-'),
+ filter: (val) => (val ? Number(val * 100).toFixed(2) + '%' : '-'),
},
{
prop: 'costSum',
label: '原片成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'costArea',
label: '每平米成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
];
const tableProps2 = [
+ {
+ prop: 'remark',
+ label: '备注',
+ },
{
prop: 'bindObjectName',
label: '产线',
@@ -135,34 +147,40 @@ const tableProps2 = [
{
prop: 'inArea',
label: '拉引量/m²',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'outArea',
label: '下片面积/m²',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'outCount',
label: '下片数量',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'ratio',
label: '良品率',
- filter: (val) => (val ? val * 100 + '%' : '-'),
+ filter: (val) => (val ? Number(val * 100).toFixed(2) + '%' : '-'),
},
{
prop: 'costSum',
label: '原片成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'costPiece',
label: '单片成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
{
prop: 'costArea',
label: '每平米成本/元',
align: 'right',
+ filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
},
];
export default {
@@ -224,13 +242,16 @@ export default {
{
type: 'datePicker',
label: '时间范围',
- dateType: 'daterange',
- format: 'yyyy-MM-dd',
+ dateType: 'datetimerange',
+ format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
+ defaultTime: ['08:30:00', '08:30:00'],
param: 'searchTime',
+ width: 350,
+ clearable: false,
},
{
type: 'select',
@@ -287,26 +308,20 @@ export default {
},
methods: {
buttonClick(val) {
- if (val.statisticType === 2) {
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年第{w}周');
- }else{
- this.tableProps[0].filter = (val) =>
- parseTime(val, '{y}年{m}月{d}日');
- }
- this.formConfig2[0].startPlaceholder = '开始时间';
- this.formConfig2[0].endPlaceholder = '结束时间';
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.bindObjectId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
this.getDataList();
} else {
this.getDataList2();
@@ -317,13 +332,18 @@ export default {
break;
case 'export':
this.listQuery.pageNo = 1;
- this.listQuery.pageSize = 10;
+ this.listQuery.pageSize = 20;
this.listQuery.bindObjectId = val.name || null;
this.listQuery.statisticType = val.statisticType || 1;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime
- ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ ? val.searchTime[1]
: null;
+ if (this.activeName === 'his') {
+ this.listQuery.endTime = val.searchTime
+ ? val.searchTime[1].substr(0, 10) + ' 23:59:59'
+ : null;
+ }
this.handleExport();
break;
default:
@@ -345,15 +365,26 @@ export default {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
- this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 00:00:00';
- this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 23:59:59';
- this.formConfig2[0].startPlaceholder = parseTime(start).substr(0, 10);
- this.formConfig2[0].endPlaceholder = parseTime(end).substr(0, 10);
+ this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 08:30:00';
+ this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 08:30:00';
+ this.$nextTick(() => {
+ this.$refs.searchBarForm2.formInline.searchTime = [
+ this.listQuery.startTime,
+ this.listQuery.endTime,
+ ];
+ });
this.listQuery.name = null;
this.listQuery.pageNo = 1;
this.getDataList2();
}
},
+ getNavDataList(){
+ if (this.activeName === 'his') {
+ this.getDataList();
+ } else {
+ this.getDataList2();
+ }
+ },
// 获取数据2列表
getDataList2() {
if (this.listQuery.startTime) {
diff --git a/src/views/group/Calendar/holidayLog.vue b/src/views/group/Calendar/holidayLog.vue
new file mode 100644
index 00000000..d29287f3
--- /dev/null
+++ b/src/views/group/Calendar/holidayLog.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+ {{ item.deptName + ' - ' + item.planName }}
+
+
+
+
+
+
+
diff --git a/src/views/group/Calendar/index.vue b/src/views/group/Calendar/index.vue
new file mode 100644
index 00000000..cd9dfa0d
--- /dev/null
+++ b/src/views/group/Calendar/index.vue
@@ -0,0 +1,612 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提示:排班日历仅展示当前选中部门的节假日设置,若休假日中仍有排班,则表示下级组织已通过自定义假期进行排班。
+
+
+ 组长:
+
+ {{ showTeamName?.leaderName || '-' }}
+
+ 组长电话:
+
+ {{ showTeamName?.leaderPhone || '-' }}
+
+
+
+
+
+ 跳转到今天
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ Number(data.day.split('-')[2]) }}
+ {{ getLunarDate(data.day) }}
+
+
+
+
+ {{
+ HolidayList[Number(data.day.split('-')[2]) - 1]
+ ?.isHoliday
+ ? '假'
+ : '班'
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ item.classesName +
+ ' | ' +
+ item.teamName +
+ ' | ' +
+ item.workTime
+ }}
+
+
+
+
+
+
+
+
+
+
+ {{ Number(data.day.split('-')[2]) }}
+
+ {{ getLunarDate(data.day) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/group/Schedule/add-group.vue b/src/views/group/Schedule/add-group.vue
index 09930d81..6051b2b2 100644
--- a/src/views/group/Schedule/add-group.vue
+++ b/src/views/group/Schedule/add-group.vue
@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2025-10-11 14:27:37
* @LastEditors: zwq
- * @LastEditTime: 2025-10-15 16:47:28
+ * @LastEditTime: 2025-11-14 22:00:10
* @Description:
-->
@@ -12,6 +12,9 @@
ref="searchBarForm"
@headBtnClick="buttonClick" />
diff --git a/src/views/group/Schedule/bind-line.vue b/src/views/group/Schedule/bind-line.vue
index 2dbdd8c9..af0e1aed 100644
--- a/src/views/group/Schedule/bind-line.vue
+++ b/src/views/group/Schedule/bind-line.vue
@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
- * @LastEditTime: 2025-10-16 16:37:40
+ * @LastEditTime: 2025-11-25 15:49:17
* @Description:
-->
@@ -13,10 +13,14 @@
:to_data="toData"
@add-btn="add"
@remove-btn="remove"
- pid="pid"
- :defaultProps="{ label: 'name' }"
+ pid="fid"
+ :node_key="'uniqueId'"
+ :defaultProps="{
+ label: 'name',
+ children: 'children',
+ }"
height="450px"
- style="padding-bottom:20px"
+ style="padding-bottom: 20px"
:mode="mode"
filter
openAll>
@@ -31,7 +35,6 @@ export default {
components: { treeTransfer },
data() {
return {
- groupId: undefined,
title: ['待选', '已选'],
mode: 'transfer',
fromData: [], //左边内容
@@ -39,30 +42,68 @@ export default {
};
},
methods: {
- init(id) {
+ init(val) {
+ this._pageIndex = val._pageIndex - 1;
this.fromData = [];
this.toData = [];
- this.groupId = id;
getGroupPlanTree().then((res) => {
- this.fromData = res.data;
- this.fromData.forEach((item) => {
+ res.data.forEach((item) => {
item.productionLineId = 0;
});
+ this.fromData = this.generateUniqueData(res.data);
+ this.$nextTick(() => {
+ this.toData = val.bindLineTree || [];
+ this.getFilterLeftData(this.fromData, this.toData); //编辑时组件有bug,左边相同数据不消失
+ });
});
},
+ generateUniqueData(data) {
+ return data.map((node) => this.processNode(node));
+ },
+ processNode(node) {
+ // 创建唯一ID:类型-原始ID
+ const uniqueId = node.type+'L'+node.id;
+ if (node.type > 0) {
+ node.fid = (node.type - 1)+'L'+node.pid;
+ }
+
+ return {
+ ...node,
+ uniqueId,
+ children: node.children
+ ? node.children.map((child) => this.processNode(child))
+ : [],
+ };
+ },
// 监听穿梭框组件添加
add(fromData, toData, obj) {
console.log('fromData:', fromData);
- console.log('toData:', toData,obj);
+ console.log('toData:', toData, obj);
},
// 监听穿梭框组件移除
remove(fromData, toData, obj) {
console.log('fromData:', fromData);
console.log('toData:', toData);
},
+ /** 消除组件左边与右边选中数据相同项 */
+ // 处理过滤数据
+ getFilterLeftData(data, selData) {
+ for (let i = data.length - 1; i >= 0; i--) {
+ for (let j = selData.length - 1; j >= 0; j--) {
+ if (data[i] && data[i].id === selData[j].id) {
+ // 当id相等可以删除的情况 即:没有子级可以删除;
+ if (!data[i].children || data[i].children.length == 0) {
+ data.splice(i, 1);
+ } else {
+ this.getFilterLeftData(data[i].children, selData[j].children);
+ }
+ }
+ }
+ }
+ },
// 表单提交
dataFormSubmit() {
- this.$emit('refreshTableData',this.toData);
+ this.$emit('refreshTableData', this._pageIndex, this.toData);
},
},
};
diff --git a/src/views/group/Schedule/detail.vue b/src/views/group/Schedule/detail.vue
new file mode 100644
index 00000000..201430c5
--- /dev/null
+++ b/src/views/group/Schedule/detail.vue
@@ -0,0 +1,206 @@
+
+
+
+
+
+ 计划编号:
+ {{ infoData.code }}
+
+
+ 计划状态:
+ {{ ['', '草稿', '已确认', '已作废'][infoData.status] }}
+
+
+ 计划名称:
+ {{ infoData.name }}
+
+
+ 部门:
+ {{ infoData.deptName }}
+
+
+ 开始时间:
+ {{ parseTime(infoData.startDay) }}
+
+
+ 结束时间:
+ {{ parseTime(infoData.endDay) }}
+
+
+ 周末休假方式:
+ {{ ['', '双休', '周六休', '周日休', '不休'][infoData.weekType] }}
+
+
+ 倒班方式:
+ {{ ['', '长白班', '两班倒', '三班倒'][infoData.shiftType] }}
+
+
+ 同班次连排:
+ {{ infoData.shiftSustainedNum }}日
+
+
+ 创建人:
+ {{ infoData.creatorName }}
+
+
+ 创建时间:
+ {{ parseTime(infoData.createTime) }}
+
+
+ 作废时间:
+ {{ parseTime(infoData.disableTime) }}
+
+
+ 备注:
+ {{ infoData.remark }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/group/Schedule/edit-class.vue b/src/views/group/Schedule/edit-class.vue
index 4eac6585..c7ae0bb1 100644
--- a/src/views/group/Schedule/edit-class.vue
+++ b/src/views/group/Schedule/edit-class.vue
@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
- * @LastEditTime: 2025-10-15 16:31:11
+ * @LastEditTime: 2025-11-04 14:08:47
* @Description:
-->
@@ -15,9 +15,10 @@
label-width="80px">
-
+
@@ -32,23 +33,36 @@
-
+
+ value-format="HH:mm:ss"
+ v-model="dataForm.startTime"
+ @change="timeFun('start')"
+ placeholder="选择时间">
-
+
+ value-format="HH:mm:ss"
+ v-model="dataForm.endTime"
+ @change="timeFun('end')"
+ placeholder="选择时间">
+
+
+
+
+
@@ -70,22 +84,24 @@ export default {
return {
dataForm: {
id: undefined,
- index: undefined,
+ sort: undefined,
name: undefined,
- startDay: undefined,
- endDay: undefined,
+ startTime: undefined,
+ endTime: undefined,
+ daySpan: 0,
+ code: 1,
remark: undefined,
},
_pageIndex: 1,
dataRule: {
- index: [{ required: true, message: '序号不能为空', trigger: 'blur' }],
+ sort: [{ required: true, message: '排序不能为空', trigger: 'blur' }],
name: [
{ required: true, message: '班次名称不能为空', trigger: 'blur' },
],
- startDay: [
+ startTime: [
{ required: true, message: '开始时间不能为空', trigger: 'change' },
],
- endDay: [
+ endTime: [
{ required: true, message: '结束时间不能为空', trigger: 'change' },
],
},
@@ -93,13 +109,31 @@ export default {
},
methods: {
init(val) {
- this._pageIndex = val._pageIndex-1;
- this.dataForm.index = val._pageIndex || 1;
+ this._pageIndex = val._pageIndex - 1;
+ this.dataForm.sort = val._pageIndex || 1;
this.dataForm.name = val.name || undefined;
- this.dataForm.startDay = val.startDay || undefined;
- this.dataForm.endDay = val.endDay || undefined;
+ this.dataForm.startTime = val.startTime || undefined;
+ this.dataForm.endTime = val.endTime || undefined;
this.dataForm.remark = val.remark || undefined;
+ this.dataForm.daySpan = val.daySpan || 0;
+ this.dataForm.code = val.code || 1;
},
+ timeFun(val) {
+ if (this.dataForm.startTime && this.dataForm.endTime) {
+ if (this.dataForm.startTime > this.dataForm.endTime) {
+ this.dataForm.daySpan = 1
+ } else if (this.dataForm.startTime < this.dataForm.endTime) {
+ this.dataForm.daySpan = 0
+ } else {
+ if (val === 'start') {
+ this.dataForm.startTime = ''
+ } else {
+ this.dataForm.endTime = ''
+ }
+ this.$modal.msgWarning('班次开始时间和结束时间不能相同')
+ }
+ }
+ },
// 表单提交
dataFormSubmit() {
this.$refs['dataForm'].validate((valid) => {
diff --git a/src/views/group/Schedule/index.vue b/src/views/group/Schedule/index.vue
index c51533e3..a1e28693 100644
--- a/src/views/group/Schedule/index.vue
+++ b/src/views/group/Schedule/index.vue
@@ -1,8 +1,8 @@
@@ -31,13 +31,17 @@
@@ -46,8 +50,12 @@
ref="deptSelect"
@DeptId="setDeptId">
-
-
+
+
查询
-
+
@@ -72,17 +83,31 @@
-
+
新增
+
+
+ 导出
+
+
@@ -112,7 +137,7 @@
@confirm="handleConfirm"
:before-close="handleCancel"
:destroy-on-close="true"
- append-to-body
+ append-to-body
width="60%">
+ @click="successSubmit">
保存草稿
+
+
+
+
+
+
+
+ 取消
+
+
+
+
+
+
@@ -165,8 +214,16 @@ import deptSelect from './../deptSelect.vue';
import basicPage from '@/mixins/basic-page';
import subSpan from './subSpan.vue';
import subStatus from './subStatus.vue';
+import detail from './detail.vue';
import { parseTime } from '@/filter/code-filter';
-import { getGroupPlanPage, deleteGroupPlan } from '@/api/group/Schedule';
+import {
+ getGroupPlanPage,
+ deleteGroupPlan,
+ copyPlan,
+ disablePlan,
+ updateScheduleLater,
+ exportExcel,
+} from '@/api/group/Schedule';
const tableProps = [
{
@@ -206,7 +263,7 @@ const tableProps = [
subcomponent: subSpan,
},
{
- prop: 'deptId',
+ prop: 'deptName',
label: '部门',
},
{
@@ -233,85 +290,97 @@ export default {
},
tableProps,
tableBtn: [
- {
- type: 'edit',
- btnName: '编辑',
- showParam: {
- type: '&',
- data: [
- {
- type: 'equal',
- name: 'status',
- value: 1,
+ this.$auth.hasPermi('base:group-scheduling-plan:update')
+ ? {
+ type: 'edit',
+ btnName: '编辑',
+ showParam: {
+ type: '&',
+ data: [
+ {
+ type: 'equal',
+ name: 'status',
+ value: 1,
+ },
+ ],
},
- ],
- },
- },
- {
- type: 'delete',
- btnName: '删除',
- showParam: {
- type: '&',
- data: [
- {
- type: 'equal',
- name: 'status',
- value: 1,
+ }
+ : undefined,
+ this.$auth.hasPermi('base:group-scheduling-plan:delete')
+ ? {
+ type: 'delete',
+ btnName: '删除',
+ showParam: {
+ type: '&',
+ data: [
+ {
+ type: 'equal',
+ name: 'status',
+ value: 1,
+ },
+ ],
},
- ],
- },
- },
- {
- type: 'detail',
- btnName: '查看',
- showParam: {
- type: '&',
- data: [
- {
- type: 'unequal',
- name: 'status',
- value: 1,
+ }
+ : undefined,
+ this.$auth.hasPermi('base:group-scheduling-plan:query')
+ ? {
+ type: 'detail',
+ btnName: '查看',
+ showParam: {
+ type: '&',
+ data: [
+ {
+ type: 'unequal',
+ name: 'status',
+ value: 1,
+ },
+ ],
},
- ],
- },
- },
- {
- type: 'cancel',
- btnName: '作废',
- showParam: {
- type: '&',
- data: [
- {
- type: 'equal',
- name: 'status',
- value: 2,
+ }
+ : undefined,
+ this.$auth.hasPermi('base:group-scheduling-plan:delete')
+ ? {
+ type: 'cancel',
+ btnName: '作废',
+ showParam: {
+ type: '&',
+ data: [
+ {
+ type: 'equal',
+ name: 'status',
+ value: 2,
+ },
+ ],
},
- ],
- },
- },
- {
- type: 'sync',
- btnName: '同步节假日',
- showParam: {
- type: '&',
- data: [
- {
- type: 'equal',
- name: 'status',
- value: 2,
+ }
+ : undefined,
+ this.$auth.hasPermi('base:group-holiday:update')
+ ? {
+ type: 'sync',
+ btnName: '同步节假日',
+ showParam: {
+ type: '&',
+ data: [
+ {
+ type: 'equal',
+ name: 'status',
+ value: 2,
+ },
+ {
+ type: 'equal',
+ name: 'updateFlag',
+ value: true,
+ },
+ ],
},
- {
- type: 'updateFlag',
- name: 'status',
- value: true,
- },
- ],
- },
- },
- {
- type: 'copy',
- btnName: '复制',
- },
+ }
+ : undefined,
+ this.$auth.hasPermi('base:group-scheduling-plan:create')
+ ? {
+ type: 'copy',
+ btnName: '复制',
+ }
+ : undefined,
].filter((v) => v),
tableData: [],
options: [
@@ -329,48 +398,52 @@ export default {
},
],
formInline: {
- code: '',
- name: '',
- startDay: '',
- endDay: '',
- deptId: '',
- status: '',
+ code: null,
+ name: null,
+ startDay: null,
+ endDay: null,
+ deptId: null,
+ status: null,
},
stepNum: 1, // 新增编辑时当前第几步
+ detailVisible: false,
+ // 导出遮罩层
+ exportLoading: false,
};
},
components: {
AddOrUpdate,
deptSelect,
+ detail,
},
created() {},
methods: {
buttonClick(val) {
switch (val.btnName) {
case 'search':
- const date1 = new Date(this.formInline.startDay).getTime();
- const date2 = new Date(this.formInline.endDay).getTime();
-
- if (date1 > date2) {
+ if (this.formInline.startDay > this.formInline.endDay) {
this.$message('开始时间不得晚于结束时间');
return;
}
this.listQuery = {
pageNo: 1,
- pageSize: 10,
+ pageSize: 20,
total: 1,
...this.formInline,
};
this.getDataList();
break;
case 'reset':
+ this.$refs.searchBarForm.resetFields();
this.formInline.name = null;
this.formInline.code = null;
this.formInline.deptId = null;
this.$refs.deptSelect.clear();
- this.formInline.leaderName = null;
+ this.formInline.status = null;
+ this.formInline.startDay = null;
+ this.formInline.endDay = null;
this.listQuery = {
- pageSize: 10,
+ pageSize: 20,
pageNo: 1,
total: 1,
};
@@ -396,10 +469,15 @@ export default {
setStepNum(val) {
this.stepNum = val;
},
- // dialog取消
- handleCancel() {
+ successSubmit() {
this.addOrUpdateVisible = false;
this.addOrEditTitle = '';
+ this.stepNum = 1;
+ this.getDataList();
+ },
+ // dialog取消
+ handleCancel() {
+ this.$refs.addOrUpdate.cancelStep();
},
handleConfirm(val) {
if (val == 'up') {
@@ -408,6 +486,81 @@ export default {
this.$refs.addOrUpdate.nextSubmit();
}
},
+ //tableBtn点击
+ handleClick(val) {
+ if (val.type === 'edit') {
+ this.addOrUpdateVisible = true;
+ this.addOrEditTitle = '编辑';
+ this.$nextTick(() => {
+ this.stepNum = 3;
+ this.$refs.addOrUpdate.init(val.data.id, true);
+ });
+ } else if (val.type === 'delete') {
+ this.deleteHandle(val.data.id, val.data.name, val.data._pageIndex);
+ } else if (val.type === 'detail') {
+ this.detailVisible = true;
+ this.$nextTick(() => {
+ this.$refs.detailRef.init(val.data.id);
+ });
+ } else if (val.type === 'cancel') {
+ disablePlan(val.data.id).then((res) => {
+ this.$modal.msgSuccess('作废成功');
+ this.getDataList();
+ });
+ } else if (val.type === 'sync') {
+ this.$confirm(
+ '当前节假日包含尚未同步的节假日变更,是否立即将上述节假日同步更新到排班计划?',
+ '同步节假日',
+ {
+ confirmButtonText: '确认同步',
+ cancelButtonText: '取消',
+ type: 'warning',
+ }
+ )
+ .then(() => {
+ updateScheduleLater({
+ planId: val.data.id,
+ logId: val.data.updateLogId,
+ }).then((res) => {
+ this.$modal.msgSuccess('同步节假日成功');
+ this.getDataList();
+ });
+ })
+ .catch((res) => {
+ this.getDataList();
+ this.$message({
+ type: 'info',
+ message: '已取消',
+ });
+ });
+ } else if (val.type === 'copy') {
+ copyPlan(val.data.id).then((res) => {
+ this.$modal.msgSuccess('复制成功');
+ this.getDataList();
+ });
+ }
+ },
+ detailCancel() {
+ this.detailVisible = false;
+ },
+ /** 导出按钮操作 */
+ handleExport() {
+ // 处理查询参数
+ let params = { ...this.formInline };
+ params.pageNo = undefined;
+ params.pageSize = undefined;
+ this.$modal
+ .confirm('是否确认导出所有数据项?')
+ .then(() => {
+ this.exportLoading = true;
+ return exportExcel(params);
+ })
+ .then((response) => {
+ this.$download.excel(response, '排班计划.xls');
+ this.exportLoading = false;
+ })
+ .catch(() => {});
+ },
},
};
@@ -449,21 +602,21 @@ export default {
margin: 4px 0;
}
body .el-dialog__header {
- font-size: 16px;
- color: rgba(0, 0, 0, 0.85);
- font-weight: 500;
- padding: 13px 24px;
- border-bottom: 1px solid #e9e9e9;
+ font-size: 16px;
+ color: rgba(0, 0, 0, 0.85);
+ font-weight: 500;
+ padding: 13px 24px;
+ border-bottom: 1px solid #e9e9e9;
}
-body .el-dialog__header .titleStyle::before{
- content: '';
- display: inline-block;
- width: 4px;
- height: 16px;
- background-color: #0B58FF;
- border-radius: 1px;
- margin-right: 8px;
- position: relative;
- top: 2px;
+body .el-dialog__header .titleStyle::before {
+ content: '';
+ display: inline-block;
+ width: 4px;
+ height: 16px;
+ background-color: #0b58ff;
+ border-radius: 1px;
+ margin-right: 8px;
+ position: relative;
+ top: 2px;
}
diff --git a/src/views/group/Schedule/propSpan.vue b/src/views/group/Schedule/propSpan.vue
new file mode 100644
index 00000000..518c779a
--- /dev/null
+++ b/src/views/group/Schedule/propSpan.vue
@@ -0,0 +1,36 @@
+
+
+
+
+ {{ injectData[injectData.prop] }}
+
+
+ {{ injectData[injectData.prop] }}
+
+
+
+
+
diff --git a/src/views/group/Schedule/propfirstSpan.vue b/src/views/group/Schedule/propfirstSpan.vue
new file mode 100644
index 00000000..c47f1488
--- /dev/null
+++ b/src/views/group/Schedule/propfirstSpan.vue
@@ -0,0 +1,33 @@
+
+
+
+
+ {{ injectData.name.split('/')[0] }}
+
+
+ {{ injectData.name.split('/')[1] }}
+
+
+
+
+
diff --git a/src/views/group/Schedule/sortSet.vue b/src/views/group/Schedule/sortSet.vue
new file mode 100644
index 00000000..d02391e5
--- /dev/null
+++ b/src/views/group/Schedule/sortSet.vue
@@ -0,0 +1,44 @@
+
+
+
+ ↑
+ ↓
+
+
+
+
diff --git a/src/views/group/Schedule/subSpan.vue b/src/views/group/Schedule/subSpan.vue
index f25b681c..599bf7ff 100644
--- a/src/views/group/Schedule/subSpan.vue
+++ b/src/views/group/Schedule/subSpan.vue
@@ -1,9 +1,16 @@
+
{{
- injectData.shiftSustainedNum +
- (injectDatashiftSustainedType
- ? ['', '日', '周', '月', '季'][injectDatashiftSustainedType]
+ (injectData.shiftSustainedNum?injectData.shiftSustainedNum:'') +
+ (injectData.shiftSustainedType
+ ? ['', '日', '周', '月', '季'][injectData.shiftSustainedType]
: '')
}}
diff --git a/src/views/group/deptSelect.vue b/src/views/group/deptSelect.vue
index d6da9744..0095cfa2 100644
--- a/src/views/group/deptSelect.vue
+++ b/src/views/group/deptSelect.vue
@@ -48,7 +48,6 @@ export default {
this.deptId = id;
},
clear() {
- console.log(this.$refs.treeselect);
this.$refs.treeselect.clear();
},
// 格式化部门的下拉框
diff --git a/src/views/group/groupSetting/add-or-updata.vue b/src/views/group/groupSetting/add-or-updata.vue
index 03bc639f..49aa240d 100644
--- a/src/views/group/groupSetting/add-or-updata.vue
+++ b/src/views/group/groupSetting/add-or-updata.vue
@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
- * @LastEditTime: 2025-10-13 15:44:18
+ * @LastEditTime: 2025-11-27 14:49:34
* @Description:
-->
@@ -25,24 +25,28 @@
-
+
{});
},
- setDataForm(){
- this.$refs.deptSelect.setID(this.dataForm.deptId)
- },
+ setDataForm() {
+ this.$refs.deptSelect.setID(this.dataForm.deptId);
+ this.nameDisable = false;
+ updateIsProduction(this.dataForm.id).then(({ data }) => {
+ if (data) {
+ this.$notify({
+ title: '警告',
+ message: '当前班组仍参与排班计划或正在执行工单。班组名称不能修改',
+ type: 'warning',
+ });
+ this.nameDisable = true;
+ }
+ });
+ },
+ setIsProduction() {
+ // 修改的提交
+ if (this.dataForm.id && this.nameDisable) {
+ this.$confirm(
+ '当前班组仍参与排班计划或正在执行工单。
修改 是否是生产班组 不会自动更新排班内容,可能导致排班信息与班组属性不一致,请注意核查!
是否确认修改是否是生产班组?',
+ '修改是否是生产班组',
+ {
+ dangerouslyUseHTMLString: true,
+ confirmButtonText: '确认修改',
+ cancelButtonText: '取消',
+ type: 'warning',
+ }
+ )
+ .then(() => {})
+ .catch((res) => {
+ this.$message({
+ type: 'info',
+ message: '已取消',
+ });
+ this.dataForm.isProduction = !this.dataForm.isProduction;
+ });
+ }
+ },
setLeaderName(val) {
this.leaderArr.map((item) => {
if (val === item.id) {
@@ -182,33 +235,33 @@ export default {
}
});
},
- // 表单提交
- dataFormSubmit() {
- this.$refs["dataForm"].validate((valid) => {
- if (!valid) {
- return false;
- }
- if(!this.dataForm.deptId){
- this.$message('部门不能为空');
- return
- }
- // 修改的提交
- if (this.dataForm.id) {
- this.urlOptions.updateURL(this.dataForm).then(response => {
- this.$modal.msgSuccess("修改成功");
- this.visible = false;
- this.$emit("refreshDataList");
- });
- return;
- }
- // 添加的提交
- this.urlOptions.createURL(this.dataForm).then(response => {
- this.$modal.msgSuccess("新增成功");
- this.visible = false;
- this.$emit("refreshDataList");
- });
- });
- },
+ // 表单提交
+ dataFormSubmit() {
+ this.$refs['dataForm'].validate((valid) => {
+ if (!valid) {
+ return false;
+ }
+ if (!this.dataForm.deptId) {
+ this.$message('部门不能为空');
+ return;
+ }
+ // 修改的提交
+ if (this.dataForm.id) {
+ this.urlOptions.updateURL(this.dataForm).then((response) => {
+ this.$modal.msgSuccess('修改成功');
+ this.visible = false;
+ this.$emit('refreshDataList');
+ });
+ return;
+ }
+ // 添加的提交
+ this.urlOptions.createURL(this.dataForm).then((response) => {
+ this.$modal.msgSuccess('新增成功');
+ this.visible = false;
+ this.$emit('refreshDataList');
+ });
+ });
+ },
},
};
diff --git a/src/views/group/groupSetting/changeStatus.vue b/src/views/group/groupSetting/changeStatus.vue
index b9744b78..eb598f51 100644
--- a/src/views/group/groupSetting/changeStatus.vue
+++ b/src/views/group/groupSetting/changeStatus.vue
@@ -1,14 +1,21 @@
+
diff --git a/src/views/group/holidaySetting/add-or-updata.vue b/src/views/group/holidaySetting/add-or-updata.vue
index 6b680b81..2339a38d 100644
--- a/src/views/group/holidaySetting/add-or-updata.vue
+++ b/src/views/group/holidaySetting/add-or-updata.vue
@@ -2,104 +2,199 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
- * @LastEditTime: 2025-10-19 00:09:11
+ * @LastEditTime: 2025-11-27 14:06:11
* @Description:
-->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 继承
+ 自定义
+
+
+
+
+
+
+
+ 确认删除该节假日吗?
+
+ 该节假日已被排班计划使用,建议确认是否同步更新排班计划。
+
+ 此操作不可恢复,请确认是否继续
+
+
+
+
+
+
diff --git a/src/views/group/holidaySetting/components/index.js b/src/views/group/holidaySetting/components/index.js
new file mode 100644
index 00000000..64e1fbbe
--- /dev/null
+++ b/src/views/group/holidaySetting/components/index.js
@@ -0,0 +1,13 @@
+import jDatePicker from './JDatePicker.vue' // 导入组件
+const jLunarDatePicker = {
+ install(Vue, options) {
+ Vue.component(jDatePicker.name, jDatePicker) // vuePayKeyboard.name 组件的name属性
+ // 类似通过 this.$xxx 方式调用插件的 其实只是挂载到原型上而已
+ // Vue.prototype.$xxx // 最终可以在任何地方通过 this.$xxx 调用
+ // 虽然没有明确规定用$开头 但是大家都默认遵守这个规定
+ }
+}
+if (typeof window !== 'undefined' && window.Vue) {
+ window.Vue.use(jLunarDatePicker);
+}
+export default jLunarDatePicker // 导出..
diff --git a/src/views/group/holidaySetting/components/jDatePicker.js b/src/views/group/holidaySetting/components/jDatePicker.js
new file mode 100644
index 00000000..e4434896
--- /dev/null
+++ b/src/views/group/holidaySetting/components/jDatePicker.js
@@ -0,0 +1,626 @@
+/**
+ * @1900-2100区间内的公历、农历互转
+ * @charset UTF-8
+ * @公历转农历:calendar.solar2lunar(1987,11,01); //[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,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,//1930-1939
+ 0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,//1940-1949
+ 0x06ca0,0x0b550,0x15355,0x04da0,0x0a5b0,0x14573,0x052b0,0x0a9a8,0x0e950,0x06aa0,//1950-1959
+ 0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,//1960-1969
+ 0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b6a0,0x195a6,//1970-1979
+ 0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,//1980-1989
+ 0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,//1990-1999
+ 0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,//2000-2009
+ 0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,//2010-2019
+ 0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,//2020-2029
+ 0x05aa0,0x076a3,0x096d0,0x04afb,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,//2030-2039
+ 0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0,//2040-2049
+ /**Add By JJonline@JJonline.Cn**/
+ 0x14b63,0x09370,0x049f8,0x04970,0x064b0,0x168a6,0x0ea50, 0x06b20,0x1a6c4,0x0aae0,//2050-2059
+ 0x0a2e0,0x0d2e3,0x0c960,0x0d557,0x0d4a0,0x0da50,0x05d55,0x056a0,0x0a6d0,0x055d4,//2060-2069
+ 0x052d0,0x0a9b8,0x0a950,0x0b4a0,0x0b6a6,0x0ad50,0x055a0,0x0aba4,0x0a5b0,0x052b0,//2070-2079
+ 0x0b273,0x06930,0x07337,0x06aa0,0x0ad50,0x14b55,0x04b60,0x0a570,0x054e4,0x0d160,//2080-2089
+ 0x0e968,0x0d520,0x0daa0,0x16aa6,0x056d0,0x04ae0,0x0a9d4,0x0a2d0,0x0d150,0x0f252,//2090-2099
+ 0x0d520],//2100
+
+ /**
+ * 公历每个月份的天数普通表
+ * @Array Of Property
+ * @return Number
+ */
+ solarMonth:[31,28,31,30,31,30,31,31,30,31,30,31],
+
+ /**
+ * 天干地支之天干速查表
+ * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
+ * @return Cn string
+ */
+ Gan:["\u7532","\u4e59","\u4e19","\u4e01","\u620a","\u5df1","\u5e9a","\u8f9b","\u58ec","\u7678"],
+
+ /**
+ * 天干地支之地支速查表
+ * @Array Of Property
+ * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
+ * @return Cn string
+ */
+ Zhi:["\u5b50","\u4e11","\u5bc5","\u536f","\u8fb0","\u5df3","\u5348","\u672a","\u7533","\u9149","\u620c","\u4ea5"],
+
+ /**
+ * 天干地支之地支速查表<=>生肖
+ * @Array Of Property
+ * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
+ * @return Cn string
+ */
+ Animals:["\u9f20","\u725b","\u864e","\u5154","\u9f99","\u86c7","\u9a6c","\u7f8a","\u7334","\u9e21","\u72d7","\u732a"],
+
+ /**
+ * 24节气速查表
+ * @Array Of Property
+ * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
+ * @return Cn string
+ */
+ solarTerm:["\u5c0f\u5bd2","\u5927\u5bd2","\u7acb\u6625","\u96e8\u6c34","\u60ca\u86f0","\u6625\u5206","\u6e05\u660e","\u8c37\u96e8","\u7acb\u590f","\u5c0f\u6ee1","\u8292\u79cd","\u590f\u81f3","\u5c0f\u6691","\u5927\u6691","\u7acb\u79cb","\u5904\u6691","\u767d\u9732","\u79cb\u5206","\u5bd2\u9732","\u971c\u964d","\u7acb\u51ac","\u5c0f\u96ea","\u5927\u96ea","\u51ac\u81f3"],
+
+ /**
+ * 1900-2100各年的24节气日期速查表
+ * @Array Of Property
+ * @return 0x string For splice
+ */
+ sTermInfo:['9778397bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e','97bcf97c3598082c95f8c965cc920f',
+ '97bd0b06bdb0722c965ce1cfcc920f','b027097bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e',
+ '97bcf97c359801ec95f8c965cc920f','97bd0b06bdb0722c965ce1cfcc920f','b027097bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e','97bcf97c359801ec95f8c965cc920f','97bd0b06bdb0722c965ce1cfcc920f',
+ 'b027097bd097c36b0b6fc9274c91aa','9778397bd19801ec9210c965cc920e','97b6b97bd19801ec95f8c965cc920f',
+ '97bd09801d98082c95f8e1cfcc920f','97bd097bd097c36b0b6fc9210c8dc2','9778397bd197c36c9210c9274c91aa',
+ '97b6b97bd19801ec95f8c965cc920e','97bd09801d98082c95f8e1cfcc920f','97bd097bd097c36b0b6fc9210c8dc2',
+ '9778397bd097c36c9210c9274c91aa','97b6b97bd19801ec95f8c965cc920e','97bcf97c3598082c95f8e1cfcc920f',
+ '97bd097bd097c36b0b6fc9210c8dc2','9778397bd097c36c9210c9274c91aa','97b6b97bd19801ec9210c965cc920e',
+ '97bcf97c3598082c95f8c965cc920f','97bd097bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e','97bcf97c3598082c95f8c965cc920f','97bd097bd097c35b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e','97bcf97c359801ec95f8c965cc920f',
+ '97bd097bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e',
+ '97bcf97c359801ec95f8c965cc920f','97bd097bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e','97bcf97c359801ec95f8c965cc920f','97bd097bd07f595b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9210c8dc2','9778397bd19801ec9210c9274c920e','97b6b97bd19801ec95f8c965cc920f',
+ '97bd07f5307f595b0b0bc920fb0722','7f0e397bd097c36b0b6fc9210c8dc2','9778397bd097c36c9210c9274c920e',
+ '97b6b97bd19801ec95f8c965cc920f','97bd07f5307f595b0b0bc920fb0722','7f0e397bd097c36b0b6fc9210c8dc2',
+ '9778397bd097c36c9210c9274c91aa','97b6b97bd19801ec9210c965cc920e','97bd07f1487f595b0b0bc920fb0722',
+ '7f0e397bd097c36b0b6fc9210c8dc2','9778397bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e',
+ '97bcf7f1487f595b0b0bb0b6fb0722','7f0e397bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e','97bcf7f1487f595b0b0bb0b6fb0722','7f0e397bd097c35b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e','97bcf7f1487f531b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e',
+ '97bcf7f1487f531b0b0bb0b6fb0722','7f0e397bd07f595b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c9274c920e','97bcf7f0e47f531b0b0bb0b6fb0722','7f0e397bd07f595b0b0bc920fb0722',
+ '9778397bd097c36b0b6fc9210c91aa','97b6b97bd197c36c9210c9274c920e','97bcf7f0e47f531b0b0bb0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722','9778397bd097c36b0b6fc9210c8dc2','9778397bd097c36c9210c9274c920e',
+ '97b6b7f0e47f531b0723b0b6fb0722','7f0e37f5307f595b0b0bc920fb0722','7f0e397bd097c36b0b6fc9210c8dc2',
+ '9778397bd097c36b0b70c9274c91aa','97b6b7f0e47f531b0723b0b6fb0721','7f0e37f1487f595b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc9210c8dc2','9778397bd097c36b0b6fc9274c91aa','97b6b7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f595b0b0bb0b6fb0722','7f0e397bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa',
+ '97b6b7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722','7f0e397bd097c35b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9274c91aa','97b6b7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa','97b6b7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722','7f0e397bd07f595b0b0bc920fb0722','9778397bd097c36b0b6fc9274c91aa',
+ '97b6b7f0e47f531b0723b0787b0721','7f0e27f0e47f531b0b0bb0b6fb0722','7f0e397bd07f595b0b0bc920fb0722',
+ '9778397bd097c36b0b6fc9210c91aa','97b6b7f0e47f149b0723b0787b0721','7f0e27f0e47f531b0723b0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722','9778397bd097c36b0b6fc9210c8dc2','977837f0e37f149b0723b0787b0721',
+ '7f07e7f0e47f531b0723b0b6fb0722','7f0e37f5307f595b0b0bc920fb0722','7f0e397bd097c35b0b6fc9210c8dc2',
+ '977837f0e37f14998082b0787b0721','7f07e7f0e47f531b0723b0b6fb0721','7f0e37f1487f595b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc9210c8dc2','977837f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722','7f0e397bd097c35b0b6fc920fb0722','977837f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722','7f0e397bd097c35b0b6fc920fb0722',
+ '977837f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722','977837f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722','7f0e397bd07f595b0b0bc920fb0722','977837f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f149b0723b0787b0721','7f0e27f0e47f531b0b0bb0b6fb0722','7f0e397bd07f595b0b0bc920fb0722',
+ '977837f0e37f14998082b0723b06bd','7f07e7f0e37f149b0723b0787b0721','7f0e27f0e47f531b0723b0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722','977837f0e37f14898082b0723b02d5','7ec967f0e37f14998082b0787b0721',
+ '7f07e7f0e47f531b0723b0b6fb0722','7f0e37f1487f595b0b0bb0b6fb0722','7f0e37f0e37f14898082b0723b02d5',
+ '7ec967f0e37f14998082b0787b0721','7f07e7f0e47f531b0723b0b6fb0722','7f0e37f1487f531b0b0bb0b6fb0722',
+ '7f0e37f0e37f14898082b0723b02d5','7ec967f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e37f1487f531b0b0bb0b6fb0722','7f0e37f0e37f14898082b072297c35','7ec967f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722','7f0e37f0e37f14898082b072297c35',
+ '7ec967f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722',
+ '7f0e37f0e366aa89801eb072297c35','7ec967f0e37f14998082b0787b06bd','7f07e7f0e47f149b0723b0787b0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722','7f0e37f0e366aa89801eb072297c35','7ec967f0e37f14998082b0723b06bd',
+ '7f07e7f0e47f149b0723b0787b0721','7f0e27f0e47f531b0723b0b6fb0722','7f0e37f0e366aa89801eb072297c35',
+ '7ec967f0e37f14998082b0723b06bd','7f07e7f0e37f14998083b0787b0721','7f0e27f0e47f531b0723b0b6fb0722',
+ '7f0e37f0e366aa89801eb072297c35','7ec967f0e37f14898082b0723b02d5','7f07e7f0e37f14998082b0787b0721',
+ '7f07e7f0e47f531b0723b0b6fb0722','7f0e36665b66aa89801e9808297c35','665f67f0e37f14898082b0723b02d5',
+ '7ec967f0e37f14998082b0787b0721','7f07e7f0e47f531b0723b0b6fb0722','7f0e36665b66a449801e9808297c35',
+ '665f67f0e37f14898082b0723b02d5','7ec967f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e36665b66a449801e9808297c35','665f67f0e37f14898082b072297c35','7ec967f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f531b0723b0b6fb0721','7f0e26665b66a449801e9808297c35','665f67f0e37f1489801eb072297c35',
+ '7ec967f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722'],
+
+ /**
+ * 数字转中文速查表
+ * @Array Of Property
+ * @trans ['日','一','二','三','四','五','六','七','八','九','十']
+ * @return Cn string
+ */
+ nStr1:["\u65e5","\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341"],
+
+ /**
+ * 日期转农历称呼速查表
+ * @Array Of Property
+ * @trans ['初','十','廿','卅']
+ * @return Cn string
+ */
+ nStr2:["\u521d","\u5341","\u5eff","\u5345"],
+
+ /**
+ * 月份转农历称呼速查表
+ * @Array Of Property
+ * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊']
+ * @return Cn string
+ */
+ nStr3:["\u6b63","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341","\u51ac","\u814a"],
+
+ /**
+ * 农历节日
+ */
+ lunarFestival:{"1-1":"春节","1-15":"上元节","2-2":"龙抬头","5-5":"端午","7-7":"七夕","7-15":"中元节","8-15":"中秋","9-9":"重阳","10-15":"下元节","12-8":"腊八","12-23":"小年"},
+ /**
+ * 公历节日
+ */
+ solarFestival:{"1-1":"元旦","2-14":"情人节","3-8":"妇女节","3-12":"植树节","4-1":"愚人节","5-1":"劳动节","5-4":"青年节","6-1":"儿童节","7-1":"建党节","8-1":"建军节","9-10":"教师节","10-1":"国庆节","11-1":"万圣节","12-24":"平安夜","12-25":"圣诞节"},
+
+ /**
+ * 返回农历y年一整年的总天数
+ * @param lunar Year
+ * @return Number
+ * @eg:var count = calendar.lYearDays(1987) ;//count=387
+ */
+ lYearDays:function(y) {
+ var i, sum = 348;
+ for(i=0x8000; i>0x8; i>>=1) { sum += (calendar.lunarInfo[y-1900] & i)? 1: 0; }
+ return(sum+calendar.leapDays(y));
+ },
+
+ /**
+ * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0
+ * @param lunar Year
+ * @return Number (0-12)
+ * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
+ */
+ leapMonth:function(y) { //闰字编码 \u95f0
+ return(calendar.lunarInfo[y-1900] & 0xf);
+ },
+
+ /**
+ * 返回农历y年闰月的天数 若该年没有闰月则返回0
+ * @param lunar Year
+ * @return Number (0、29、30)
+ * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
+ */
+ leapDays:function(y) {
+ if(calendar.leapMonth(y)) {
+ return((calendar.lunarInfo[y-1900] & 0x10000)? 30: 29);
+ }
+ return(0);
+ },
+
+ /**
+ * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
+ * @param lunar Year
+ * @return Number (-1、29、30)
+ * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
+ */
+ monthDays:function(y,m) {
+ if(m>12 || m<1) {return -1}//月份参数从1至12,参数错误返回-1
+ return( (calendar.lunarInfo[y-1900] & (0x10000>>m))? 30: 29 );
+ },
+
+ /**
+ * 返回公历(!)y年m月的天数
+ * @param solar Year
+ * @return Number (-1、28、29、30、31)
+ * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
+ */
+ solarDays:function(y,m) {
+ if(m>12 || m<1) {return -1} //若参数错误 返回-1
+ var ms = m-1;
+ if(ms==1) { //2月份的闰平规律测算后确认返回28或29
+ return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28);
+ }else {
+ return(calendar.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 calendar.Gan[ganKey-1] + calendar.Zhi[zhiKey-1];
+
+ },
+
+ /**
+ * 公历月、日判断所属星座
+ * @param cMonth [description]
+ * @param cDay [description]
+ * @return Cn string
+ */
+ toAstro:function(cMonth,cDay) {
+ var s = "\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf";
+ var arr = [20,19,21,21,21,22,23,23,23,23,22,22];
+ return s.substr(cMonth*2 - (cDay < arr[cMonth-1] ? 2 : 0),2) + "\u5ea7";//座
+ },
+
+ /**
+ * 传入offset偏移量返回干支
+ * @param offset 相对甲子的偏移量
+ * @return Cn string
+ */
+ toGanZhi:function(offset) {
+ return calendar.Gan[offset%10] + calendar.Zhi[offset%12];
+ },
+
+ /**
+ * 传入公历(!)y年获得该年第n个节气的公历日期
+ * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
+ * @return day Number
+ * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春
+ */
+ getTerm:function(y,n) {
+ if(y<1900 || y>2100) {return -1;}
+ if(n<1 || n>24) {return -1;}
+ var _table = calendar.sTermInfo[y-1900];
+ var _info = [
+ parseInt('0x'+_table.substr(0,5)).toString() ,
+ parseInt('0x'+_table.substr(5,5)).toString(),
+ parseInt('0x'+_table.substr(10,5)).toString(),
+ parseInt('0x'+_table.substr(15,5)).toString(),
+ parseInt('0x'+_table.substr(20,5)).toString(),
+ parseInt('0x'+_table.substr(25,5)).toString()
+ ];
+ var _calday = [
+ _info[0].substr(0,1),
+ _info[0].substr(1,2),
+ _info[0].substr(3,1),
+ _info[0].substr(4,2),
+
+ _info[1].substr(0,1),
+ _info[1].substr(1,2),
+ _info[1].substr(3,1),
+ _info[1].substr(4,2),
+
+ _info[2].substr(0,1),
+ _info[2].substr(1,2),
+ _info[2].substr(3,1),
+ _info[2].substr(4,2),
+
+ _info[3].substr(0,1),
+ _info[3].substr(1,2),
+ _info[3].substr(3,1),
+ _info[3].substr(4,2),
+
+ _info[4].substr(0,1),
+ _info[4].substr(1,2),
+ _info[4].substr(3,1),
+ _info[4].substr(4,2),
+
+ _info[5].substr(0,1),
+ _info[5].substr(1,2),
+ _info[5].substr(3,1),
+ _info[5].substr(4,2),
+ ];
+ return parseInt(_calday[n-1]);
+ },
+
+ /**
+ * 传入农历数字月份返回汉语通俗表示法
+ * @param lunar month
+ * @return Cn string
+ * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
+ */
+ toChinaMonth:function(m) { // 月 => \u6708
+ if(m>12 || m<1) {return -1} //若参数错误 返回-1
+ var s = calendar.nStr3[m-1];
+ s+= "\u6708";//加上月字
+ return s;
+ },
+
+ /**
+ * 传入年份月份返回第n个星期日的日期数字
+ * @param y 年份
+ * @param m 月份
+ * @param n 第几个星期日 ( 5>n>0的数字 一个月一般就4个星期日,最多5个)
+ * @return 日期数字;3 = getSunday(2017,9,1); 九月的第一个星期日是3号;超出返回-1
+ */
+ getSunday(y,m,n){
+ var d = new Date(y+'-' + m + '-1');
+ var d2= new Date(y+'-'+(m+1)+'-1');
+ d2.setDate(0);
+ var maxDay = d2.getDate();//传入月份的最后一天
+
+ var week = d.getDay();
+ var first = 1;
+ if(week>0) first = d.getDate() + (7 - week);
+ var result = (n-1)*7 + first;
+ if(result>maxDay) return -1;
+ return result;
+ },
+ /**
+ * 传入农历日期数字返回汉字表示法
+ * @param lunar day
+ * @return Cn string
+ * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
+ */
+ toChinaDay:function(d){ //日 => \u65e5
+ var s;
+ switch (d) {
+ case 10:
+ s = '\u521d\u5341'; break;
+ case 20:
+ s = '\u4e8c\u5341'; break;
+ break;
+ case 30:
+ s = '\u4e09\u5341'; break;
+ break;
+ default :
+ s = calendar.nStr2[Math.floor(d/10)];
+ s += calendar.nStr1[d%10];
+ }
+ return(s);
+ },
+
+ /**
+ * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春”
+ * @param y year
+ * @return Cn string
+ * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔'
+ */
+ getAnimal: function(y) {
+ return calendar.Animals[(y - 4) % 12]
+ },
+ /**
+ * 判断 当天为 此年的第几天
+ * @param date
+ * @returns {number}
+ */
+ getCyclical:function(date){
+ var nowDate = new Date(date);
+ var initTime = new Date(date);
+ initTime.setMonth(0); // 本年初始月份
+ initTime.setDate(1); // 本年初始时间
+ var differenceVal = nowDate - initTime ; // 今天的时间减去本年开始时间,获得相差的时间
+ return Math.ceil(differenceVal/(24*60*60*1000));
+ },
+ /**
+ * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON
+ * @param y solar year
+ * @param m solar month
+ * @param d solar day
+ * @return JSON object
+ * @eg:console.log(calendar.solar2lunar(1987,11,01));
+ */
+ solar2lunar:function (y,m,d) { //参数区间1900.1.31~2100.12.31
+ //年份限定、上限
+ if(y<1900 || y>2100) {
+ return -1;// undefined转换为数字变为NaN
+ }
+ //公历传参最下限
+ if(y==1900&&m==1&&d<31) {
+ return -1;
+ }
+ //未传参 获得当天
+ if(!y) {
+ var objDate = new Date();
+ }else {
+ var objDate = new Date(y,parseInt(m)-1,d)
+ }
+ var i, leap=0, temp=0;
+ //修正ymd参数
+ var y = objDate.getFullYear(),
+ m = objDate.getMonth()+1,
+ d = objDate.getDate();
+ var offset = (Date.UTC(objDate.getFullYear(),objDate.getMonth(),objDate.getDate()) - Date.UTC(1900,0,31))/86400000;
+ for(i=1900; i<2101 && offset>0; i++) {
+ temp = calendar.lYearDays(i);
+ offset -= temp;
+ }
+ if(offset<0) {
+ offset+=temp; i--;
+ }
+
+ //是否今天
+ var isTodayObj = new Date(),
+ isToday = false;
+ if(isTodayObj.getFullYear()==y && isTodayObj.getMonth()+1==m && isTodayObj.getDate()==d) {
+ isToday = true;
+ }
+ //星期几
+ var nWeek = objDate.getDay(),
+ cWeek = calendar.nStr1[nWeek];
+ //数字表示周几顺应天朝周一开始的惯例
+ if(nWeek==0) {
+ nWeek = 7;
+ }
+ //农历年
+ var year = i;
+ var leap = calendar.leapMonth(i); //闰哪个月
+ var isLeap = false;
+
+ //效验闰月
+ for(i=1; i<13 && offset>0; i++) {
+ //闰月
+ if(leap>0 && i==(leap+1) && isLeap==false){
+ --i;
+ isLeap = true; temp = calendar.leapDays(year); //计算农历闰月天数
+ }
+ else{
+ temp = calendar.monthDays(year, i);//计算农历普通月天数
+ }
+ //解除闰月
+ if(isLeap==true && i==(leap+1)) { isLeap = false; }
+ offset -= temp;
+ }
+ // 闰月导致数组下标重叠取反
+ if(offset==0 && leap>0 && i==leap+1)
+ {
+ if(isLeap){
+ isLeap = false;
+ }else{
+ isLeap = true; --i;
+ }
+ }
+ if(offset<0)
+ {
+ offset += temp;
+ --i;
+ }
+ //农历月
+ var month = i;
+ //农历日
+ var day = offset +1;
+ //天干地支处理
+ var sm = m-1;
+ var gzY = calendar.toGanZhiYear(year);
+
+ // 当月的两个节气
+ // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year`
+ var firstNode = calendar.getTerm(y,(m*2-1));//返回当月「节」为几日开始
+ var secondNode = calendar.getTerm(y,(m*2));//返回当月「节」为几日开始
+
+ // 依据12节气修正干支月
+ var gzM = calendar.toGanZhi((y-1900)*12+m+11);
+ if(d>=firstNode) {
+ gzM = calendar.toGanZhi((y-1900)*12+m+12);
+ }
+
+ //传入的日期的节气与否
+ var isTerm = false;
+ var Term = null;
+ if(firstNode==d) {
+ isTerm = true;
+ Term = calendar.solarTerm[m*2-2];
+ }
+ if(secondNode==d) {
+ isTerm = true;
+ Term = calendar.solarTerm[m*2-1];
+ }
+ //日柱 当月一日与 1900/1/1 相差天数
+ var dayCyclical = Date.UTC(y,sm,1,0,0,0,0)/86400000+25567+10;
+ var gzD = calendar.toGanZhi(dayCyclical+d-1);
+ //(年-1900) * 5 + (年-1900+3) / 4 + 9 + 当年年初起累积日数
+ // var dayCyclical = (y-1900)*5 + (y-1900+3)/4 + 9 +(this.getCyclical(y+'-'+m+'-'+d))
+ // var gzD = calendar.toGanZhi(dayCyclical-1);
+ //该日期所属的星座
+ var astro = calendar.toAstro(m,d);
+ //该日期所有的节日
+ var festival = [];
+ //农历传统节日
+ var lf = calendar.lunarFestival[month+'-'+day];
+ if(lf != undefined && lf != null && lf != '') festival.push(lf);
+ if(month==12 && (isLeap?day == calendar.leapDays(year):calendar.monthDays(month-1)==29?day == 30:day == 29)) festival.push('除夕');
+
+ //公历节日
+ var sf = calendar.solarFestival[m+'-'+d];
+ if(sf != undefined && sf != null && sf != '') festival.push(sf);
+ if(m==5 && d==calendar.getSunday(y,m,2)) festival.push('母亲节');
+ if(m==6 && d==calendar.getSunday(y,m,3)) festival.push('父亲节');
+
+ return {'lYear':year,'lMonth':month,'lDay':day,'isFestival':festival.length>0,'festival':festival,'Animal':calendar.getAnimal(year),'IMonthCn':(isLeap?"\u95f0":'')+calendar.toChinaMonth(month),'IDayCn':calendar.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};
+ },
+
+ getLunar:function (date) {
+ var D;
+ if(date==undefined){
+ D = new Date();
+ }else{
+ D = new Date(date);
+ }
+ D.setHours(D.getHours()+8)//根据国际UTC标准,中国时区应为:UTC+8
+ var cY = D.getUTCFullYear();
+ var cM = D.getUTCMonth()+1;
+ var cD = D.getUTCDate();
+ //console.log('getLunar:月'+cM+'--'+cD+'日')
+ return calendar.solar2lunar(cY,cM,cD);
+ },
+
+ /**
+ * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON
+ * @param y lunar year
+ * @param m lunar month
+ * @param d lunar day
+ * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可]
+ * @return JSON object
+ * @eg:console.log(calendar.lunar2solar(1987,9,10));
+ */
+ lunar2solar:function(y,m,d,isLeapMonth) { //参数区间1900.1.31~2100.12.1
+ var isLeapMonth = !!isLeapMonth;
+ var leapOffset = 0;
+ var leapMonth = calendar.leapMonth(y);
+ var leapDay = calendar.leapDays(y);
+ if(isLeapMonth&&(leapMonth!=m)) {return -1;}//传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
+ if(y==2100&&m==12&&d>1 || y==1900&&m==1&&d<31) {return -1;}//超出了最大极限值
+ var day = calendar.monthDays(y,m);
+ var _day = day;
+ //bugFix 2016-9-25
+ //if month is leap, _day use leapDays method
+ if(isLeapMonth) {
+ _day = calendar.leapDays(y,m);
+ }
+ if(y < 1900 || y > 2100 || d > _day) {return -1;}//参数合法性效验
+
+ //计算农历的时间差
+ var offset = 0;
+ for(var i=1900;i0) {
+ offset+=calendar.leapDays(y);isAdd = true;
+ }
+ }
+ offset+=calendar.monthDays(y,i);
+ }
+ //转换闰月农历 需补充该年闰月的前一个月的时差
+ if(isLeapMonth) {offset+=day;}
+ //1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
+ var stmap = Date.UTC(1900,1,30,0,0,0);
+ var calObj = new Date((offset+d-31)*86400000+stmap);
+ var cY = calObj.getUTCFullYear();
+ var cM = calObj.getUTCMonth()+1;
+ var cD = calObj.getUTCDate();
+
+ return calendar.solar2lunar(cY,cM,cD);
+ },
+ /**
+ * 传入农历日期
+ * @param date 类型String,格式:L2017-01-02;闰月:LR2017-06-03
+ * @returns {*|JSON}
+ */
+ getSolar(date) {
+ if(date == undefined || date == null || date == '' || date.indexOf('L') == -1) return null;
+ var isLeapMonth = date.indexOf('R')>-1;
+ var D = date.replace(/L/,'').replace(/R/,'').split('-');
+ var cY = parseInt(D[0]);
+ var cM = parseInt(D[1]);
+ var cD = parseInt(D[2]);
+ return calendar.lunar2solar(cY,cM,cD,isLeapMonth);
+ },
+};
+export default { calendar }
diff --git a/src/views/group/holidaySetting/holidayLog.vue b/src/views/group/holidaySetting/holidayLog.vue
index 37a39507..c06dc9d1 100644
--- a/src/views/group/holidaySetting/holidayLog.vue
+++ b/src/views/group/holidaySetting/holidayLog.vue
@@ -3,6 +3,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ showDeptName }}
-
- 节假日设置
-
-
-
-
-
- 新增节假日
-
-
- 节假日变更记录
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ {{ showDeptName }}
+
+ 节假日设置
+
+ {{ inherited ? '继承模式' : '自定义模式' }}
+
+
+
+
+
- 跳转到今天
+ style="margin-right: 10px"
+ v-hasPermi="['base:group-holiday:create']"
+ @click="addHoliday">
+ 新增节假日
-
-
+
+ 节假日变更记录
+
+
+
+
+
+ 新增节假日
+
+
+ 恢复继承
+
+
+ 解除继承
+
+
+ 节假日变更记录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 跳转到今天
+
+
+
+
当前节假日设置为组织架构中最高层级配置,默认自动继承至下属部门。子部门可选择
解除继承
- 设置后进行独立修改,复制后不再继承上级设置
+ 设置后进行独立修改,解除后不再继承上级设置
-
-
-
-
-
-
-
-
-
- {{ Number(data.day.split('-')[2]) }}
- {{ getLunarDate(data.day) }}
-
- 班
-
-
-
+
+
+
+
+ 当前部门继承上级节假日设置,默认不可修改。可通过
+ 解除继承
+ 进行自定义,解除后将不再继承。
+
+
+
+
+
+ 当前部门已解除继承,节假日可自由配置。点击
+ 恢复继承
+ 将清空当前设置并同步上级节假日。
+
+
+
+
+
+
+
+
+
+
+ class="dateStyle"
+ @click="
+ new Date(data.day).getTime() >=
+ new Date().setHours(0, 0, 0, 0) &&
+ (!ishasParent || !inherited) &&
+ HolidayList[Number(data.day.split('-')[2]) - 1]
+ ?.isHoliday &&
+ showDetail(HolidayList[Number(data.day.split('-')[2]) - 1])
+ ">
-
+
+
{{ Number(data.day.split('-')[2]) }}
-
- {{ getLunarDate(data.day) }}
-
+ {{ getLunarDate(data.day) }}
+
+
+
+
+ {{
+ HolidayList[Number(data.day.split('-')[2]) - 1]
+ ?.isHoliday
+ ? '假'
+ : '班'
+ }}
+
+
+
+
+
+ {{
+ HolidayList[Number(data.day.split('-')[2]) - 1]
+ ?.holidayName
+ }}
+
+
+
+
-
-
-
+
+
+
+
+ {{ Number(data.day.split('-')[2]) }}
+
+ {{ getLunarDate(data.day) }}
+
+
+
+
+
+
-
+
+ @refreshPage="successSubmit">
@@ -155,6 +316,7 @@
size="small"
type="primary"
class="btnTextStyle"
+ v-hasPermi="['base:group-holiday:update']"
@click="editHoliday">
修改
@@ -162,6 +324,7 @@
v-if="detail"
class="btnTextStyle"
size="small"
+ v-hasPermi="['base:group-holiday:delete']"
@click="deleteHoliday">
删除
@@ -174,6 +337,7 @@
dialogTitle="节假日变更记录"
:dialogVisible="logVisible"
@cancel="cancelLog"
+ :before-close="cancelLog"
:destroy-on-close="true"
width="70%">
@@ -189,16 +353,22 @@
-
+
@@ -386,7 +741,7 @@ export default {
.head-container {
padding: 20px 10px 0;
background-color: #fff;
- min-height: calc(100vh - 120px - 8px);
+ height: 100%;
border-radius: 8px;
}
.groupTeamScheduling {
@@ -465,9 +820,28 @@ export default {
text-align: center;
float: right;
}
+ .holiday-div {
+ background-color: #67c23a;
+ border-radius: 3px;
+ height: 25px;
+ text-align: center;
+ line-height: 24px;
+ color: #fff;
+ .holiday-div-btn {
+ float: right;
+ transform: rotate(90deg);
+ font-size: 14px;
+ pointer-events: none;
+ }
+ }
}
}
}
}
}
+.addDialog {
+ .el-dialog__body {
+ overflow: visible;
+ }
+}
diff --git a/src/views/group/holidaySetting/theme/font/iconfont/element-icons.ttf b/src/views/group/holidaySetting/theme/font/iconfont/element-icons.ttf
new file mode 100644
index 00000000..91b74de3
Binary files /dev/null and b/src/views/group/holidaySetting/theme/font/iconfont/element-icons.ttf differ
diff --git a/src/views/group/holidaySetting/theme/font/iconfont/element-icons.woff b/src/views/group/holidaySetting/theme/font/iconfont/element-icons.woff
new file mode 100644
index 00000000..02b9a253
Binary files /dev/null and b/src/views/group/holidaySetting/theme/font/iconfont/element-icons.woff differ
diff --git a/src/views/group/holidaySetting/theme/font/iconfont/iconfont.eot b/src/views/group/holidaySetting/theme/font/iconfont/iconfont.eot
new file mode 100644
index 00000000..cce7da27
Binary files /dev/null and b/src/views/group/holidaySetting/theme/font/iconfont/iconfont.eot differ
diff --git a/src/views/group/holidaySetting/theme/font/iconfont/iconfont.js b/src/views/group/holidaySetting/theme/font/iconfont/iconfont.js
new file mode 100644
index 00000000..ca0010f2
--- /dev/null
+++ b/src/views/group/holidaySetting/theme/font/iconfont/iconfont.js
@@ -0,0 +1,636 @@
+;(function(window) {
+
+ var svgSprite = ''
+ var script = function() {
+ var scripts = document.getElementsByTagName('script')
+ return scripts[scripts.length - 1]
+ }()
+ var shouldInjectCss = script.getAttribute("data-injectcss")
+
+ /**
+ * document ready
+ */
+ var ready = function(fn) {
+ if (document.addEventListener) {
+ if (~["complete", "loaded", "interactive"].indexOf(document.readyState)) {
+ setTimeout(fn, 0)
+ } else {
+ var loadFn = function() {
+ document.removeEventListener("DOMContentLoaded", loadFn, false)
+ fn()
+ }
+ document.addEventListener("DOMContentLoaded", loadFn, false)
+ }
+ } else if (document.attachEvent) {
+ IEContentLoaded(window, fn)
+ }
+
+ function IEContentLoaded(w, fn) {
+ var d = w.document,
+ done = false,
+ // only fire once
+ init = function() {
+ if (!done) {
+ done = true
+ fn()
+ }
+ }
+ // polling for no errors
+ var polling = function() {
+ try {
+ // throws errors until after ondocumentready
+ d.documentElement.doScroll('left')
+ } catch (e) {
+ setTimeout(polling, 50)
+ return
+ }
+ // no errors, fire
+
+ init()
+ };
+
+ polling()
+ // trying to always fire before onload
+ d.onreadystatechange = function() {
+ if (d.readyState == 'complete') {
+ d.onreadystatechange = null
+ init()
+ }
+ }
+ }
+ }
+
+ /**
+ * Insert el before target
+ *
+ * @param {Element} el
+ * @param {Element} target
+ */
+
+ var before = function(el, target) {
+ target.parentNode.insertBefore(el, target)
+ }
+
+ /**
+ * Prepend el to target
+ *
+ * @param {Element} el
+ * @param {Element} target
+ */
+
+ var prepend = function(el, target) {
+ if (target.firstChild) {
+ before(el, target.firstChild)
+ } else {
+ target.appendChild(el)
+ }
+ }
+
+ function appendSvg() {
+ var div, svg
+
+ div = document.createElement('div')
+ div.innerHTML = svgSprite
+ svgSprite = null
+ svg = div.getElementsByTagName('svg')[0]
+ if (svg) {
+ svg.setAttribute('aria-hidden', 'true')
+ svg.style.position = 'absolute'
+ svg.style.width = 0
+ svg.style.height = 0
+ svg.style.overflow = 'hidden'
+ prepend(svg, document.body)
+ }
+ }
+
+ if (shouldInjectCss && !window.__iconfont__svg__cssinject__) {
+ window.__iconfont__svg__cssinject__ = true
+ try {
+ document.write("");
+ } catch (e) {
+ console && console.log(e)
+ }
+ }
+
+ ready(appendSvg)
+
+
+})(window)
\ No newline at end of file
diff --git a/src/views/group/holidaySetting/theme/font/iconfont/iconfont.svg b/src/views/group/holidaySetting/theme/font/iconfont/iconfont.svg
new file mode 100644
index 00000000..b0ae7f6c
--- /dev/null
+++ b/src/views/group/holidaySetting/theme/font/iconfont/iconfont.svg
@@ -0,0 +1,319 @@
+
+
+
diff --git a/src/views/group/holidaySetting/theme/font/iconfont/iconfont.ttf b/src/views/group/holidaySetting/theme/font/iconfont/iconfont.ttf
new file mode 100644
index 00000000..df7bc168
Binary files /dev/null and b/src/views/group/holidaySetting/theme/font/iconfont/iconfont.ttf differ
diff --git a/src/views/group/holidaySetting/theme/font/iconfont/iconfont.woff b/src/views/group/holidaySetting/theme/font/iconfont/iconfont.woff
new file mode 100644
index 00000000..8fbd24fe
Binary files /dev/null and b/src/views/group/holidaySetting/theme/font/iconfont/iconfont.woff differ
diff --git a/src/views/group/holidaySetting/theme/public.css b/src/views/group/holidaySetting/theme/public.css
new file mode 100644
index 00000000..d0f7099b
--- /dev/null
+++ b/src/views/group/holidaySetting/theme/public.css
@@ -0,0 +1,411 @@
+@charset "UTF-8";
+@font-face {
+ font-family: 'iconfont';
+ src: url('font/iconfont/iconfont.eot?t=1492242939353'); /* IE9*/
+ src: url('font/iconfont/iconfont.eot?t=1492242939353#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('font/iconfont/element-icons.woff?t=1492242939353') format('woff'), /* chrome, firefox */
+ url('font/iconfont/element-icons.ttf?t=1492242939353') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
+ url('font/iconfont/iconfont.svg?t=1492242939353#iconfont') format('svg'); /* iOS 4.1- */
+}
+
+.iconfont {
+ font-family:"iconfont" !important;
+ font-size:16px;
+ font-style:normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-time:before { content: "\e62f"; }
+.icon-richeng:before { content: "\e641"; }
+.icon-guanbi:before { content: "\e617"; }
+
+.icon-xiangzuojiantou:before { content: "\e660"; }
+.icon-xiangyoujiantou:before { content: "\e65f"; }
+
+
+body {
+ margin: 0px;
+ padding: 0px;
+ /*background: url(assets/bg1.jpg) center !important;
+ background-size: cover;*/
+ background: #ffffff;
+ font-size: 12px;
+ -webkit-font-smoothing: antialiased;
+}
+body, button, input, select, textarea {
+ font: 400 1em/1.5 PingFang SC,/*Lantinghei SC,Helvetica Neue,*/Microsoft Yahei,Hiragino Sans GB,Microsoft Sans Serif,WenQuanYi Micro Hei,sans;
+}
+ul,li,dl,dt,dd{ margin:0; padding:0; list-style:none;}
+em,i{ font-style:normal; margin:0; padding:0;}
+h1,h2,h3,h4,h5,p{ margin:0; padding:0;}
+a{ cursor: pointer;}
+
+
+.full-jcalendar{
+ position: relative;
+ font-size: 14px;
+ display: inline-block;
+}
+.full-jcalendar .input-icon{
+ position: absolute;
+ width: 28px;
+ height: 100%;
+ right: 0;
+ top: 5px;
+ text-align: center;
+ color: #e8a400;
+ transition: all .3s;
+}
+.full-jcalendar .input-icon .iconfont{
+ font-size: 18px;
+}
+.full-jcalendar .input-icon .iconfont.is-clear{
+ color:#999;
+ font-weight: bolder;
+}
+.full-jcalendar .input-icon__tip{
+ position: absolute;
+ right:28px;
+ top:10px;
+ width:16px;
+ cursor: default;
+ text-align: center;
+}
+.full-jcalendar .input-icon__tip i{
+ display: block;
+ margin:0;
+ padding:0;
+ width:16px;
+ height:16px;
+ background-color: #ff5a00;
+ border-radius: 8px;
+ font-size: 12px;
+ color:#fff;
+ line-height: 16px;
+ text-align: center;
+ overflow: hidden;
+}
+
+.full-jcalendar .input__inner{
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background-color: #fff;
+ background-image: none;
+ border-radius: 5px;
+ border: 1px solid #bfcbd9;
+ box-sizing: border-box;
+ color: #1f2d3d;
+ display: inline-block;
+ font-size: inherit;
+ height: 36px;
+ line-height: 1;
+ outline: none;
+ padding: 3px 10px;
+ transition: border-color .2s cubic-bezier(.645,.045,.355,1);
+ min-width:193px;
+ width: 100%;
+}
+.full-jcalendar .input__inner:focus{
+ outline: none;
+ border-color:#20a0ff;
+}
+.full-jcalendar .input__inner:hover{
+ border-color:#8391a5;
+}
+.input-icon+.input__inner{
+ padding-right:28px;
+}
+.input-icon__tip+.input__inner{
+ padding-right:35px;
+}
+.full-jcalendar input.input__inner::placeholder, .full-jcalendar input.input__inner:-moz-placeholder{
+ color:#97A8BE;
+}
+.full-jcalendar input.is-disabled{
+ background-color: #eef1f6;
+ border-color: #d1dbe5;
+ color: #bbb;
+ cursor: not-allowed;
+}
+.full-jcalendar .is-disabled i{
+ color: #bbb;
+ }
+.full-jcalendar .is-disabled *{
+ cursor: not-allowed;
+}
+
+.full-jcalendar__main{
+ cursor: pointer;
+ position: absolute;
+ z-index: 1670;
+ left:2px;
+ top:38px;
+ width:296px;
+ background-color: #ffffff;
+ border-radius: 5px;
+ -moz-box-shadow:2px 2px 5px #C9C9C9;
+ -webkit-box-shadow:2px 2px 5px #C9C9C9;
+ box-shadow:2px 2px 5px #C9C9C9;
+ overflow: hidden;
+}
+.full-jcalendar__main.is-daterange{
+ width:593px;
+}
+.full-jcalendar__main .date-range__month{
+ float: left;
+ width:296px;
+ overflow: hidden;
+}
+.full-jcalendar__main .date-range__month.leftMonth{
+ border-right:1px solid #F8F8F8;
+}
+.full-jcalendar-header{
+ position: relative;
+ width:100%;
+ padding:5px 0;
+ height:24px;
+ font-size: 14px;
+ text-align: center;
+ line-height: 24px;
+ color:#333;
+}
+.full-jcalendar-header span{ display: inline-block;}
+.full-jcalendar-header .title-year:hover,.full-jcalendar-header .title-month:hover{
+ color:#50bfff;
+}
+.date-range__month .full-jcalendar-header .title-year:hover,.date-range__month .full-jcalendar-header .title-month:hover{
+ color:#333;
+}
+.full-jcalendar-header .prev-month,.full-jcalendar-header .next-month {
+ cursor: pointer;
+ line-height: 20px;
+ text-align: center;
+ color: #E1CEB7;
+ font-size: 20px;
+}
+.full-jcalendar-header p.prev-month{
+ position: absolute;
+ z-index: 1676;
+ left:5px;
+ top:5px;
+}
+.full-jcalendar-header p.next-month {
+ position: absolute;
+ z-index: 1676;
+ right: 5px;
+ top: 5px;
+}
+
+.date-range__month .full-jcalendar-header .prev-year{
+ position: absolute;
+ z-index: 1676;
+ left: 5px;
+ top: 5px;
+}
+
+.date-range__month .full-jcalendar-header .prev-month{
+ left:35px;
+}
+.date-range__month .full-jcalendar-header .next-year{
+ position: absolute;
+ z-index: 1676;
+ right: 5px;
+ top: 5px;
+}
+.date-range__month .full-jcalendar-header .next-month{
+ right:35px;
+}
+
+.full-jcalendar__body {
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ height: 280px;
+ position: relative;
+}
+.full-jcalendar__body ul,.full-jcalendar__body p {
+ margin: 0;
+ padding: 0;
+}
+.full-jcalendar__body .weeks {
+ width: 100%;
+ height: 30px;
+ display: flex;
+ border-top: 1px solid #F8F8F8;
+}
+.full-jcalendar__body .weeks .week {
+ flex: 1;
+ text-align: center;
+ font-size: 14px;
+ color: #8391A5;
+ line-height: 30px;
+ border: none;
+}
+.full-jcalendar__body .weeks .week strong {
+ font-weight: normal;
+}
+.full-jcalendar__body .week-row {
+ display: flex;
+ width:100%;
+}
+.full-jcalendar__body .week-row .day-cell {
+ position: relative;
+ flex: 1;
+ padding: 2px;
+ border: 1px solid #F8F8F8;
+ margin-right: -1px;
+ margin-bottom: -1px;
+ text-align: center;
+}
+.full-jcalendar__body .day-cell .day-number .lunar {
+ font-size: 12px;
+ color: #ACACAC;
+}
+.full-jcalendar__body .day-cell .day-number .solar {
+ font-size: 12px;
+ color: #483a32;
+ /*text-shadow: 1px 1px 1px #ddd;*/
+}
+/*.full-jcalendar__body .day-cell.not-cur-month .solar {*/
+ /*text-shadow: none;*/
+/*}*/
+.full-jcalendar__body .day-cell .day-number .solar .is-leap {
+ display: inline-block;
+ width:14px;
+ height:14px;
+ border-radius: 7px;
+ background-color: #f00;
+ font-size: 12px;
+ color: #fff;
+ text-align: center;
+ line-height: 14px;
+}
+.full-jcalendar__body .day-cell .day-number .term {
+ font-size:12px;
+ color: #FFC200;
+}
+.full-jcalendar__body .day-cell .day-number .festival {
+ font-size:12px;
+ color: #ff8610;
+}
+.full-jcalendar__body .day-cell .day-number .is-today {
+ font-size: 12px;
+ color: #20a0ff;
+}
+.full-jcalendar__body .day-cell .day-number .is-empty {
+ line-height: 34px;
+}
+.full-jcalendar__body .day-cell.today {
+ background-color: #FBF9F6;
+}
+.full-jcalendar__body .day-cell.today:before {
+ content: " ";
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 0;
+ height: 0;
+ border-top: .5em solid #20a0ff;
+ border-left: .5em solid transparent;
+}
+.full-jcalendar__body .day-cell.choose {
+ background-color: #d2ecff;
+}
+.full-jcalendar__body .day-cell.select {
+ background-color: #009bfe;
+}
+.full-jcalendar__body .day-cell.select .lunar,
+.full-jcalendar__body .day-cell.select .solar,
+.full-jcalendar__body .day-cell.select .term ,
+.full-jcalendar__body .day-cell.select .festival ,
+.full-jcalendar__body .day-cell.select .is-today{
+ color: #fff;
+}
+.full-jcalendar__body .day-cell.select .solar .is-leap {
+ background: none;
+}
+.full-jcalendar__body .day-cell.not-cur-month .lunar
+,.full-jcalendar__body .day-cell.not-cur-month .solar
+,.full-jcalendar__body .day-cell.not-cur-month .term
+,.full-jcalendar__body .day-cell.not-cur-month .festival{
+ color: #ddd;
+}
+.full-jcalendar__body .day-cell:hover {
+ background-color: #ECF1F4;
+}
+.full-jcalendar__body .day-cell.choose:hover {
+ background-color: #009bfe;
+}
+.full-jcalendar__body .day-cell.choose:hover .lunar,
+.full-jcalendar__body .day-cell.choose:hover .solar,
+.full-jcalendar__body .day-cell.choose:hover .term ,
+.full-jcalendar__body .day-cell.choose:hover .festival ,
+.full-jcalendar__body .day-cell.choose:hover .is-today{
+ color: #fff;
+}
+.full-jcalendar__body .select:hover{
+ background-color: #009bfe;
+}
+.full-jcalendar__body .day-cell.not-optional{
+ background-color: #ECF1F4;
+}
+.full-jcalendar__month,.full-jcalendar__year{
+ position: absolute;
+ z-index: 1677;
+ top:0;
+ left:0;
+ width:100%;
+ height:100%;
+ background-color: #fff;
+}
+.full-jcalendar__body .close{
+ position: absolute;
+ bottom:10px;
+ right:10px;
+ padding:3px 5px;
+ font-size:12px;
+ background-color: #FBF8FF;
+ border:1px solid #F8F8F8;
+ border-radius: 3px;
+}
+.full-jcalendar__body .data-list{
+ list-style: none;
+ margin:auto;
+ padding:20px 0 0 0;
+ width:85%;
+}
+.full-jcalendar__body .data-list li{
+ position: relative;
+ list-style: none;
+ line-height: normal;
+ float: left;
+ width:25%;
+ text-align: center;
+ padding:5px 0;
+ margin:10px 0;
+ font-size:14px;
+ color:#333;
+}
+.full-jcalendar__body .data-list li:hover ,.full-jcalendar__body .data-list li.select-year {
+ background-color: #50bfff;
+ color: #fff;
+}
+.full-jcalendar__body .data-list li.curr-year:before {
+ content: " ";
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 0;
+ height: 0;
+ border-top: .5em solid #20a0ff;
+ border-left: .5em solid transparent;
+}
+.full-jcalendar__body .clearfix{
+ float: none;
+ width:100%;
+ clear: both;
+ height:0px;
+ line-height: 0px;
+}