Browse Source

添加农历

feature
dai 3 years ago
parent
commit
53da81fe2f
  1. 1102
      src/js/dai/nongli.js
  2. 73
      src/views/modules/communityParty/calendar/cpts/calendar.vue
  3. 350
      src/views/modules/communityParty/calendar/index.vue

1102
src/js/dai/nongli.js

File diff suppressed because it is too large

73
src/views/modules/communityParty/calendar/cpts/calendar.vue

@ -1,36 +1,43 @@
<template>
<div class="m-calendar">
<div class="top-list">
<div class="top"
v-for="(item, index) in top"
:class="{ 'z-weekend': index > 4 }"
:key="item">
<div
class="top"
v-for="(item, index) in top"
:class="{ 'z-weekend': index > 4 }"
:key="item"
>
{{ item }}
</div>
</div>
<!-- 日历号 -->
<div class="date-list">
<div class="date-item"
:class="{
<div
class="date-item"
:class="{
'z-on': item.format == currentDate,
'z-this-month': item.thisMonth,
'z-today': item.isToday,
'z-after-today': item.afterToday,
'z-weekend': item.day == 6 || item.day == 0,
}"
v-for="(item, index) in visibleCalendar"
:key="index"
@click="handleClickDate(item)">
v-for="(item, index) in visibleCalendar"
:key="index"
@click="handleClickDate(item)"
>
<div class="date">{{ item.date }}</div>
<slot name="date-item"
v-bind:item="item"
v-bind:index="index"></slot>
<div class="nongli">
{{ computeNongliText(item.year, item.month, item.date) }}
</div>
<slot name="date-item" v-bind:item="item" v-bind:index="index"> </slot>
</div>
</div>
</div>
</template>
<script>
import nongli from "@/js/dai/nongli";
export default {
props: {
currentYear: {
@ -42,7 +49,7 @@ export default {
default: new Date().getMonth(),
},
},
data () {
data() {
return {
top: ["一", "二", "三", "四", "五", "六", "日"],
currentDate: "",
@ -50,7 +57,7 @@ export default {
},
computed: {
// ,42
visibleCalendar () {
visibleCalendar() {
//
const { currentYear, currentMonth } = this;
const today = new Date();
@ -111,25 +118,30 @@ export default {
},
},
watch: {
visibleCalendar () {
visibleCalendar() {
this.init();
},
},
mounted () {
mounted() {
console.log("123", this.time);
this.init();
},
methods: {
init () {
computeNongliText(y, m, d) {
let item = nongli.solar2lunar(y, m, d);
return item.festival || item.lunarFestival || item.Term || item.IDayCn;
},
init() {
if (!this.currentDate) {
this.handleClickDate(
this.visibleCalendar.find((item) => item.isToday) ||
this.visibleCalendar.filter((item) => item.thisMonth)[0]
this.visibleCalendar.filter((item) => item.thisMonth)[0]
);
}
},
handleClickDate (item) {
handleClickDate(item) {
console.log("点击日历日期", item);
this.currentDate = item.format;
@ -165,8 +177,8 @@ export default {
width: 14.285%;
padding: 20px 0;
font-size: 20px;
font-weight:bold;
background-color: #E6A23C;
font-weight: bold;
background-color: #e6a23c;
text-align: center;
&::after {
@ -220,19 +232,30 @@ export default {
line-height: 50px;
font-size: 28px;
font-weight: bold;
color:#3e8ef7;
color: #3e8ef7;
}
.nongli{
position: absolute;
z-index: 0;
left: 0;
right: 0;
text-align: center;
}
&.z-on {
z-index: 21;
box-shadow: 0 0 15px 5px #a8cee0;
background:#3E8EF7;
background: #3e8ef7;
.date {
font-size: 30px;
color:#ffffff;
color: #ffffff;
font-weight: bold;
}
.nongli {
color: #ffffff;
}
}
&.z-this-month {

350
src/views/modules/communityParty/calendar/index.vue

@ -1,25 +1,28 @@
<template>
<div>
<div v-if="showType === 'list'"
class="g-cnt">
<div v-if="showType === 'list'" class="g-cnt">
<el-row :gutter="15">
<el-col :span="6">
<div class="m-sizer">
<div class="item">
<el-cascader class="customer_cascader"
ref="myCascader"
size="big"
v-model="fmData.orgId"
:options="partyOptions"
:props="partyOptionsProps"
:show-all-levels="false"
@change="handleChangeParty"></el-cascader>
<el-cascader
class="customer_cascader"
ref="myCascader"
size="big"
v-model="fmData.orgId"
:options="partyOptions"
:props="partyOptionsProps"
:show-all-levels="false"
@change="handleChangeParty"
></el-cascader>
</div>
<div class="item">
<el-radio v-model="fmData.isSelf"
label="1">本人创建的活动</el-radio>
<el-radio v-model="fmData.isSelf"
label="0">本组织所有活动</el-radio>
<el-radio v-model="fmData.isSelf" label="1"
>本人创建的活动</el-radio
>
<el-radio v-model="fmData.isSelf" label="0"
>本组织所有活动</el-radio
>
</div>
</div>
@ -31,16 +34,20 @@
<div class="date-week">{{ currentDate.dayFormat }}</div>
</div>
<div class="m-list"
v-if="
<div
class="m-list"
v-if="
currentDateData.activityList.length > 0 ||
currentDateData.scheduleList.length > 0
">
"
>
<div class="list-title">今日活动/日程</div>
<div class="list">
<div class="item"
:key="item.activityId"
v-for="item in currentDateData.activityList">
<div
class="item"
:key="item.activityId"
v-for="item in currentDateData.activityList"
>
<div class="item-title">
{{ item.theme }}
</div>
@ -60,23 +67,33 @@
<span>参加组织</span>
<span>{{ item.joinOrgs.join("、") }}</span>
</div>
<div v-if="item.isMe"
class="item-ope">
<el-button type="primary"
v-if="item.isPublish === '0'"
size="mini"
@click="handleClickHuodong('publish', item)">发布</el-button>
<el-button type="success"
size="mini"
@click="handleClickHuodong('edit', item)">修改</el-button>
<el-button size="mini"
@click="handleClickHuodong('del', item)">删除</el-button>
<div v-if="item.isMe" class="item-ope">
<el-button
type="primary"
v-if="item.isPublish === '0'"
size="mini"
@click="handleClickHuodong('publish', item)"
>发布</el-button
>
<el-button
type="success"
size="mini"
@click="handleClickHuodong('edit', item)"
>修改</el-button
>
<el-button
size="mini"
@click="handleClickHuodong('del', item)"
>删除</el-button
>
</div>
</div>
<div class="item"
:key="item.scheduleId"
v-for="item in currentDateData.scheduleList">
<div
class="item"
:key="item.scheduleId"
v-for="item in currentDateData.scheduleList"
>
<div class="item-title">
{{ item.title }}
</div>
@ -93,22 +110,29 @@
<span>{{ item.remark }}</span>
</div>
<div class="item-ope">
<el-button type="success"
size="mini"
@click="handleClickRicheng('edit', item)">修改</el-button>
<el-button size="mini"
@click="handleClickRicheng('del', item)">删除</el-button>
<el-button
type="success"
size="mini"
@click="handleClickRicheng('edit', item)"
>修改</el-button
>
<el-button
size="mini"
@click="handleClickRicheng('del', item)"
>删除</el-button
>
</div>
</div>
</div>
</div>
<div class="m-ope">
<el-button type="warning"
style="width: 48%"
@click="addHudong">添加活动计划</el-button>
<el-button style="width: 48%"
@click="addRicheng">添加日程</el-button>
<el-button type="warning" style="width: 48%" @click="addHudong"
>添加活动计划</el-button
>
<el-button style="width: 48%" @click="addRicheng"
>添加日程</el-button
>
</div>
</el-col>
@ -116,54 +140,74 @@
<div class="m-cal">
<div class="hd">
<div class="hd-year">
<el-date-picker v-model="currentYearStr"
value-format="yyyy"
type="year"
placeholder="选择年度"
size="big"
style="width: 100px;">
<el-date-picker
v-model="currentYearStr"
value-format="yyyy"
type="year"
placeholder="选择年度"
size="big"
style="width: 100px"
:editable="false"
:clearable="false"
>
</el-date-picker>
</div>
<div class="hd-month">
<div class="month-item"
:class="{ 'z-on': m - 1 == currentMonth }"
:key="'month' + m"
@click="currentMonth = m - 1"
v-for="m in 12">
<el-badge :value="monthData[m-1]"
:hidden="monthData[m-1] == 0"
class="item">
<div
class="month-item"
:class="{ 'z-on': m - 1 == currentMonth }"
:key="'month' + m"
@click="currentMonth = m - 1"
v-for="m in 12"
>
<el-badge
:value="monthData[m - 1]"
:hidden="monthData[m - 1] == 0"
class="item"
>
<div class="month-text">{{ m }}</div>
</el-badge>
</div>
</div>
<div class="hd-btn">
<el-button type="primary"
size="big"
@click="handleAddYearPlan"
style="padding-left:10px; padding-right:10px;">生成年度活动计划</el-button>
<el-button
type="primary"
size="big"
@click="handleAddYearPlan"
style="padding-left: 10px; padding-right: 10px"
>生成年度活动计划</el-button
>
</div>
</div>
<calendar :currentYear="currentYear"
:currentMonth="currentMonth"
@rangeChange="handleRangeChange"
@clickDate="handleChangeDate">
<calendar
:currentYear="currentYear"
:currentMonth="currentMonth"
@rangeChange="handleRangeChange"
@clickDate="handleChangeDate"
>
<template v-slot:date-item="{ item, index }">
<div class="tip"
v-if="
<div
class="tip"
v-if="
rangeData[item.dateId] &&
rangeData[item.dateId].activityList.length > 0
">
<div class="tip-num"
v-if="rangeData[item.dateId].activityList.length > 1">
"
>
<div
class="tip-num"
v-if="rangeData[item.dateId].activityList.length > 1"
>
{{ rangeData[item.dateId].activityList.length }}
</div>
<div class="tip-text">
<span class="z-on">
{{ rangeData[item.dateId].activityList[0].actTypeName }}</span>
{{
rangeData[item.dateId].activityList[0].actTypeName
}}</span
>
{{
rangeData[item.dateId].activityList[0].isPublish==='0'
rangeData[item.dateId].activityList[0].isPublish === "0"
? "(未发布)"
: "(已发布)"
}}
@ -172,11 +216,12 @@
{{ rangeData[item.dateId].activityList[0].topic }}
</div>
<div class="all-list"
:class="computeAllListClass(index)">
<div class="item"
:key="item.activityId"
v-for="item in rangeData[item.dateId].activityList">
<div class="all-list" :class="computeAllListClass(index)">
<div
class="item"
:key="item.activityId"
v-for="item in rangeData[item.dateId].activityList"
>
<div class="item-title">
{{ item.theme }}
</div>
@ -199,21 +244,24 @@
</div>
</div>
</div>
<div class="corn"
v-if="
<div
class="corn"
v-if="
rangeData[item.dateId] &&
rangeData[item.dateId].scheduleList.length > 0
">
"
>
<div class="corn-num">
{{ rangeData[item.dateId].scheduleList.length }}
</div>
<div class="corn-text">日程</div>
<div class="all-list"
:class="computeAllListClass(index)">
<div class="item"
:key="item.scheduleId"
v-for="item in rangeData[item.dateId].scheduleList">
<div class="all-list" :class="computeAllListClass(index)">
<div
class="item"
:key="item.scheduleId"
v-for="item in rangeData[item.dateId].scheduleList"
>
<div class="item-title">
{{ item.title }}
</div>
@ -240,42 +288,52 @@
</div>
<div v-if="showType === 'yearplan'">
<yearplan-list :currentYearStr="currentYearStr"
@handleOk="handleAddPlanOk"
@handleClose="handleAddPlanClose"></yearplan-list>
<yearplan-list
:currentYearStr="currentYearStr"
@handleOk="handleAddPlanOk"
@handleClose="handleAddPlanClose"
></yearplan-list>
</div>
<el-dialog v-if="showAdd"
:visible.sync="showAdd"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="addDiaTitle"
width="850px"
top="5vh"
class="dialog-h"
@closed="showAdd = false">
<add-activity ref="ref_add_form"
:formType="formType"
:icPartyActId="icPartyActId"
:defaultTime="currentDate.dateId"
@handleOk="handleOk"
@handleClose="handleClose"></add-activity>
<el-dialog
v-if="showAdd"
:visible.sync="showAdd"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="addDiaTitle"
width="850px"
top="5vh"
class="dialog-h"
@closed="showAdd = false"
>
<add-activity
ref="ref_add_form"
:formType="formType"
:icPartyActId="icPartyActId"
:defaultTime="currentDate.dateId"
@handleOk="handleOk"
@handleClose="handleClose"
></add-activity>
</el-dialog>
<el-dialog v-if="showSchedule"
:visible.sync="showSchedule"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="scheduleDiaTitle"
width="850px"
top="5vh"
class="dialog-h"
@closed="showSchedule = false">
<schedule-form ref="ref_schedule_form"
:formType="formType"
:scheduleId="scheduleId"
@handleOk="handleOk"
@handleClose="handleClose">
<el-dialog
v-if="showSchedule"
:visible.sync="showSchedule"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="scheduleDiaTitle"
width="850px"
top="5vh"
class="dialog-h"
@closed="showSchedule = false"
>
<schedule-form
ref="ref_schedule_form"
:formType="formType"
:scheduleId="scheduleId"
@handleOk="handleOk"
@handleClose="handleClose"
>
</schedule-form>
</el-dialog>
</div>
@ -289,7 +347,7 @@ import yearplanList from "../orgActivity/activivityList/yearplanList";
import addActivity from "../orgActivity/activivityList/addActivity";
import scheduleForm from "../orgActivity/activivityList/scheduleForm";
function doAfter (fn) {
function doAfter(fn) {
return new Promise(async (resolve) => {
while (!fn()) {
await nextTick(100);
@ -306,7 +364,7 @@ export default {
addActivity,
scheduleForm,
},
data () {
data() {
let todayObj = new Date();
return {
@ -357,10 +415,10 @@ export default {
};
},
computed: {
currentYear () {
currentYear() {
return parseInt(this.currentYearStr);
},
apiParams () {
apiParams() {
const { currentYear, fmData } = this;
return {
yearId: currentYear,
@ -387,13 +445,13 @@ export default {
this.getMonthData();
},
},
async mounted () {
async mounted() {
await this.getPartyOptions();
this.getMonthData();
},
methods: {
//
addHudong () {
addHudong() {
this.icPartyActId = "";
this.addDiaTitle = "新增活动计划";
this.formType = "add";
@ -401,14 +459,14 @@ export default {
},
//
addRicheng () {
addRicheng() {
this.formType = "schedule";
this.scheduleId = ''
this.scheduleId = "";
this.showSchedule = true;
},
//
handleClickHuodong (type, item) {
handleClickHuodong(type, item) {
console.log(type, item);
this.icPartyActId = item.activityId;
@ -452,7 +510,7 @@ export default {
}
},
async publishActivity () {
async publishActivity() {
const url = `/resi/partymember/icPartyAct/publish/${this.icPartyActId}`;
const { data, code, msg } = await requestPost(url, {});
@ -465,7 +523,7 @@ export default {
}
},
async cancelActivity () {
async cancelActivity() {
const url = "/resi/partymember/icPartyAct/del";
let params = [];
@ -482,7 +540,7 @@ export default {
},
//
handleClickRicheng (type, item) {
handleClickRicheng(type, item) {
console.log(type, item);
this.scheduleId = item.scheduleId;
if (type == "edit") {
@ -507,7 +565,7 @@ export default {
}
},
async cancelSchedule () {
async cancelSchedule() {
const url = "/resi/partymember/icSchedule/del";
let params = [];
@ -524,15 +582,15 @@ export default {
},
//
refreshData () {
refreshData() {
this.getMonthData();
this.getRangeData();
this.getCurrentDateData();
},
handleChangeParty () { },
handleChangeParty() {},
handleChangeDate (item) {
handleChangeDate(item) {
console.log("handleChangeDate");
this.currentYearStr = item.year + "";
this.currentMonth = item.month;
@ -541,7 +599,7 @@ export default {
this.getCurrentDateData();
},
computeAllListClass (index) {
computeAllListClass(index) {
let x = index % 7;
let y = Math.floor(index / 7);
if (x < 3) {
@ -559,12 +617,12 @@ export default {
}
},
handleRangeChange (arr) {
handleRangeChange(arr) {
this.rangeDateList = arr;
this.getRangeData();
},
async getRangeData () {
async getRangeData() {
const arr = this.rangeDateList;
const url = "/resi/partymember/icPartyAct/homeSearch";
@ -602,7 +660,7 @@ export default {
}
},
async getMonthData () {
async getMonthData() {
const url = "/resi/partymember/icPartyAct/homeMonthTotal";
if (!this.apiParams.orgId) return;
@ -616,14 +674,14 @@ export default {
this.monthData[index] = parseInt(item.count);
});
console.log("--------------monthData", this.monthData);
this.$forceUpdate()
this.$forceUpdate();
}
} else {
this.$message.error(msg);
}
},
async getCurrentDateData () {
async getCurrentDateData() {
const url = "/resi/partymember/icPartyAct/actAndScheduleList";
if (!this.apiParams.orgId) return;
@ -640,7 +698,7 @@ export default {
}
},
async getPartyOptions () {
async getPartyOptions() {
const url = "/resi/partymember/icPartyOrg/getSearchTreelist";
let params = {
customerId: localStorage.getItem("customerId"),
@ -657,25 +715,25 @@ export default {
}
},
handleAddYearPlan () {
handleAddYearPlan() {
this.showType = "yearplan";
},
handleAddPlanOk () {
handleAddPlanOk() {
this.showType = "list";
this.refreshData();
},
handleAddPlanClose () {
handleAddPlanClose() {
this.showType = "list";
},
handleClose () {
handleClose() {
this.formType = "";
this.showAdd = false;
this.showSchedule = false;
},
handleOk () {
handleOk() {
this.handleClose();
this.refreshData();
},

Loading…
Cancel
Save