From 93612dbaf9220c0df7b66d594422d7abfc35f193 Mon Sep 17 00:00:00 2001 From: tangxinyue <524779910@qq.com> Date: Tue, 6 Jan 2026 15:01:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=B4=A6=E5=8D=9550%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/main.css | 4 + common/specify-style.less | 82 ++ .../customPickerView/index.css | 19 + .../customPickerView/index.js | 53 ++ .../customPickerView/index.vue | 11 + .../dateSelector/index.css | 57 ++ .../dateSelector/index.js | 209 ++++ .../dateSelector/index.vue | 41 + .../dateTimePicker/constant.js | 15 + .../dateTimePicker/dateUtil.js | 93 ++ .../dateTimePicker/index.js | 378 ++++++++ .../dateTimePicker/index.vue | 9 + pages/bill/add-bill/add-bill.json | 897 ++++++++++++++++++ pages/bill/add-bill/add-bill.vue | 748 ++++++++++++++- static/image/bill/add-bill/add-avatar.png | Bin 0 -> 2100 bytes static/image/bill/add-bill/edit.png | Bin 0 -> 966 bytes .../bill/add-bill/service-detail-image.png | Bin 0 -> 1058 bytes static/image/bill/blue-icon/AAshoukuan.png | Bin 0 -> 1480 bytes .../bill/blue-icon/chakanjiaofeijindu.png | Bin 0 -> 1200 bytes .../bill/blue-icon/chakanwanglaijilu.png | Bin 0 -> 898 bytes .../bill/blue-icon/duidingdanyouyiwen.png | Bin 0 -> 1330 bytes .../image/bill/blue-icon/lianxifukuanfang.png | Bin 0 -> 1164 bytes .../image/bill/blue-icon/lianxishangjia.png | Bin 0 -> 1131 bytes .../bill/blue-icon/lianxishoukuanfang.png | Bin 0 -> 1131 bytes .../bill/blue-icon/shenqingdianzihuidan.png | Bin 0 -> 796 bytes .../blue-icon/wanglailiushuizhengming.png | Bin 0 -> 718 bytes .../bill/blue-icon/zhuanzhangpingzheng.png | Bin 0 -> 979 bytes static/image/bill/white-icon/AAshoukuan.png | Bin 0 -> 1135 bytes .../bill/white-icon/chakanjiaofeijindu.png | Bin 0 -> 958 bytes .../bill/white-icon/chakanwanglaijilu.png | Bin 0 -> 703 bytes .../bill/white-icon/duidingdanyouyiwen.png | Bin 0 -> 1019 bytes .../bill/white-icon/lianxifukuanfang.png | Bin 0 -> 885 bytes .../image/bill/white-icon/lianxishangjia.png | Bin 0 -> 866 bytes .../bill/white-icon/lianxishoukuanfang.png | Bin 0 -> 866 bytes .../bill/white-icon/shenqingdianzihuidan.png | Bin 0 -> 640 bytes .../white-icon/wanglailiushuizhengming.png | Bin 0 -> 560 bytes .../bill/white-icon/zhuanzhangpingzheng.png | Bin 0 -> 757 bytes static/image/common/close.png | Bin 0 -> 444 bytes static/image/common/random-dice.png | Bin 0 -> 13103 bytes 39 files changed, 2607 insertions(+), 9 deletions(-) create mode 100644 common/specify-style.less create mode 100644 components/dengrq-datetime-picker/customPickerView/index.css create mode 100644 components/dengrq-datetime-picker/customPickerView/index.js create mode 100644 components/dengrq-datetime-picker/customPickerView/index.vue create mode 100644 components/dengrq-datetime-picker/dateSelector/index.css create mode 100644 components/dengrq-datetime-picker/dateSelector/index.js create mode 100644 components/dengrq-datetime-picker/dateSelector/index.vue create mode 100644 components/dengrq-datetime-picker/dateTimePicker/constant.js create mode 100644 components/dengrq-datetime-picker/dateTimePicker/dateUtil.js create mode 100644 components/dengrq-datetime-picker/dateTimePicker/index.js create mode 100644 components/dengrq-datetime-picker/dateTimePicker/index.vue create mode 100644 pages/bill/add-bill/add-bill.json create mode 100644 static/image/bill/add-bill/add-avatar.png create mode 100644 static/image/bill/add-bill/edit.png create mode 100644 static/image/bill/add-bill/service-detail-image.png create mode 100644 static/image/bill/blue-icon/AAshoukuan.png create mode 100644 static/image/bill/blue-icon/chakanjiaofeijindu.png create mode 100644 static/image/bill/blue-icon/chakanwanglaijilu.png create mode 100644 static/image/bill/blue-icon/duidingdanyouyiwen.png create mode 100644 static/image/bill/blue-icon/lianxifukuanfang.png create mode 100644 static/image/bill/blue-icon/lianxishangjia.png create mode 100644 static/image/bill/blue-icon/lianxishoukuanfang.png create mode 100644 static/image/bill/blue-icon/shenqingdianzihuidan.png create mode 100644 static/image/bill/blue-icon/wanglailiushuizhengming.png create mode 100644 static/image/bill/blue-icon/zhuanzhangpingzheng.png create mode 100644 static/image/bill/white-icon/AAshoukuan.png create mode 100644 static/image/bill/white-icon/chakanjiaofeijindu.png create mode 100644 static/image/bill/white-icon/chakanwanglaijilu.png create mode 100644 static/image/bill/white-icon/duidingdanyouyiwen.png create mode 100644 static/image/bill/white-icon/lianxifukuanfang.png create mode 100644 static/image/bill/white-icon/lianxishangjia.png create mode 100644 static/image/bill/white-icon/lianxishoukuanfang.png create mode 100644 static/image/bill/white-icon/shenqingdianzihuidan.png create mode 100644 static/image/bill/white-icon/wanglailiushuizhengming.png create mode 100644 static/image/bill/white-icon/zhuanzhangpingzheng.png create mode 100644 static/image/common/close.png create mode 100644 static/image/common/random-dice.png diff --git a/common/main.css b/common/main.css index 0e53fce..955bdb1 100644 --- a/common/main.css +++ b/common/main.css @@ -367,6 +367,10 @@ body { display: block; } +.over-hidden { + overflow: hidden; +} + /* 文本截断 */ .text-ellipsis { overflow: hidden; diff --git a/common/specify-style.less b/common/specify-style.less new file mode 100644 index 0000000..2dcb29f --- /dev/null +++ b/common/specify-style.less @@ -0,0 +1,82 @@ +.timeBox { + background-color: #fff; + padding: 10px; + + .titleBox { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 10px; + } +} + +.bill-classify-box { + background-color: #fff; + border-radius: 24rpx 24rpx 0 0; + padding: 32rpx 24rpx; + + .title-box { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 50rpx; + + .title { + font-size: 32rpx; + font-weight: 500; + color: var(--font-color); + } + + .close-image { + width: 28rpx; + height: 28rpx; + } + } + + .bill-classify-content { + display: flex; + flex-wrap: wrap; + max-height: 50vh; + overflow: hidden; + overflow-y: scroll; + + .bill-classify-item { + width: 25%; + display: flex; + flex-direction: column; + align-items: center; + margin-bottom: 20rpx; + margin-bottom: 36rpx; + + .bill-classify-item-text { + font-size: 28rpx; + color: #3D3D3D; + width: 150rpx; + height: 64rpx; + line-height: 64rpx; + text-align: center; + border-radius: 12rpx; + border: 2rpx solid #EDEDED; + } + + .active-item { + background-color: #1676FE; + color: #fff; + border: none; + } + } + } + + .confirm-btn { + width: 100%; + height: 80rpx; + line-height: 80rpx; + text-align: center; + font-size: 36rpx; + color: #fff; + background-color: #1777FF; + color: #FFFFFF; + border-radius: 570rpx 570rpx 570rpx 570rpx; + margin-top: 40rpx; + } +} \ No newline at end of file diff --git a/components/dengrq-datetime-picker/customPickerView/index.css b/components/dengrq-datetime-picker/customPickerView/index.css new file mode 100644 index 0000000..c347f8e --- /dev/null +++ b/components/dengrq-datetime-picker/customPickerView/index.css @@ -0,0 +1,19 @@ +.picker-view { + height: 356rpx; +} + +.picker-view-column { + font-size: 14px; + line-height: 34px; + text-align: center; + color: #333; +} + +/* 覆盖默认样式,样式可以按需自己改 */ +.uni-picker-view-indicator { + background-color: rgba(106, 123, 255, 0.1); +} +.uni-picker-view-indicator::before, +.uni-picker-view-indicator::after { + content: none; +} diff --git a/components/dengrq-datetime-picker/customPickerView/index.js b/components/dengrq-datetime-picker/customPickerView/index.js new file mode 100644 index 0000000..7849bc7 --- /dev/null +++ b/components/dengrq-datetime-picker/customPickerView/index.js @@ -0,0 +1,53 @@ +export default { + data() { + return {}; + }, + props: { + // 所有列选项数据 + columns: { + type: Array, + default: () => [] + }, + // 每一列默认选中值数组,不传默认选中第一项 + selectVals: { + type: Array, + default: () => [] + } + }, + computed: { + // 每一列选中项的索引,当默认选中值变化的时候这个值也要变化 + indexArr: { + // 多维数组,深度监听 + cache: false, + get() { + if (this.selectVals.length > 0) { + return this.columns.map((col, cIdx) => { + return col.findIndex((i) => i == this.selectVals[cIdx]); + }); + } else { + return [].fill(0, 0, this.columns.length); + } + } + } + }, + methods: { + onChange(e) { + const { value } = e.detail; + + let ret = this.columns.map((item, index) => { + let idx = value[index]; + if (idx < 0) { + idx = 0; + } + if (idx > item.length - 1) { + idx = item.length - 1; + } + return item[idx]; + }); + + this.$emit('onChange', { + value: ret + }); + } + } +}; diff --git a/components/dengrq-datetime-picker/customPickerView/index.vue b/components/dengrq-datetime-picker/customPickerView/index.vue new file mode 100644 index 0000000..741969e --- /dev/null +++ b/components/dengrq-datetime-picker/customPickerView/index.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/components/dengrq-datetime-picker/dateSelector/index.css b/components/dengrq-datetime-picker/dateSelector/index.css new file mode 100644 index 0000000..ca8ef1a --- /dev/null +++ b/components/dengrq-datetime-picker/dateSelector/index.css @@ -0,0 +1,57 @@ +.date-selector { + width: 100%; + font-size: 12px; + color: #333; +} + +.select-date-wrapper { + margin-bottom: 8px; + display: flex; + justify-content: space-between; + align-items: center; +} + +.select-date { + padding: 10px; + flex: 1; + border-radius: 2px; + border: 1px solid rgba(6, 7, 46, 0.05); + font-size: 12px; +} + +.select-date.active { + border-color: #6a7bff; +} + +.select-date-placeholder { + color: rgba(6, 7, 46, 0.3); +} + +.btn-group { + display: flex; + margin: 48rpx 0; + justify-content: space-between; +} + +.btn-confirm { + width: 180px; + height: 40px; + line-height: 40px; + background: rgba(33, 58, 255, 0.85); + border-radius: 4px; + font-size: 14px; + color: #fff; + text-align: center; +} + +.btn-cancel { + width: 144px; + height: 40px; + line-height: 38px; + text-align: center; + background: #fff; + border-radius: 4px; + border: 1px solid #979797; + font-size: 14px; + color: #06072e; +} diff --git a/components/dengrq-datetime-picker/dateSelector/index.js b/components/dengrq-datetime-picker/dateSelector/index.js new file mode 100644 index 0000000..39b6cd8 --- /dev/null +++ b/components/dengrq-datetime-picker/dateSelector/index.js @@ -0,0 +1,209 @@ +import DateTimePicker from '../dateTimePicker/index.vue'; +import DateUtil from '../dateTimePicker/dateUtil'; +import { DATE_TYPES } from '../dateTimePicker/constant'; + +export default { + components: { + DateTimePicker + }, + data() { + return { + showStartDatePicker: false, + showEndDatePicker: false, + startDate: '', + endDate: '', + activeDate: 'startDate' // 正在处理哪一个日期值,startDate/endDate + }; + }, + props: { + // 日期筛选模式,1:年月日(默认),2:年月,3:年,4:年月日时分秒,5:时分秒,6:时分 + mode: { + type: Number, + default: DATE_TYPES.YMD + }, + // 默认开始日期 + defaultStartDate: { + type: String, + default: '' + }, + // 默认结束日期 + defaultEndDate: { + type: String, + default: '' + }, + // 可选的最小日期 + minDate: { + type: String, + default: '' + }, + // 可选的最大日期 + maxDate: { + type: String, + default: '' + } + }, + watch: { + mode() { + // 筛选模式更换时清空一下数据 + this.resetData(); + }, + startDate() { + this.$emit('onChange', { + startDate: this.startDate, + endDate: this.endDate + }); + }, + endDate() { + this.$emit('onChange', { + startDate: this.startDate, + endDate: this.endDate + }); + }, + defaultStartDate: { + handler(defaultStartDate) { + if (!defaultStartDate) { + return; + } + + if (this.mode == DATE_TYPES.HMS || this.mode == DATE_TYPES.HM) { + console.error('时分秒/时分模式不支持设置默认开始时间'); + return; + } + + if (DateUtil.isBefore(defaultStartDate, this.minDate)) { + console.warn( + `默认开始日期不可小于最小可选日期,已把默认开始日期设为最小可选日期。默认开始日期:${defaultStartDate},最小可选日期:${this.minDate}` + ); + this.startDate = this.getModeFormatDateString(this.minDate); + } else { + this.startDate = this.getModeFormatDateString(defaultStartDate); + } + }, + immediate: true + }, + defaultEndDate: { + handler(defaultEndDate) { + if (!defaultEndDate) { + return; + } + + if (this.mode == DATE_TYPES.HMS || this.mode == DATE_TYPES.HM) { + console.error('时分秒/时分模式不支持设置默认结束时间'); + return; + } + + if (DateUtil.isAfter(defaultEndDate, this.maxDate)) { + console.warn( + `默认结束日期不可大于最大可选日期,已把默认结束日期设为最大可选日期。默认结束日期:${defaultEndDate},最大可选日期:${this.maxDate}` + ); + this.endDate = this.getModeFormatDateString(this.maxDate); + } else { + this.endDate = this.getModeFormatDateString(defaultEndDate); + } + }, + immediate: true + }, + minDate(val) { + if ((val && this.mode == DATE_TYPES.HMS) || this.mode == DATE_TYPES.HM) { + console.error('时分秒/时分模式不支持设置最小可选时间'); + return; + } + }, + maxDate(val) { + if ((val && this.mode == DATE_TYPES.HMS) || this.mode == DATE_TYPES.HM) { + console.error('时分秒/时分模式不支持设置最大可选时间'); + return; + } + } + }, + methods: { + onTapStartDate() { + this.showEndDatePicker = false; + if (!this.startDate) { + this.startDate = this.getModeFormatDateString(new Date()); + } + this.activeDate = 'startDate'; + this.showStartDatePicker = true; + }, + onTapEndDate() { + this.showStartDatePicker = false; + if (!this.endDate) { + this.endDate = this.startDate; + } + this.activeDate = 'endDate'; + this.showEndDatePicker = true; + }, + onChangeStartDate(date) { + this.startDate = date; + }, + onChangeEndDate(date) { + this.endDate = date; + }, + validateInput() { + if (!this.startDate) { + uni.showToast({ + title: '请选择开始时间', + icon: 'none' + }); + return false; + } else if (!this.endDate) { + uni.showToast({ + title: '请选择结束时间', + icon: 'none' + }); + return false; + } else if (DateUtil.isAfter(this.startDate, this.endDate)) { + uni.showToast({ + title: '结束时间不能小于开始时间', + icon: 'none' + }); + return false; + } + return true; + }, + onCancel() { + this.resetData(); + }, + onConfirm() { + if (this.validateInput()) { + this.$emit('onSubmit', { + startDate: this.startDate, + endDate: this.endDate + }); + this.showStartDatePicker = false; + this.showEndDatePicker = false; + } + }, + resetData() { + this.startDate = ''; + this.endDate = ''; + this.activeDate = 'startDate'; + this.showStartDatePicker = false; + this.showEndDatePicker = false; + }, + // 返回对应日期模式的时间字符串 + getModeFormatDateString(date) { + let fmt = 'YYYY-MM-DD'; + switch (this.mode) { + case DATE_TYPES.YM: + fmt = 'YYYY-MM'; + break; + case DATE_TYPES.Y: + fmt = 'YYYY'; + break; + case DATE_TYPES['YMD-HMS']: + fmt = 'YYYY-MM-DD HH:mm:ss'; + break; + case DATE_TYPES.HMS: + fmt = 'HH:mm:ss'; + break; + case DATE_TYPES.HM: + fmt = 'HH:mm'; + break; + default: + break; + } + return DateUtil.formatDate(date, fmt); + } + } +}; diff --git a/components/dengrq-datetime-picker/dateSelector/index.vue b/components/dengrq-datetime-picker/dateSelector/index.vue new file mode 100644 index 0000000..1f67033 --- /dev/null +++ b/components/dengrq-datetime-picker/dateSelector/index.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/components/dengrq-datetime-picker/dateTimePicker/constant.js b/components/dengrq-datetime-picker/dateTimePicker/constant.js new file mode 100644 index 0000000..f4ae3bd --- /dev/null +++ b/components/dengrq-datetime-picker/dateTimePicker/constant.js @@ -0,0 +1,15 @@ +// 日期模式 +export const DATE_TYPES = { + // 年月日 + YMD: 1, + // 年月 + YM: 2, + // 年份 + Y: 3, + // 年月日时分秒 + 'YMD-HMS': 4, + // 时分秒 + HMS: 5, + // 时分 + HM: 6 +}; diff --git a/components/dengrq-datetime-picker/dateTimePicker/dateUtil.js b/components/dengrq-datetime-picker/dateTimePicker/dateUtil.js new file mode 100644 index 0000000..d9bd5b9 --- /dev/null +++ b/components/dengrq-datetime-picker/dateTimePicker/dateUtil.js @@ -0,0 +1,93 @@ +/** + * 日期时间格式化 + * @param {Date} date 要格式化的日期对象 + * @param {String} fmt 格式化字符串,eg:YYYY-MM-DD HH:mm:ss + * @returns 格式化后的日期字符串 + */ +function formatDate(date, fmt) { + if (typeof date == 'string') { + date = new Date(handleDateStr(date)); + } + + const o = { + 'M+': date.getMonth() + 1, // 月份 + 'd+': date.getDate(), // 日 + 'D+': date.getDate(), // 日 + 'H+': date.getHours(), // 小时 + 'h+': date.getHours(), // 小时 + 'm+': date.getMinutes(), // 分 + 's+': date.getSeconds(), // 秒 + 'q+': Math.floor((date.getMonth() + 3) / 3), // 季度 + S: date.getMilliseconds() // 毫秒 + }; + + if (/([y|Y]+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').slice(4 - RegExp.$1.length)); + } + + for (const k in o) { + if (new RegExp('(' + k + ')').test(fmt)) { + fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).slice(('' + o[k]).length)); + } + } + + return fmt; +} + +/** + * 处理时间字符串,兼容ios下new Date()返回NaN问题 + * @param {*} dateStr 日期字符串 + * @returns + */ +function handleDateStr(dateStr) { + return dateStr.replace(/\-/g, '/'); +} + +/** + * 判断日期1是否在日期2之前,即日期1小于日期2 + * @param {Date} date1 + * @param {Date} date2 + * @returns + */ +function isBefore(date1, date2) { + if (typeof date1 == 'string') { + date1 = new Date(handleDateStr(date1)); + } + if (typeof date2 == 'string') { + date2 = new Date(handleDateStr(date2)); + } + return date1.getTime() < date2.getTime(); +} + +/** + * 判断日期1是否在日期2之后,即日期1大于日期2 + * @param {Date} date1 + * @param {Date} date2 + * @returns + */ +function isAfter(date1, date2) { + if (typeof date1 == 'string') { + date1 = new Date(handleDateStr(date1)); + } + if (typeof date2 == 'string') { + date2 = new Date(handleDateStr(date2)); + } + return date1.getTime() > date2.getTime(); +} + +/** + * 检查传入的字符串是否能转换为有效的Date对象 + * @param {String} date + * @returns {Boolean} + */ +function isValid(date) { + return new Date(date) !== 'Invalid Date' && !isNaN(new Date(date)); +} + +export default { + formatDate, + handleDateStr, + isBefore, + isAfter, + isValid +}; diff --git a/components/dengrq-datetime-picker/dateTimePicker/index.js b/components/dengrq-datetime-picker/dateTimePicker/index.js new file mode 100644 index 0000000..1e2d8fd --- /dev/null +++ b/components/dengrq-datetime-picker/dateTimePicker/index.js @@ -0,0 +1,378 @@ +import CustomPickerView from '../customPickerView/index.vue'; +import DateUtil from '../dateTimePicker/dateUtil'; +import { DATE_TYPES } from './constant'; + +export default { + components: { + CustomPickerView + }, + props: { + // 日期模式,1:年月日(默认),2:年月,3:年份,4:年月日时分秒,5:时分秒,6:时分 + mode: { + type: Number, + default: DATE_TYPES.YMD + }, + // 可选的最小日期,默认十年前 + minDate: { + type: String, + default: '' + }, + // 可选的最大日期,默认十年后 + maxDate: { + type: String, + default: '' + }, + // 默认选中日期(注意要跟日期模式对应) + defaultDate: { + type: String, + default: '' + } + }, + data() { + return { + selectYear: new Date().getFullYear(), + selectMonth: new Date().getMonth() + 1, // 选中的月份,1~12 + selectDay: new Date().getDate(), + selectHour: new Date().getHours(), + selectMinute: new Date().getMinutes(), + selectSecond: new Date().getSeconds() + }; + }, + watch: { + defaultDate: { + immediate: true, + handler(val) { + if (val) { + if (this.mode == DATE_TYPES.YM && val.replace(/\-/g, '/').split('/').length == 2) { + // 日期模式为年月时有可能传进来的defaultDate是2022-02这样的格式,在ios下new Date会报错,加上日期部分做兼容 + val += '-01'; + } else if (this.mode == DATE_TYPES.HMS || this.mode == DATE_TYPES.HM) { + // 只有时分秒或者只有时分是不能调用new Date生成Date对象的,先加上一个假设的年月日(就取当年一月一日)来兼容 + const now = new Date(); + val = `${now.getFullYear()}-01-01 ${val}`; + } + + let date = new Date(DateUtil.handleDateStr(val)); + this.selectYear = date.getFullYear(); + this.selectMonth = date.getMonth() + 1; + this.selectDay = date.getDate(); + this.selectHour = date.getHours(); + this.selectMinute = date.getMinutes(); + this.selectSecond = date.getSeconds(); + } + } + } + }, + computed: { + minDateObj() { + let minDate = this.minDate; + if (minDate) { + if (this.mode == DATE_TYPES.YM && minDate.replace(/\-/g, '/').split('/').length == 2) { + // 日期模式为年月时有可能传进来的minDate是2022-02这样的格式,在ios下new Date会报错,加上日期部分做兼容 + minDate += '-01'; + } else if (this.mode == DATE_TYPES.HMS || this.mode == DATE_TYPES.HM) { + // 只有时分秒或者只有时分是不能调用new Date生成Date对象的,先加上一个假设的年月日(就取当年一月一日)来兼容 + const now = new Date(); + minDate = `${now.getFullYear()}-01-01 ${minDate}`; + } + return new Date(DateUtil.handleDateStr(minDate)); + } else { + // 没有传最小日期,默认十年前 + let year = new Date().getFullYear() - 10; + minDate = new Date(year, 0, 1); + return minDate; + } + }, + maxDateObj() { + let maxDate = this.maxDate; + if (maxDate) { + if (this.mode == DATE_TYPES.YM && maxDate.replace(/\-/g, '/').split('/').length == 2) { + // 日期模式为年月时有可能传进来的maxDate是2022-02这样的格式,在ios下new Date会报错,加上日期部分做兼容 + maxDate += '-01'; + } else if (this.mode == DATE_TYPES.HMS || this.mode == DATE_TYPES.HM) { + // 只有时分秒或者只有时分是不能调用new Date生成Date对象的,先加上一个假设的年月日(就取当年一月一日)来兼容 + const now = new Date(); + maxDate = `${now.getFullYear()}-01-01 ${maxDate}`; + } + return new Date(DateUtil.handleDateStr(maxDate)); + } else { + // 没有传最大日期,默认十年后 + let year = new Date().getFullYear() + 10; + maxDate = new Date(year, 11, 31); + return maxDate; + } + }, + years() { + let years = []; + let minYear = this.minDateObj.getFullYear(); + let maxYear = this.maxDateObj.getFullYear(); + for (let i = minYear; i <= maxYear; i++) { + years.push(i); + } + + return years; + }, + months() { + let months = []; + let minMonth = 1; + let maxMonth = 12; + + // 如果选中的年份刚好是最小可选日期的年份,那月份就要从最小日期的月份开始 + if (this.selectYear == this.minDateObj.getFullYear()) { + minMonth = this.minDateObj.getMonth() + 1; + } + // 如果选中的年份刚好是最大可选日期的年份,那月份就要在最大日期的月份结束 + if (this.selectYear == this.maxDateObj.getFullYear()) { + maxMonth = this.maxDateObj.getMonth() + 1; + } + + for (let i = minMonth; i <= maxMonth; i++) { + months.push(i); + } + + return months; + }, + days() { + // 一年中12个月每个月的天数 + let monthDaysConfig = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + // 闰年2月有29天 + if (this.selectMonth == 2 && this.selectYear % 4 == 0) { + monthDaysConfig[1] = 29; + } + + let minDay = 1; + let maxDay = monthDaysConfig[this.selectMonth - 1]; + + if (this.selectYear == this.minDateObj.getFullYear() && this.selectMonth == this.minDateObj.getMonth() + 1) { + minDay = this.minDateObj.getDate(); + } + if (this.selectYear == this.maxDateObj.getFullYear() && this.selectMonth == this.maxDateObj.getMonth() + 1) { + maxDay = this.maxDateObj.getDate(); + } + + let days = []; + for (let i = minDay; i <= maxDay; i++) { + days.push(i); + } + + return days; + }, + hours() { + let hours = []; + let minHour = 0; + let maxHour = 23; + + if ( + this.selectYear == this.minDateObj.getFullYear() && + this.selectMonth == this.minDateObj.getMonth() + 1 && + this.selectDay == this.minDateObj.getDate() + ) { + minHour = this.minDateObj.getHours(); + } + if ( + this.selectYear == this.maxDateObj.getFullYear() && + this.selectMonth == this.maxDateObj.getMonth() + 1 && + this.selectDay == this.maxDateObj.getDate() + ) { + maxHour = this.maxDateObj.getHours(); + } + + for (let i = minHour; i <= maxHour; i++) { + hours.push(i); + } + + return hours; + }, + minutes() { + let mins = []; + let minMin = 0; + let maxMin = 59; + + if ( + this.selectYear == this.minDateObj.getFullYear() && + this.selectMonth == this.minDateObj.getMonth() + 1 && + this.selectDay == this.minDateObj.getDate() && + this.selectHour == this.minDateObj.getHours() + ) { + minMin = this.minDateObj.getMinutes(); + } + if ( + this.selectYear == this.maxDateObj.getFullYear() && + this.selectMonth == this.maxDateObj.getMonth() + 1 && + this.selectDay == this.maxDateObj.getDate() && + this.selectHour == this.maxDateObj.getHours() + ) { + maxMin = this.maxDateObj.getMinutes(); + } + + for (let i = minMin; i <= maxMin; i++) { + mins.push(i); + } + + return mins; + }, + seconds() { + let seconds = []; + let minSecond = 0; + let maxSecond = 59; + + if ( + this.selectYear == this.minDateObj.getFullYear() && + this.selectMonth == this.minDateObj.getMonth() + 1 && + this.selectDay == this.minDateObj.getDate() && + this.selectHour == this.minDateObj.getHours() && + this.selectMinute == this.minDateObj.getMinutes() + ) { + minSecond = this.minDateObj.getSeconds(); + } + if ( + this.selectYear == this.maxDateObj.getFullYear() && + this.selectMonth == this.maxDateObj.getMonth() + 1 && + this.selectDay == this.maxDateObj.getDate() && + this.selectHour == this.maxDateObj.getHours() && + this.selectMinute == this.maxDateObj.getMinutes() + ) { + maxSecond = this.maxDateObj.getSeconds(); + } + + for (let i = minSecond; i <= maxSecond; i++) { + seconds.push(i); + } + + return seconds; + }, + // 传给pickerView组件的数组,根据mode来生成不同的数据 + dateConfig() { + let years = this.years.map((y) => y + '年'); + let months = this.months.map((m) => m + '月'); + let days = this.days.map((d) => d + '日'); + let hours = this.hours.map((h) => h + '时'); + let minutes = this.minutes.map((m) => m + '分'); + let seconds = this.seconds.map((s) => s + '秒'); + + let ret = []; + switch (this.mode) { + case DATE_TYPES.YM: + ret = [years, months]; + break; + case DATE_TYPES.Y: + ret = [years]; + break; + case DATE_TYPES['YMD-HMS']: + ret = [years, months, days, hours, minutes, seconds]; + break; + case DATE_TYPES.HMS: + ret = [hours, minutes, seconds]; + break; + case DATE_TYPES.HM: + ret = [hours, minutes]; + break; + default: + ret = [years, months, days]; + break; + } + + return ret; + }, + selectVals() { + let ret = []; + switch (this.mode) { + case DATE_TYPES.YM: + ret = [this.selectYear + '年', this.selectMonth + '月']; + break; + case DATE_TYPES.Y: + ret = [this.selectYear + '年']; + break; + case DATE_TYPES['YMD-HMS']: + ret = [ + this.selectYear + '年', + this.selectMonth + '月', + this.selectDay + '日', + this.selectHour + '时', + this.selectMinute + '分', + this.selectSecond + '秒' + ]; + break; + case DATE_TYPES.HMS: + ret = [this.selectHour + '时', this.selectMinute + '分', this.selectSecond + '秒']; + break; + case DATE_TYPES.HM: + ret = [this.selectHour + '时', this.selectMinute + '分']; + break; + default: + ret = [this.selectYear + '年', this.selectMonth + '月', this.selectDay + '日']; + break; + } + return ret; + } + }, + methods: { + onChangePickerValue(e) { + const { value } = e; + + if (this.mode == DATE_TYPES.YM && value[0] && value[1]) { + // 年月模式 + this.selectYear = Number(value[0].replace('年', '')); + this.selectMonth = Number(value[1].replace('月', '')); + } else if (this.mode == DATE_TYPES.Y && value[0]) { + // 只有年份模式 + this.selectYear = Number(value[0].replace('年', '')); + } else if (this.mode == DATE_TYPES['YMD-HMS'] && value[0] && value[1] && value[2] != '' && value[3] && value[4] && value[5]) { + // 年月日时分秒模式 + this.selectYear = Number(value[0].replace('年', '')); + this.selectMonth = Number(value[1].replace('月', '')); + this.selectDay = Number(value[2].replace('日', '')); + this.selectHour = Number(value[3].replace('时', '')); + this.selectMinute = Number(value[4].replace('分', '')); + this.selectSecond = Number(value[5].replace('秒', '')); + } else if (this.mode == DATE_TYPES.HMS && value[0] && value[1] && value[2]) { + // 时分秒模式 + this.selectHour = Number(value[0].replace('时', '')); + this.selectMinute = Number(value[1].replace('分', '')); + this.selectSecond = Number(value[2].replace('秒', '')); + } else if (this.mode == DATE_TYPES.HM && value[0] && value[1]) { + // 时分模式 + this.selectHour = Number(value[0].replace('时', '')); + this.selectMinute = Number(value[1].replace('分', '')); + } else if (value[0] && value[1] && value[2]) { + // 默认,年月日模式 + this.selectYear = Number(value[0].replace('年', '')); + this.selectMonth = Number(value[1].replace('月', '')); + this.selectDay = Number(value[2].replace('日', '')); + } else { + // 其他情况可能是pickerView返回的数据有问题,不处理 + console.log('onChangePickerValue其他情况'); + return; + } + + let formatTmpl = 'YYYY-MM-DD'; + switch (this.mode) { + case DATE_TYPES.YM: + formatTmpl = 'YYYY-MM'; + break; + case DATE_TYPES.Y: + formatTmpl = 'YYYY'; + break; + case DATE_TYPES['YMD-HMS']: + formatTmpl = 'YYYY-MM-DD HH:mm:ss'; + break; + case DATE_TYPES.HMS: + formatTmpl = 'HH:mm:ss'; + break; + case DATE_TYPES.HM: + formatTmpl = 'HH:mm'; + break; + default: + break; + } + + this.$emit( + 'onChange', + DateUtil.formatDate( + new Date(`${this.selectYear}/${this.selectMonth}/${this.selectDay} ${this.selectHour}:${this.selectMinute}:${this.selectSecond}`), + formatTmpl + ) + ); + } + } +}; diff --git a/components/dengrq-datetime-picker/dateTimePicker/index.vue b/components/dengrq-datetime-picker/dateTimePicker/index.vue new file mode 100644 index 0000000..6326f33 --- /dev/null +++ b/components/dengrq-datetime-picker/dateTimePicker/index.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/pages/bill/add-bill/add-bill.json b/pages/bill/add-bill/add-bill.json new file mode 100644 index 0000000..8606885 --- /dev/null +++ b/pages/bill/add-bill/add-bill.json @@ -0,0 +1,897 @@ +{ + "classifyTabBar": [ + { + "type": "支出1", + "selectId": "1", + "orderStatus": "交易成功", + "isAdd": false, + "itemInfoList": [ + { + "label": "创建时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "付款方式", + "value": "", + "type": "text", + "focus": false, + "key": "payMethod" + }, + { + "label": "商品说明", + "value": "", + "type": "text", + "focus": false, + "key": "productDescription" + }, + { + "label": "收单机构", + "value": "", + "type": "text", + "focus": false, + "key": "collectionOrganization" + }, + { + "label": "收款方全称", + "value": "", + "type": "text", + "focus": false, + "key": "receiverFullName" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 0, + 1, + 2, + 3 + ] + }, + { + "type": "支出2", + "selectId": "2", + "orderStatus": "交易成功", + "isAdd": false, + "itemInfoList": [ + { + "label": "创建时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "付款方式", + "value": "", + "type": "text", + "focus": false, + "key": "payMethod" + }, + { + "label": "商品说明", + "value": "", + "type": "text", + "focus": false, + "key": "productDescription" + }, + { + "label": "收款方全称", + "value": "", + "type": "text", + "focus": false, + "key": "receiverFullName" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 0, + 1, + 2, + 3, + 9 + ] + }, + { + "type": "支出3", + "selectId": "3", + "orderStatus": "交易成功", + "isAdd": false, + "itemInfoList": [ + { + "label": "创建时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "付款方式", + "value": "", + "type": "text", + "focus": false, + "key": "payMethod" + }, + { + "label": "商品说明", + "value": "", + "type": "text", + "focus": false, + "key": "productDescription" + }, + { + "label": "收单机构", + "value": "", + "type": "text", + "focus": false, + "key": "collectionOrganization" + }, + { + "label": "清算机构", + "value": "", + "type": "text", + "focus": false, + "key": "clearingOrganization" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 0, + 3, + 8 + ] + }, + { + "type": "还款", + "selectId": "4", + "orderStatus": "还款成功", + "isAdd": false, + "itemInfoList": [ + { + "label": "创建时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "付款方式", + "value": "", + "type": "text", + "focus": false, + "key": "payMethod" + }, + { + "label": "还款到", + "value": "", + "type": "text", + "focus": false, + "key": "repaymentTo" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 3 + ] + }, + { + "type": "转账1", + "selectId": "5", + "orderStatus": "交易成功", + "isAdd": false, + "itemInfoList": [ + { + "label": "创建时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "转账备注", + "value": "", + "type": "text", + "focus": false, + "key": "transferNote" + }, + { + "label": "对方账户", + "value": "", + "type": "text", + "focus": false, + "key": "counterAccount" + }, + { + "label": "订单号", + "value": "", + "type": "number", + "focus": false, + "key": "orderNumber" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 0, + 1, + 3 + ] + }, + { + "type": "转账2", + "selectId": "6", + "orderStatus": "交易成功", + "isAdd": true, + "itemInfoList": [ + { + "label": "创建时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "转账备注", + "value": "", + "type": "text", + "focus": false, + "key": "transferNote" + }, + { + "label": "对方账户", + "value": "", + "type": "text", + "focus": false, + "key": "counterAccount" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 0, + 1, + 2, + 3 + ] + }, + { + "type": "转账3", + "isAdd": false, + "orderStatus": "交易成功", + "selectId": "7", + "itemInfoList": [ + { + "label": "创建时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "付款方式", + "value": "", + "type": "text", + "focus": false, + "key": "payMethod" + }, + { + "label": "对方账户", + "value": "", + "type": "text", + "focus": false, + "key": "counterAccount" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 0, + 1, + 2, + 3, + 6 + ] + }, + { + "type": "二维码收款", + "selectId": "8", + "orderStatus": "交易成功", + "isAdd": true, + "itemInfoList": [ + { + "label": "关联记录", + "value": "", + "type": "text", + "textColor": "#12447A", + "focus": false, + "key": "relatedRecord" + }, + { + "label": "创建时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "商品说明", + "value": "", + "type": "text", + "focus": false, + "key": "productDescription" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 0, + 1, + 2, + 3, + 9 + ] + }, + { + "type": "退款", + "selectId": "9", + "orderStatus": "退款成功", + "isAdd": true, + "itemInfoList": [ + { + "label": "关联记录", + "value": "", + "type": "text", + "textColor": "#12447A", + "focus": false, + "key": "relatedRecord" + }, + { + "label": "创建时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "退款方式", + "value": "", + "type": "text", + "focus": false, + "key": "refundMethod" + }, + { + "label": "商品说明", + "value": "", + "type": "text", + "focus": false, + "key": "productDescription" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 0, + 1, + 3, + 8 + ] + }, + { + "type": "充值缴费1", + "selectId": "10", + "orderStatus": "交易成功", + "itemInfoList": [ + { + "label": "支付时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "付款方式", + "value": "", + "type": "text", + "focus": false, + "key": "payMethod" + }, + { + "label": "商品说明", + "value": "", + "type": "text", + "focus": false, + "key": "productDescription" + }, + { + "label": "收款方全称", + "value": "", + "type": "text", + "focus": false, + "key": "counterAccount" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 0, + 1, + 2, + 3, + 5, + 8 + ] + }, + { + "type": "充值缴费2", + "selectId": "11", + "orderStatus": "交易成功", + "itemInfoList": [ + { + "label": "创建时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "付款方式", + "value": "", + "type": "text", + "focus": false, + "key": "payMethod" + }, + { + "label": "缴费说明", + "value": "", + "type": "text", + "focus": false, + "key": "productDescription" + }, + { + "label": "户号", + "value": "", + "type": "text", + "focus": false, + "key": "householdNumber" + }, + { + "label": "订单号", + "value": "", + "type": "text", + "focus": false, + "key": "orderNumber" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 3, + 5, + 7 + ] + }, + { + "type": "网购1", + "selectId": "12", + "orderStatus": "交易成功", + "itemInfoList": [ + { + "label": "关联记录", + "value": "", + "type": "text", + "textColor": "#12447A", + "focus": false, + "key": "relatedRecord" + }, + { + "label": "支付时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "付款方式", + "value": "", + "type": "text", + "focus": false, + "key": "payMethod" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 0, + 1, + 2, + 3, + 5 + ] + }, + { + "type": "网购2", + "selectId": "13", + "orderStatus": "交易成功", + "itemInfoList": [ + { + "label": "支付时间", + "value": "", + "type": "time", + "focus": false, + "key": "createTime" + }, + { + "label": "付款方式", + "value": "", + "type": "text", + "focus": false, + "key": "payMethod" + }, + { + "label": "商品说明", + "value": "", + "type": "text", + "focus": false, + "key": "productDescription" + }, + { + "label": "收款方全称", + "value": "", + "type": "text", + "focus": false, + "key": "counterAccount" + }, + { + "label": "账单分类", + "value": "", + "type": "select", + "focus": false, + "key": "billCategory" + }, + { + "label": "标签和备注", + "value": "", + "type": "text", + "focus": false, + "key": "tagAndNote" + } + ], + "defaultBottomIcons": [ + 0, + 1, + 2, + 3, + 5, + 8 + ] + } + ], + "billClassify": [ + { + "id": 0, + "name": "餐饮美食" + }, + { + "id": 1, + "name": "服饰装扮" + }, + { + "id": 2, + "name": "日用百货" + }, + { + "id": 3, + "name": "家居家装" + }, + { + "id": 4, + "name": "数码电器" + }, + { + "id": 5, + "name": "运动户外" + }, + { + "id": 6, + "name": "美容美发" + }, + { + "id": 7, + "name": "母婴亲子" + }, + { + "id": 8, + "name": "宠物" + }, + { + "id": 9, + "name": "交通出行" + }, + { + "id": 10, + "name": "爱车养车" + }, + { + "id": 11, + "name": "住房物业" + }, + { + "id": 12, + "name": "酒店旅游" + }, + { + "id": 13, + "name": "文化休闲" + }, + { + "id": 14, + "name": "教育培训" + }, + { + "id": 15, + "name": "医疗健康" + }, + { + "id": 16, + "name": "生活服务" + }, + { + "id": 17, + "name": "公共服务" + }, + { + "id": 18, + "name": "商业服务" + }, + { + "id": 19, + "name": "公益捐赠" + }, + { + "id": 20, + "name": "互助保障" + }, + { + "id": 21, + "name": "投资理财" + }, + { + "id": 22, + "name": "保险" + }, + { + "id": 23, + "name": "信用借还" + }, + { + "id": 24, + "name": "充值缴费" + }, + { + "id": 25, + "name": "收入" + }, + { + "id": 26, + "name": "转账红包" + }, + { + "id": 27, + "name": "亲友代付" + }, + { + "id": 28, + "name": "账户存取" + }, + { + "id": 29, + "name": "退款" + }, + { + "id": 30, + "name": "其他" + } + ], + "billBottomIconList": [ + { + "id": 0, + "icon": "chakanwanglaijilu", + "name": "查看往来记录" + }, + { + "id": 1, + "icon": "wanglailiushuizhengming", + "name": "往来流水证明" + }, + { + "id": 2, + "icon": "shenqingdianzihuidan", + "name": "申请电子回单" + }, + { + "id": 3, + "icon": "duidingdanyouyiwen", + "name": "对订单有疑问" + }, + { + "id": 7, + "icon": "chakanjiaofeijindu", + "name": "查看缴费进度" + }, + { + "id": 4, + "icon": "lianxishoukuanfang", + "name": "联系收款方" + }, + { + "id": 9, + "icon": "lianxifukuanfang", + "name": "联系付款方" + }, + { + "id": 6, + "icon": "zhuanzhangpingzheng", + "name": "转账凭证" + }, + { + "id": 8, + "icon": "lianxishangjia", + "name": "联系商家" + }, + { + "id": 5, + "icon": "AAshoukuan", + "name": "AA收款" + } + ] +} \ No newline at end of file diff --git a/pages/bill/add-bill/add-bill.vue b/pages/bill/add-bill/add-bill.vue index 193e5f9..d902d94 100644 --- a/pages/bill/add-bill/add-bill.vue +++ b/pages/bill/add-bill/add-bill.vue @@ -1,48 +1,778 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/static/image/bill/add-bill/add-avatar.png b/static/image/bill/add-bill/add-avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..fdcb85f9d7968537782a04e7818fde74f5bdc69a GIT binary patch literal 2100 zcmV-42+Q}0P)a%jfFoAj7{}=SF9S=RP+ZS=nzBL%kBN#ZXiW1B&de_&?ogi z#)vi;Yq0hZ_7dBGE!c!@_~3mxE7EOGN+~%UoO~z{44;rIy~7?s-wUB$AR*S1QwQ6E zP1uGH_!?%P@a>d~RCZhg7*MJ%FcEoeI2i6#B+n74T`a=O)$PJQ)GqjhZ)kuPx12f- zu)n{*c8EXIXd?VKY1$DIbf;V5Gunl3XkabS1Z^4j*j(T!z`*#_t`(~quJGs7A^sd| zwyDLv<%*i23EH61Nk@(V9GsX~$8VRjq{In+tFCoYptH8rT4;pU!HJo5PS{>Hz~PC= z9;taQDN@^<5R?lW&?>cCm!N&Q{;~$x*Vk7w#Mf?0)4paAey+t<{Ls$Vn@15#w&Jq_ zI66ArUh8kVAc*#6>$qU{3EGQT5K}gqYy%vgoV_C|=YMBso4A%r*@T!7o85qH0sMC~ z)T5$vzY&RUD!D^+BR0fnCp60d@!zSEbb*a`axLbPPJ1U}M6Br+CC*s_h|dQVy?LHD zmNGmJPcNN_6*22)8UADhh;OK z%BEVM9(&rwX#wIwvm`E6(jrJR$(J}_kY)v?1c=)+zR>(Q-R5$b1A}z8eJKHYw5rb; zP%++Nuxv+*-=ocgMN*?l0U~38`^BU?%5V@Yz$97dO91LQGbNE?Pqw~%$C!!EW)XoU z0IO>2UoGsE)S?J-cB?x&Hn^UW)ee!vlx1oaem82M8V zc2X%S!Dqa=feLnb1-9qLUFmt@S75s&K~1F>T8<)Oc9Jymx#G?+icAW!D*N92g6vdd zd%Ur;7i)8p#bI`M1y;vZy3jGRDlV8#YZA$bQ>R_d;s~miX;nBdDW&T!QmWK6E#;h3 z6OuE~b50pcX6K2Wo5|;`O*ZA~SiQfFc0YEXt3JR^aylXGrkA_dchS4A@1Y~_JZGye z)?|18+xwp+_+D(s(Q`>*yaI!c8Z9Sdih{V19xA7pos5+)q=#@J-RGpyaTPPLD08>jok`bowWNjiV{Vj||YgX5v=j_5Y^b4VySsZ|LJ*#3T zU`5w-R>qz?>!M4@)Ck2Uf=vON7*Mc|)CY0nz3J~j}a{hU4LtM+f zgbWr*Iiv*G(b)Kpkn-iEyGm#y1c(i-jo#ym=otFtSP?rIq>DW*Kx~{1 z1z+O!BG+;&7me7{#+?yhcX#)!NAo;Rq{`^wlj=jvh&?Smp3Df4*HBAK-H`CC+{*m{ zuBBcE5G!J~5~wABFx1*m^VhsaTex4!5C;$=V&yn370Uo&?Y0(wukciFF3q>I>O*XZ z5wTjWwgAE?{yQG6>R#@b(ih7`#Dv&5E?dPmKv>7;!%Qf+1z+qs&zU?H`ZYtnK17Le8wc+5a9j`fevF_qp((3T~`begLFvU@g!DZPqqgUnQ+CwYL(f@3uzo2mE&F z5u|M+5+{i$7Z2~*hv0mswhg|a0b1C%E5$W{rdm9~YHe!xv8~CsTe}%)jVgLnDe;-3 zKWI|wDr~|we83lc!ndizt=4sbiNf(Tzq8qYy1m)=Vq0^4Pvq8(Rw+D>D12se+Kk&@ zc>NXr{2b-C{w()3y(*g3$B3>NYmRYy5POMjz*alkgl+iXJvl4?0RRC1|BtS44*&oF e21!IgR09C`ltgkRwBH*50000|7I literal 0 HcmV?d00001 diff --git a/static/image/bill/add-bill/edit.png b/static/image/bill/add-bill/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..ea02d1367369dd10ba6beef17a1190ea1b51efa7 GIT binary patch literal 966 zcmV;%13CPOP)O!9Sn*R?B;F3hEwR8FUQN zyqzAJFcyn7%Fcug$9KEBx*pp9;i7qJYeqAQ&>gtY){*96diSh^zk}SH&?nZc( zZu(o`sTK%Re}u6H?0k%5R##WQqIEftP{@cfi32CAlvFBpv!|!$J$<>K7D$t$qoc=| zQ$_3Y45Mvu;a*Qrk%x-LK^f9J7Ao2kmkKxo=U0wZ=7kNig1^c*+ zVLwf9&(H=jC3H9(5v<)n$ULD?Xp6QgLd>HH;9T<0hJLiOv-5??P6C-DIKSA?H%L)J z9>fzC2C-fQ{#-Kpx{!NAIB&-GjW)Olxgj`hTvY`LA$x#>ek{^ByUH{FLA$8f?e<%c zoW~#y{ATufguJje$iiTa#qI1&ss_!%g8e;gReP$>CCJotC~R%9RcWn zPNZy^E{5zfc4K(hqOLkU9*-fp880dZLheJ#m!Rm;2pQg{IEgIz=kob{Df%UgfskmA z%SxOTBqX3V=H)|+vUDDF>|*pc41`>~T17anMk!IzXtYI96tAQSWHSUZt2yW->0fH? zLn#9xuksVCmw}rS^|Q9N_A@~!5QQ0Y5l9-i$|b``ep+O+*(*35VR9Zkr!57*y}P^H zOh9MA0^?Pkaml&3 zkatG1OU{SIyz_Oj;1tz1N>)VQLZLVbANV4shLjWLsRA3X@WUE-ZyUChma`d=Z0KXh2JSLluYy4p=DszLs5D{$j~aGSL+xX$Tx#c9aIh zLIYaREDr^!1Om<#izoHZ`H9KABBCy}s7e>BCbW@*0$h6nXY<8AyUw5W&)FS7uR0f@ zZsf@RD)#LqP!SmOYccOU7Ul^RX;j+yzpJ_RFuhOEAhC%SdmO-m=b!ivVoEG zGHUd5Y4w8MqkMy@T%@I|#HgE>>TZy|skcbWlks;1i%QgEG&t@tac@+@p3e6lIf8lZ zTJK;4tFiTm^o$@?oVsd72pcaAU^QatT-eaK{K0C7@17ivRt3F}M z#FRgLTBeNAs3x`lr8EJ!Dp>5Xw;zmCCG$ipjiVnLo?p;AfLHvS6WX_8^jj@k4cwjn z%k=bNe?{{&ck_XU=NITMlr?N0%TYSQWSijYhuofnK?#kNLuWbiGQXl9SmfbwW-<43*EsYOkk9Fe#ygFP1JHfsDK$_7TrxK9|B&bGs^^bbQ3t`a8Dk4D1~NxlUh4T`1oc==Xe86FEZZP< z0AoDU)_h-2_s>v|#VkDsgI{i6V64b=Thpyrp0xX9n+L%V7#NNS=x9&f(>Z-Z+Xt}_ zSCPxjsoSjP^ew(mc(W(ww5gY~`?}@n)`c9%wK=z6eNSKnVWoDorq1gIeqGy9z7gl3 z32o$1?LA8%U{9q}UoM%}=F^5uuMoYZs!n;lhFEAo3z`(-3Iz;Z%xzteQ=M(8t7c;@ ztyATah#h67NnNDh)W=b?C3DaxBvbnCAB8Vs5DN|7Wv*(xZ}|%V0RR7w<)J_T000I_ cL_t&o0LSsG@07Sc{Qv*}07*qoM6N<$f+FqgIsgCw literal 0 HcmV?d00001 diff --git a/static/image/bill/blue-icon/AAshoukuan.png b/static/image/bill/blue-icon/AAshoukuan.png new file mode 100644 index 0000000000000000000000000000000000000000..3fa8977143b589ac3d62e20824fc41ab30a1acdf GIT binary patch literal 1480 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 Y0Alw^+oycaqW}N^07*qoM6N<$g6mSIwEzGB literal 0 HcmV?d00001 diff --git a/static/image/bill/blue-icon/duidingdanyouyiwen.png b/static/image/bill/blue-icon/duidingdanyouyiwen.png new file mode 100644 index 0000000000000000000000000000000000000000..4d13ea64779849a9cc08be7179471d144824eca1 GIT binary patch literal 1330 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 literal 0 HcmV?d00001 diff --git a/static/image/bill/blue-icon/wanglailiushuizhengming.png b/static/image/bill/blue-icon/wanglailiushuizhengming.png new file mode 100644 index 0000000000000000000000000000000000000000..db38ab56b0eefbcd0ceb8f725ce06989d641a2a2 GIT binary patch literal 718 zcmV;<0x|uGP)Jn2NAFDaoQP`{nI^Z|D2=rx| z6>E*1VyzkHgT@YPmMVA3!?~;>6T-vifN%{F%ZME&r`R8#ggLnOeZVWW2!qpm@J2=fJY{oTD?90}c)kCx% z14GMXf0(ays#I+*mFmsSV$HvjedXxRu?zul0R$`qz$HYn4usdu@mTw@3=yC}0B=Zx zZythOK$sfK%`6fInR|lpf{3<(U?J{*nUA}{s!n>d1a#lWzEj4C5G@6E5o{nM*^DaM86ktLHRS-Ib4OWA$wsdfk=JS)wl9Y3Rx@ zEm!77W$QF_Wtf&LbEC3#8oDw}%ayrN**Xnf8K&jR+^B4whOY3(?foM|qFuh@6BYjg z*F15ux_F-Th~O(%J0Sts*G$2~hr?n-jxCWnR=zSerdq&rZk(OvF)e)!@`#C%{|~ zg=gX@yv*9{!T1RP0RR6ZQ^H*U000I_L_t&o04G@{SKd3Wr2qf`07*qoM6N<$f<7Qm A>Hq)$ literal 0 HcmV?d00001 diff --git a/static/image/bill/blue-icon/zhuanzhangpingzheng.png b/static/image/bill/blue-icon/zhuanzhangpingzheng.png new file mode 100644 index 0000000000000000000000000000000000000000..60adca6a1d17ebf14184260991eeb93ae1c7a238 GIT binary patch literal 979 zcmV;^11$WBP)&~hR zt_bR)f=3UE9uz#xG9w5o3gXEXJa`a)P-e$JT(G;I@AcSY&$!O?%3?9!RMq#YzOSq6 zr^~`ePEEsQ*<#Mi7cY6a;!DYSLD0~;Dq6qB zze}}bP&(4a2*uq|64D^b+yDHvJ)XaLc{?4~Kl3;BLE6Oimi&!o>=BQ!rA@NpX19Es zvHNebZ68ST$?~VRbHsD{uY1`oUnlvw%3Td#v3UrPOGJNqxvgu^mb_eHjl@7tCVKr1pEt^Y>kqmBjYATFH`c0q?n<%audAWs1>m@_Q^0_`K*SwS-<4|7}jPOv%! zFvY525WVlFCp8I-xf^{FU4qwk1I}Hjtc3p51>sY5HM?#CK#n z+=(B;wpk7WYzOcbdh9_G(Qir94>Fu7m%fwj@I}2kQ5Q*sAx%sE)+}kPWunV2_5UDk z8XI5cB-+UE|6i))eDSO@a!c+&J366WDP2(AXoT{vuW2RYxO;mO-#g_}K^8_PS6t`j zitFEpOs?>cYDI=73Qr>mSfd1y_oaJ}tl=-k~MkCb1(@N<|tz24Fn;KnQo5#JhULI?1_NJ-f z6!R#jD1odum>2#iH2 zcOjp}W;r+vOuQc67h@ros4QVLXk)qtw1VXXYXM`((-Jo0;2uV6zyn~6wiuJ)Z^{!g zu@sd_G;G3o5126#e)E7nxQBqx2sju*xEMlEZ_@mDvxGRzVbWF2gE!;g5h0cco4r7? zGYu3NShMd~jUsP{=R}N442-F5GxPG0C1heh*a)oINq7;Rh)O$iZ-NgYZT1j~cF$Z-_IpaHu@@SKQcNlr(_Ie9fkn-C1> zN**E?kvmcE!uk+4;HiHd<0q$u7Mjs-=oonB|0_ zH%8Vx1gv3p8>m9>V=}pU(yMLIggqEZUNiE9w7b*{NuP0o|4s9Ft?AceLRaKqw<}eE zr)KFPaId;4Fk|x&%hK$Q{vFi>e96FLwctCDC0E~wZ~#n6_*y$p=E@`^eN8fgeiv{9 zc6paOWE^~3$eUP^_3&bCC*V}irnVWd@dAF54dNfVe&8$3w@+Hk6?EfSLImF)wz|c> zAN~FZyGamtXKY`K`E7wd?Bvg*w3b(q|A{!M3k0wv#@xrI+-)f#3f~f*y$0uScm&d0 z2;bQeJ~iMG*53HWY9w}En(RoK%!mnJPbRh4emu?i*_S!SKN8t=et_wlk{L5vgwhU^ zCMNZ(>oq!SYU{rzm>;|KaPKvDA(Yi!M*k6eA2GY#nyrhmP?xA|he?g0N3eylSCH*& z5I=Uk!ak!PjZjwS#jK5GImO(D7z44K3KMFAL-yGR_j}VD!;f9Ru6_4002ovPDHLkV1lp? B2ZI0r literal 0 HcmV?d00001 diff --git a/static/image/bill/white-icon/chakanjiaofeijindu.png b/static/image/bill/white-icon/chakanjiaofeijindu.png new file mode 100644 index 0000000000000000000000000000000000000000..7d9224b0591c631b08d4fad8865b0a90a7838b1c GIT binary patch literal 958 zcmV;v13~-L0dweaaEh3%z}U6u z(NF_3Uy6hTI=Vi>et|BEwSrmfibBpRV?ZlGJ;2;P{H_wsti*%_xI{NYcP|BowDEgj z2GQ=Ft|IVt)A)wog^tJ>Kud~>M(|rxJB64K&t>3}Ool|7v7F)F1tuuqGGj&&_Av|( zQ)(dOI#8F_*z3e(q=saV^+|eMj`QeJIZNX^Xae_$tpx|L-DgzP1Ia6m5?EuNb`!Cg zSvo^cpd%e4IkjiBpOCl@d&`En&scESp_9V14LHYKLYNN%$tT zb_ZQl>`}aj=vb1DxUqE0+rvE}_Fd3LCE>HsY7Ba%DsK;yS`W*MNjQ$v2eq9+m!3pl zS1aDbP{S{YFB0E6lwXn>_TA^}J}w{TLG<5>HJtS*wdcx{BuG_8c2Pd&ixm{KspWa*WUmD0RR86XrI9V g000I_L_t&o0IQ;JNNkqEt^fc407*qoM6N<$f^~zi%m4rY literal 0 HcmV?d00001 diff --git a/static/image/bill/white-icon/chakanwanglaijilu.png b/static/image/bill/white-icon/chakanwanglaijilu.png new file mode 100644 index 0000000000000000000000000000000000000000..25bfea19b66c29554921a3fcb391a7dcca398f3c GIT binary patch literal 703 zcmV;w0zmzVP)I(9LJ~Vpiq!dP+*V{*v+C2LPSMDiKpmN(7g^G6g((+5flXl1ux#cD0md~rlKOE z2fZmM3MvX-1O)|!=jXd`XWXaG`UV&A@%!xj+28N?ot>H8dH2mN|D0ehm#c+YIDxF} zh(z;HYo99;q~kjsBTx+wAS){&(R&y{BNB}S>F5SoCznU}GWwCL6xu-6qKg%Ltp>EB zbx4_sk?WX5?I6>W8Y>u0W9*=tnUTmDX;{I`1g=YTcLdp0V&PAZu3%Re@BJGu6C;M2*2>AcOd)TAJW8k)eW$ zA!(vsqBHd=iC@sxai@=l2Kq9))h+Mhiqh~ z?i5#o6bl_aHXgrPoiPhSv+#z1Cg}zXBy8qIr z!Dxdy!KOHR&dixP=ggdQZ)ud_m&@gva=F|v zcnUs&A7BN10qV3J%n&L{O-P_EpbNYr&^R~?8o_q348DU(pibKazHdMW*n&Qh5)(3D z7v9t08mIzOpbyl7ttBNT6(v9!)PQa<19pQ^;Hvk+V-!nBvcq`21O}RgHxs-841rnT z%1}pnxiN(alJgmLfoLDgu!79a~T)}CVB$TL?qR>0q09#8yE{Q5%aX3 z5QAHA54Fkq7<>+_uLgZ4V$3S&!P&YR%cPbFRg`ZUl3C+Yj!558xfR0c@1Gb6zt5GiD8bUC2=>f~!041L$UEtMC}% zcLb%~dJMh;>;xyl3v5mB7!k{o*umP?xHa^^I?EXxEV{-b5U?DD?e6y25EVR&LY+qO z(T2L1LQE%Gg-??STY`%<3}TEOMPq#@2+#wT0<6fB~|67C0Ooe8~3d^V^&239i(2EfCZF^X(9)gS#!!P}s(GND`L7Fpn+ z&&H@p2c9<3XLw@$(XZV|@Fh@bLc0_>JCUd#d}D--WLLMddO51!(y9r+;!;k4#4f{@ zM0Tw^^8jN#$sWT~Da3ZnvI*ydXQ7tiF%$DbpUdD`9en0Z=-|2=7?VoG@&puO>z{u;k@-5K)^2rpKll?p!ohRpw+><|4P)`k!Q1FIaz3E~ zXajClA2aJkP9-LI0{C5%de}n@-w=Lqb>eRcHWH%n`mu3LI>>-4z%5BloMd238E|F3 ze2vvc?AHa~LJilRF?d&+)LA*ZX$EI)q$v14Bbcu(leLDJsPa^lP*rfStK4_@f1E%j zJ`Jw}>rJH$e4F>eO=L|SV?R`fScY9kETI-0-GW2NonQet0lUp_Rlm3wNwA211w03C zpRYNO*D1!=0!xIcm=Y7}!T`U%Zo>EQ?ANt#`Uzyuo~!gO^)2D5v^Ctsa~00006NklILtg@SarhSon|7`mX{*oZ$15jxXukhQWD0&h_(HvCZGxSq_0c0bHu2dpKt{}l12s{q|VSvu%Nv4hR zo0N=$W;%!uTCN~bdq6fur_)LVxNUX&%;&n0pbmus-|44-uU21pVnc#UtdoXIX?3w< z1?J*}b8T#eme#WME+puMf*sU%>HI(&R5=$CoUw@Y=5rmh>a@z4#B8l7?LvaDt!WP( z7R}OsgD)*6*X0T_()UD7fxg4@_=d({HdApLWFz_skt=9Hr_2x0v7dz%IY-$RGFl1k z+c1OtNIqymK{|Lt^bp8&lV~131^dI#{ zXy;Eg*?cP$w9rrHwRDzr6-%hB!_u*1sXIXBaX$GI6eLI=axVdwK=wgDf*Jk6>r}Sk z-_kY~z^@}e2~SCDRY)#aogj_c;RL*(*(^K)om3r;hoqA>Kt{8lVgMClB&K#+Zr!Vo zDNBjg1gX$6=sEgDCwk`;pi%2C)v@1Cr>T7+uMd42?fZyNicu7s`bde!f;8SqwU$9| zn@*kHzmt@$qSGC42U23xC2a*6KQodkONq81rdM6>nU+C8opinz9)R{K6`jox@0VNg z*=nDUMU~MEuaeNL#u3;B{;8q3lr5u`_F4b)d?TGS-Nz~y+M4+CK5Q+{nQzK5!0&KI z5U2x$tJzPL8`o8;8TwQ7TLp`a1pTP)u^+u~(AbUdYCtz-zD;+t1C*dnre16MU&JiBH&ri2n-*k!bwO_;@ET+Vb!xLD1(hbOW@DuE4SVXIE6va$It`cMC>%2M zY3S5uIbii_*M~sOD1Q$939>hnn+E^@|Nn@#*RlWr00v1!K~w_(^yx83rw`Ae00000 LNkvXXu0mjfFO!!i literal 0 HcmV?d00001 diff --git a/static/image/bill/white-icon/lianxishangjia.png b/static/image/bill/white-icon/lianxishangjia.png new file mode 100644 index 0000000000000000000000000000000000000000..d155b7aa7e134dbefa8c420c444a1d9147fb1f90 GIT binary patch literal 866 zcmV-o1D*VdP)yO?q@rTobSMQ$icaifSEZFMeKCO1OC3k8otBKX|`TV@^c+bDRXYWqW_dLJf^LyUs`}_Ai@4GBl_A8Z29pF0n z0;W=67N1)3n}N^ZcubQZWT1nASD+WH25ICcPSZ8u*jmO$i9L+YB?vK`2A$wMXvydE zZTW0yADtL=+QM(Zc zIoKIci>wQRb3hs8Prps*r;xUz8;Mf(T|$D-5G~Hf|Ich4b}yLcN;AC#LRSJ>YdrQWvU`>}{9N_@$Tk$| z)G83-Z4OSMtC3#DuJl3H8m-#Op=|_PGdK$F0Mo_^IaU=h;X6j-mC*br5Im;$1UQ)y zv~r3+&(c!(mG&4o3``qS#+LxyN(qDnJp#N4l^%aBJt)(mn^hF>wN&Z<0lO3NoR86V zViploMmwgY1j3}LvIl{y>1M>6IRhvS!Jgec>`Hu-ZO@}2 zLZ5>40eUO&l38tT(e_j11-b~_&T;(QV!BBQgv{^|C?tn!_Xze0cxk+)5Ak$`RvlBq z8+#C2RSATQ=;TakrWZ&jfEUG2i8VaAihd99Ea_HCOgO-hKs7E9%z;T@>eLMo2ywiD zS18VCw*|GN62HcN1wunZ>NZ$$+Br{4l;`45CJ<{c0jxsiaB-dxqvBPU*b?;vXK!B? z%o5Z>;3vri7WFMbh`|Kjh0{x*Se~-LUHV9%USbcTD?Ws+9B&xh308uvvYY@LfOkZ` s+#dh{0RR7i=h}Aw000I_L_t&o00~2ZNaHDY)c^nh07*qoM6N<$f`0LTNdN!< literal 0 HcmV?d00001 diff --git a/static/image/bill/white-icon/lianxishoukuanfang.png b/static/image/bill/white-icon/lianxishoukuanfang.png new file mode 100644 index 0000000000000000000000000000000000000000..d155b7aa7e134dbefa8c420c444a1d9147fb1f90 GIT binary patch literal 866 zcmV-o1D*VdP)yO?q@rTobSMQ$icaifSEZFMeKCO1OC3k8otBKX|`TV@^c+bDRXYWqW_dLJf^LyUs`}_Ai@4GBl_A8Z29pF0n z0;W=67N1)3n}N^ZcubQZWT1nASD+WH25ICcPSZ8u*jmO$i9L+YB?vK`2A$wMXvydE zZTW0yADtL=+QM(Zc zIoKIci>wQRb3hs8Prps*r;xUz8;Mf(T|$D-5G~Hf|Ich4b}yLcN;AC#LRSJ>YdrQWvU`>}{9N_@$Tk$| z)G83-Z4OSMtC3#DuJl3H8m-#Op=|_PGdK$F0Mo_^IaU=h;X6j-mC*br5Im;$1UQ)y zv~r3+&(c!(mG&4o3``qS#+LxyN(qDnJp#N4l^%aBJt)(mn^hF>wN&Z<0lO3NoR86V zViploMmwgY1j3}LvIl{y>1M>6IRhvS!Jgec>`Hu-ZO@}2 zLZ5>40eUO&l38tT(e_j11-b~_&T;(QV!BBQgv{^|C?tn!_Xze0cxk+)5Ak$`RvlBq z8+#C2RSATQ=;TakrWZ&jfEUG2i8VaAihd99Ea_HCOgO-hKs7E9%z;T@>eLMo2ywiD zS18VCw*|GN62HcN1wunZ>NZ$$+Br{4l;`45CJ<{c0jxsiaB-dxqvBPU*b?;vXK!B? z%o5Z>;3vri7WFMbh`|Kjh0{x*Se~-LUHV9%USbcTD?Ws+9B&xh308uvvYY@LfOkZ` s+#dh{0RR7i=h}Aw000I_L_t&o00~2ZNaHDY)c^nh07*qoM6N<$f`0LTNdN!< literal 0 HcmV?d00001 diff --git a/static/image/bill/white-icon/shenqingdianzihuidan.png b/static/image/bill/white-icon/shenqingdianzihuidan.png new file mode 100644 index 0000000000000000000000000000000000000000..7d2746fd8c2b0e31647741f38907bea9bf43a9b6 GIT binary patch literal 640 zcmV-`0)PF9P)a4`wX-$YHq?; z9f^VjKH!W)3up&Pk{sD70=Wlud9C!vY8oL566gl4lZV?#Q;J!ut5)f+Z7SG~vjwwI zwoOyeKhZ1NY=sYTT>2XAV<^k4<$Ljzf@)-f_`$dGIUNUD*z*z4CzRjFX@!wmhP4#4 zb_}IksIDOD*F3yq#7U#H zn#l_HS=2y1#z3J>;y*z%w}V=rVAViMgJ2qT5`4#h2`0N@i+QG^Fe2%S>V^85-)1f} z2oaBVsbC!8LDB{&+=kl&o=t^)5yZZ+Ud9yq#r$3RS6WlSG>alT@CRSvf3zMUQBa}Z zj5ie`Ct5DSIFkoO_u)Uhs4+n6;bt_ST}v=u$>y`}1)J|rfzi9Or5;{CvIRCNSBkfW z8rf~JOj4Jq-WuKr~i}gYeXBgK~Qx`qh0QF)f zbyXV^?HVqlwFwh&4D(PZ+BNJ%{SI_U-pO51D6$MMQGEjKutGm}8S519kze5&a)oJ# z!8r`UK7=QetP{LK9)z1*ZY(wpnfD(5%aGeZx56zsiLD~r&)T7W|HctcLO)kb<%=vs z-Fr!9s;%X-idLJ3oWf_gPvI?+$oFX)(mSh%Nqtq#?5%0Y|8DhAUuzO(Z?g=o9wwQo zX7<)Jq<2;i3-#7CLJ-72-Z|*&Jdd>9x?)RPVob&zXoO|zicX_tNf2Cln)!Gej z;4k#cto5E^d&9bN!6GqDawiNxzsy?ODK?G9eteb-65N0la1B;1>(d{#24Nhu^In4B zMjLPmtv~p_7`6UU=n81Av|OR9%ZdSZcEENFz}k*v)Szz&+`cH=4x^g6Mp$9Hx5t%2 zTS$L`Td1>VKp40;1PU>6}bZ>hu}9m{-G#9p}f}!yLqU1At$mu`RuCydU?$O~GD!P@p?0B3fer~dgBth=aL<|MP zF?Kc16A#l@X-R@qIMYQC^i_%bwlc1lnV0hL?lmaR#YK&M_w4rsvK{bnFy8@NJtHQQ zR>%ixOn(w!u31MKR42C>HCE-!fq$W1P>YVEjwLiv_6z;_s`SzAF z!R3yScmYnvH8W~FX2wzQ_Vl`^{-m`98RQq+J0|UcL1<#-%g&@A`hd9me)`pr%>w`c n|Nne>D7XLs00v1!K~w_(xJjT4wq8q?00000NkvXXu0mjfUW{iF literal 0 HcmV?d00001 diff --git a/static/image/common/close.png b/static/image/common/close.png new file mode 100644 index 0000000000000000000000000000000000000000..90ca8e4b27e4b7ee0acf532a51b17e0e0b266c6e GIT binary patch literal 444 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 JPDHLkV1o7W%t-(M literal 0 HcmV?d00001