diff --git a/api/common.js b/api/common.js index ce4c8a5..0a3a6fe 100644 --- a/api/common.js +++ b/api/common.js @@ -13,4 +13,20 @@ export function initDictOption(dictCode) { // 获取部门所有人员信息 method: 'get', data: dictCode }) +} + +export function writeCommonJsonDisplay(dictCode) { // 通用json数据写入API + return https({ + url: ' /sys/dict/getDictItems', + method: 'get', + data: dictCode + }) +} + +export function readCommonJsonDisplay(params) { // 通用json数据写入API + return https({ + url: '/cxcPersonalTailor/cxcPersonalTailor/getByRules', + method: 'get', + data: params + }) } \ No newline at end of file diff --git a/pages/views/renliziyuan/renyuanxinxi/index.vue b/pages/views/renliziyuan/renyuanxinxi/index.vue index e37c7e6..4232649 100644 --- a/pages/views/renliziyuan/renyuanxinxi/index.vue +++ b/pages/views/renliziyuan/renyuanxinxi/index.vue @@ -5,6 +5,9 @@ + + + @@ -16,10 +19,37 @@ + + + \ No newline at end of file +.stats-item + .stats-item { + border-left: 1px solid #ccc; + padding-left: 16px; +} + diff --git a/pages/views/shengchan/ribaoshuju/trqRbsj.vue b/pages/views/shengchan/ribaoshuju/trqRbsj.vue index ce6d936..902755e 100644 --- a/pages/views/shengchan/ribaoshuju/trqRbsj.vue +++ b/pages/views/shengchan/ribaoshuju/trqRbsj.vue @@ -1,13 +1,23 @@ \ No newline at end of file +.progress-text { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + color: red; + /* 保持红色 */ + font-size: 12px; + font-weight: bold; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); + /* 提升可读性 */ +} + diff --git a/pages/views/shengchan/ribaoshuju/yyRbsj.vue b/pages/views/shengchan/ribaoshuju/yyRbsj.vue index 7a832df..c03dfd8 100644 --- a/pages/views/shengchan/ribaoshuju/yyRbsj.vue +++ b/pages/views/shengchan/ribaoshuju/yyRbsj.vue @@ -2,10 +2,18 @@ + + + + + 原油产量 + + + - {{ item.gas }} + 日油量 {{ item.rcwy || '-' }} @@ -200,6 +208,41 @@ function sumByOil(records) { +``` + +**关键样式点**: +1. 输入框宽度固定为 120px +2. 紧凑型设计(height: 20px) +3. 活动状态样式增强 +4. 水平排列布局 + + +#### 七、使用示例 ```vue ``` -### 2. 组件属性 -| 属性名 | 类型 | 默认值 | 描述 | -| ---- | ---- | ---- | ---- | -| `modelValue` | `Array` | `[null, null]` | 双向绑定的日期范围数组,第一个元素为开始日期,第二个元素为结束日期。 | -## 四、组件内部实现 +#### 八、注意事项 +1. **日期格式要求**: + - 单选模式:`YYYY-MM-DD` 字符串格式 + - 范围模式:`[startDate, endDate]` 数组格式 + - 多选模式:`[date1, date2, ...]` 数组格式 +2. **依赖组件**: + - 需安装 `wu-calendar` 组件(第三方库) +3. **异常处理**: + ```javascript + calendarConfirm(e) { + this.dateRange = []; + try { + this.dateRange.push(formatDate(new Date(e.range.before))); + this.dateRange.push(formatDate(new Date(e.range.after))); + } catch (error) { + return; // 异常处理 + } + this.$emit('update:modelValue', this.dateRange); + } + ``` +4. **性能优化**: + - 建议使用 `:range-end-repick="true"` 开启范围重新选择 + - 通过 `:item-height="45"` 控制日历行高 -### 1. 模板部分 -- **输入框区域**:显示开始日期和结束日期的输入框,点击输入框可打开日期选择弹窗。 -- **日期选择弹窗**: - - **快捷按钮区域**:包含自然周期和相对周期的切换按钮,以及不同模式下的快捷操作按钮。 - - **日历选择区域**:显示当前月份的日历,可选择日期。 - - **操作按钮**:包含取消和确定按钮,用于关闭弹窗和确认选择的日期范围。 -### 2. 脚本部分 +#### 九、扩展功能建议 +1. 添加时间选择功能 +2. 支持自定义日期禁用范围 +3. 增加国际化支持 +4. 添加动画过渡效果 +5. 支持预设常用日期范围 -#### 2.1 数据属性 -```javascript -data() { - return { - isNatural: true, // 是否为自然周期模式 - activeType: 'start', // 当前活跃的日期选择类型(开始或结束) - currentMonth: new Date(), // 当前显示的月份 - tempStart: null, // 临时开始日期 - tempEnd: null, // 临时结束日期 - weekDays: ['日', '一', '二', '三', '四', '五', '六'], // 星期几的显示文本 - quickButtonszr: [ - { label: '本周', type: 'week' }, - { label: '本月', type: 'month' }, - { label: '本季', type: 'quarter' }, - { label: '本年', type: 'year' } - ], // 自然周期模式下的快捷按钮 - quickButtonsxd: [ - { label: '近一周', type: 'week' }, - { label: '近一月', type: 'month' }, - { label: '近一季', type: 'quarter' }, - { label: '近一年', type: 'year' } - ] // 相对周期模式下的快捷按钮 - }; -} -``` - -#### 2.2 计算属性 -- `formattedStart`:格式化后的开始日期。 -- `formattedEnd`:格式化后的结束日期。 -- `calendarDays`:生成当前月份的日历数据。 -- `monthText`:当前月份的显示文本。 - -#### 2.3 监听属性 -```javascript -watch: { - modelValue: { - immediate: true, - handler(newVal) { - this.tempStart = newVal[0]; - this.tempEnd = newVal[1]; - } - } -} -``` -监听 `modelValue` 的变化,初始化临时日期。 - -#### 2.4 方法 -- **打开弹窗并初始化临时值**:`openPicker(type)`,打开日期选择弹窗,并根据活跃类型初始化临时日期。 -- **日期点击处理**:`handleDayClick(day)`,处理日期点击事件,更新临时开始或结束日期。 -- **确认选择**:`confirmSelection()`,确认选择的日期范围,触发 `update:modelValue` 事件并关闭弹窗。 -- **关闭弹窗**:`closePicker()`,关闭日期选择弹窗,并重置临时日期。 -- **重置临时日期**:`resetTempDates()`,将临时日期重置为当前的 `modelValue`。 -- **生成日历数据**:`generateCalendar(date)`,根据给定的月份生成日历数据。 -- **日期选择处理**:`selectDate(date)`,处理日期选择,更新 `modelValue`。 -- **切换月份**:`changeMonth(offset)`,切换当前显示的月份。 -- **判断日期状态**: - - `isSelected(date)`:判断日期是否被选中。 - - `isEnd(date)`:判断日期是否为结束日期。 - - `isToday(date)`:判断日期是否为今天。 - - `isStart(date)`:判断日期是否为开始日期。 - - `isInRange(date)`:判断日期是否在选择的范围内。 - - `isSameDay(d1, d2)`:判断两个日期是否为同一天。 -- **快捷范围设置**:`setQuickRange(type)`,根据快捷按钮的类型设置日期范围,并关闭弹窗。 -- **自然周期计算**:`calcNaturalRange(type, currentDate)`,计算自然周期模式下的日期范围。 -- **相对周期计算**:`calcRelativeRange(type, currentDate)`,计算相对周期模式下的日期范围。 -- **周计算(周一为起点)**: - - `getWeekStart(date)`:获取一周的开始日期。 - - `getWeekEnd(startDate)`:获取一周的结束日期。 -- **月末处理**:`lastDayOfMonth(date)`,获取给定月份的最后一天。 -- **月末日调整**:`adjustMonthEnd(start, end)`,调整开始日期到合适的月末日期。 -- **闰年判断**:`isLeapYear(year)`,判断给定年份是否为闰年。 -- **模式切换**:`toggleMode(isNatural)`,切换自然周期和相对周期模式。 -- **日期格式化**:`formatDate(date)`,将日期格式化为 `YYYY-MM-DD` 的字符串。 - -### 3. 样式部分 -- **输入框区域**:设置输入框的样式,包括边框、背景色、字体大小等。 -- **紧凑弹窗**:设置弹窗的整体样式,包括背景色、边框半径等。 -- **紧凑头部**:设置月份标题和导航箭头的样式。 -- **紧凑日期网格**:设置星期几和日期的显示样式,以及不同状态下的日期背景色和字体颜色。 -- **快捷按钮区域**:设置模式切换按钮和快捷操作按钮的样式。 -- **底部操作**:设置取消和确定按钮的样式。 - -## 五、注意事项 -- 组件使用了 `uni-popup` 组件,确保项目中已正确引入和配置。 -- 日期范围的选择逻辑较为复杂,特别是在自然周期和相对周期的切换以及快捷范围设置时,需注意日期的计算和显示。 -- 组件的样式是基于 `scoped` 作用域的,可根据项目需求进行调整和扩展。 \ No newline at end of file +如果需要进一步定制化,可以修改以下部分: +1. 日历组件配置(`wu-calendar` 参数) +2. 日期格式化函数(`formatDate`) +3. 输入框样式和交互逻辑 +4. 异常处理机制 \ No newline at end of file diff --git a/uni_modules/cxc-szcx-dictSelect/readme.md b/uni_modules/cxc-szcx-dictSelect/readme.md index f8cf880..66edf7c 100644 --- a/uni_modules/cxc-szcx-dictSelect/readme.md +++ b/uni_modules/cxc-szcx-dictSelect/readme.md @@ -1 +1,90 @@ -# cxc-szcx-dictSelect \ No newline at end of file +# cxc-szcx-dictSelect +### 组件说明:`uni-data-checkbox` 多选字典项选择组件 + +#### 一、组件概述 +该组件基于 Vue 3 和 `uni-data-checkbox` 实现了一个多选的字典项选择器。它通过传入字典编码(`dictCode`)从后端接口获取字典项数据,并将其展示为多选框列表。组件支持双向数据绑定,可将选中的值同步给父组件,同时在选中值发生变化时触发 `change` 事件。 + +#### 二、组件使用的技术栈 +- **框架**:Vue 3(使用组合式 API) +- **UI 组件**:`uni-data-checkbox`(用于展示多选框列表) +- **请求库**:假设使用了自定义的 `getDictItemsApi` 函数进行后端数据请求 + +#### 三、组件输入(Props) + +| 属性名 | 类型 | 是否必填 | 默认值 | 说明 | +| ---- | ---- | ---- | ---- | ---- | +| `dictCode` | String | 是 | 无 | 用于从后端获取字典项数据的字典编码 | +| `modelValue` | String | 否 | '' | 双向绑定的选中值,多个值以逗号分隔 | + +#### 四、组件输出(Emits) + +| 事件名 | 说明 | 参数 | +| ---- | ---- | ---- | +| `update:modelValue` | 当选中值发生变化时,用于更新父组件的 `modelValue` | 选中值的字符串,多个值以逗号分隔 | +| `change` | 当选中值发生变化时触发 | 选中值的字符串,多个值以逗号分隔 | + +#### 五、组件内部数据 + +| 变量名 | 类型 | 说明 | +| ---- | ---- | ---- | +| `dictItems` | Ref | 存储从后端获取的字典项数据 | +| `selectedValuesArray` | Ref | 存储当前选中的值,以数组形式存储 | + +#### 六、组件方法 + +##### 1. `loadDictItems` +- **功能**:异步从后端接口获取字典项数据,并将其赋值给 `dictItems`。 +- **实现逻辑**: + - 调用 `getDictItemsApi` 函数,传入 `props.dictCode` 进行数据请求。 + - 若请求成功,将响应数据的 `result` 字段赋值给 `dictItems.value`。 + - 若请求失败,在控制台输出错误信息。 + +##### 2. 监听 `selectedValuesArray` 的变化 +- **功能**:当 `selectedValuesArray` 发生变化时,将选中的值转换为字符串,并触发 `update:modelValue` 和 `change` 事件通知父组件。 +- **实现逻辑**: + - 使用 `watch` 函数监听 `selectedValuesArray` 的变化。 + - 当变化发生时,将新的选中值数组使用 `join(',')` 方法转换为字符串。 + - 触发 `update:modelValue` 和 `change` 事件,将转换后的字符串作为参数传递。 + +##### 3. 监听 `props.modelValue` 的变化 +- **功能**:当父组件传递的 `modelValue` 发生变化时,更新 `selectedValuesArray`。 +- **实现逻辑**: + - 使用 `watch` 函数监听 `props.modelValue` 的变化。 + - 当变化发生时,将新的 `modelValue` 使用 `split(',')` 方法转换为数组,并赋值给 `selectedValuesArray.value`。 + - `immediate: true` 表示在组件初始化时就会执行一次监听回调,确保初始值能正确同步。 + +#### 七、组件生命周期钩子 + +##### `onMounted` +- **功能**:在组件挂载后调用 `loadDictItems` 函数,从后端获取字典项数据。 + +#### 八、使用示例 +```vue + + + +``` + +#### 九、注意事项 +- 确保 `getDictItemsApi` 函数能正确获取后端数据,且响应数据的格式符合 `{ result: [...] }`。 +- 若 `modelValue` 初始值为空字符串,`selectedValuesArray` 会初始化为空数组。 +- 由于使用了 `watch` 的 `deep: true` 选项,在 `selectedValuesArray` 内部元素发生变化时也会触发监听回调,可能会影响性能,需注意。 \ No newline at end of file diff --git a/uni_modules/trq-depart-select/readme.md b/uni_modules/trq-depart-select/readme.md index 7d5b2c3..90cb020 100644 --- a/uni_modules/trq-depart-select/readme.md +++ b/uni_modules/trq-depart-select/readme.md @@ -1,35 +1,106 @@ # trq-depart-select -# 1.0.1 -更新,添加返回值,将整个机构对象返回父组件 -```javascript -const onpopupclosed = ((e) => { - selectDepartID.value = tempSelectDepartID.value - $emit('change', selectDepartID.value, departInfo) -}) +### 组件说明:单位选择组件 + +#### 一、组件概述 +此组件为基于 UniApp 和 Vue 3 构建的单位选择组件,借助 `uni-data-picker` 组件实现单位的选择功能。组件支持依据传入的 `returnCodeOrID` 属性,返回单位的 `orgCode` 或者 `id`。组件会从后端获取单位列表数据,并在用户选择单位时触发 `change` 事件通知父组件。 + +#### 二、组件使用的技术栈 +- **框架**:Vue 3(使用组合式 API) +- **状态管理**:`@/store` (推测使用了 Vuex 或 Pinia 进行状态管理) +- **UI 组件**:`uni-data-picker` (用于展示单位选择器) +- **请求库**:自定义的 API 请求函数(如 `queryMyDeptTreeListApi`) + +#### 三、组件输入(Props) + +| 属性名 | 类型 | 是否必填 | 默认值 | 说明 | +| ---- | ---- | ---- | ---- | ---- | +| `returnCodeOrID` | String | 否 | "orgCode" | 决定返回单位的 `orgCode` 还是 `id` | + +#### 四、组件输出(Emits) + +| 事件名 | 说明 | 参数 | +| ---- | ---- | ---- | +| `change` | 当用户选择单位时触发,用于通知父组件选择结果 | 选中单位的 `orgCode` 或 `id`,以及单位的全部信息对象 | + +#### 五、组件内部数据 + +| 变量名 | 类型 | 说明 | +| ---- | ---- | ---- | +| `departList` | Ref | 存储从后端获取的单位列表数据 | +| `selectDepartID` | Ref | 当前选中的单位 ID | +| `selectDepartIDS` | Ref | 选中的级联单位 ID 数组 | +| `tempSelectDepartID` | Ref | 临时选择的单位 ID | +| `depart` | Ref | 对 `uni-data-picker` 组件的引用 | +| `departInfo` | Ref | 选中单位的全部信息 | + +#### 六、组件方法 + +##### 1. `getDepartList` +- **功能**:异步从后端获取单位列表数据,并将其赋值给 `departList`。 +- **实现逻辑**: + - 调用 `queryMyDeptTreeListApi` 函数进行数据请求。 + - 若请求成功,将响应数据的 `result` 字段赋值给 `departList.value`。 + - 若请求失败,在控制台输出错误信息。 + +##### 2. `onnodeclick` +- **功能**:处理用户点击单位节点的事件,更新 `departInfo` 和 `tempSelectDepartID`。 +- **实现逻辑**: + - 将点击的单位信息赋值给 `departInfo.value`。 + - 根据 `props.returnCodeOrID` 的值,将点击单位的 `orgCode` 或 `value` 赋值给 `tempSelectDepartID.value`。 + +##### 3. `onchange` +- **功能**:处理 `uni-data-picker` 的 `change` 事件,更新 `selectDepartID`。 +- **实现逻辑**:将选择的单位 ID 赋值给 `selectDepartID.value`。 + +##### 4. `onpopupclosed` +- **功能**:处理 `uni-data-picker` 弹出框关闭的事件,将 `tempSelectDepartID` 的值赋给 `selectDepartID`。 +- **实现逻辑**:将 `tempSelectDepartID.value` 赋值给 `selectDepartID.value`。 + +##### 5. 监听 `tempSelectDepartID` 的变化 +- **功能**:当 `tempSelectDepartID` 发生变化时,触发 `change` 事件通知父组件。 +- **实现逻辑**: + - 使用 `watch` 函数监听 `tempSelectDepartID` 的变化。 + - 当变化发生时,触发 `change` 事件,将 `tempSelectDepartID` 的新值和 `departInfo` 作为参数传递。 + - `immediate: true` 表示在组件初始化时就会执行一次监听回调。 + - `deep: true` 表示深度监听,确保 `tempSelectDepartID` 内部属性变化也能被捕获。 + +#### 七、组件生命周期钩子 + +##### `onLoad` +- **功能**:在页面加载时调用 `getDepartList` 函数,从后端获取单位列表数据。 + +#### 八、样式说明 +```css +.no-wrap-picker::v-deep .uni-data-picker-item { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} ``` -增加选择到最后层级触发的change时间,返回数据到父组件的功能 +- 此样式规则用于强制 `uni-data-picker` 的选项不换行,超出部分隐藏并显示省略号。 -```javascript -const onchange = ((e) => { - $emit('change', e.detail.value[e.detail.value.length - 1].value, {}) -}) +#### 九、使用示例 +```vue + + ``` - - - # 1.0 - -属性 returnCodeOrID 默认值 orgCode, 组件返回单位的orgCode, 不设置属性或设置为其他,组件返回 单位ID - -事件:change 选择内容发生变化时发生,通过emit 返回给父组件 选择单位的ID或code - -由于uni-data-picker 无法选择任意节点数据,通过关闭组件事件返回当前选择的节点数据。 -```javascript -const onpopupclosed = ((e) => { - selectDepartID.value = tempSelectDepartID.value - $emit('change', selectDepartID.value) -}) -``` - - +#### 十、注意事项 +- 确保 `queryMyDeptTreeListApi` 函数能正确获取后端数据,且响应数据的格式符合 `{ success: true, result: [...] }`。 +- 由于使用了 `watch` 的 `deep: true` 选项,在 `tempSelectDepartID` 内部元素发生变化时也会触发监听回调,可能会影响性能,需注意。 +- 代码中注释掉的部分(如 `onnodeclick` 和 `onpopupclosed` 中触发 `change` 事件的代码)可能是之前的实现逻辑,若需要可根据实际情况恢复使用。 \ No newline at end of file