123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- import OSticky from '@/components/o-sticky'
- import { configUnit } from '@/constant'
- import request from '@/helpers/request'
- import { verifiyNumberInteger } from '@/helpers/toolsValidate'
- import { Button, Cell, CellGroup, Field, Popover, showToast } from 'vant'
- import { defineComponent, onMounted, reactive, shallowRef, Teleport } from 'vue'
- import styles from '../index.module.less'
- export const actions = [
- {
- text: '元',
- value: 'MONEY'
- },
- {
- text: '%',
- value: 'PERCENTAGE'
- }
- ]
- export default defineComponent({
- name: 'range-model',
- setup() {
- const statusList = reactive({
- show1: false,
- show2: false
- })
- const beforeData: any = shallowRef({}) // 储存原始数据
- const forms = reactive({} as any)
- const getDetails = async () => {
- try {
- const { data } = await request.get('/api-school/schoolParamConfig/queryByParamNameList', {
- params: {
- // schoolId: '',
- paramNames:
- 'scope_of_attendance,sign_in_attendance,sign_in_attendance_type,sign_out_attendance,sign_out_attendance_type'
- }
- })
- console.log(data, 'data')
- const rows = data || []
- rows.forEach((row: any) => {
- forms[row.paramName] = row.paramValue
- })
- beforeData.value = { ...forms }
- } catch {
- //
- }
- }
- // 数组进行对比
- const dataCompare = (beforeData: any, afterData: any) => {
- const changeDate: any = []
- for (const key in beforeData) {
- if (beforeData[key] != afterData[key]) {
- changeDate.push({
- paramName: key,
- paramValue: afterData[key]
- })
- }
- }
- return changeDate || []
- }
- // 修改
- const onSubmit = async () => {
- if (!forms['scope_of_attendance']) {
- showToast('请输入考勤定位范围')
- return
- }
- if (!forms['sign_in_attendance']) {
- showToast('请输入签到扣减金额')
- return
- }
- if (forms['sign_in_attendance'] > 100 && forms['sign_in_attendance_type'] === 'PERCENTAGE') {
- showToast('签到扣减金额输入有误')
- return
- }
- if (!forms['sign_out_attendance']) {
- showToast('请输入签退扣减金额')
- return
- }
- if (
- forms['sign_out_attendance'] > 100 &&
- forms['sign_out_attendance_type'] === 'PERCENTAGE'
- ) {
- showToast('签退扣减金额输入有误')
- return
- }
- try {
- const submitData = dataCompare(beforeData.value, forms)
- if (submitData.length > 0) {
- await request.post('/api-school/schoolParamConfig/update', {
- hideLoading: false,
- data: { configs: [...submitData], group: 'ATTENDANCE' }
- })
- }
- setTimeout(() => {
- showToast('保存成功')
- }, 200)
- } catch {
- //
- }
- }
- onMounted(() => {
- getDetails()
- })
- const onFormatterInt = (val: any) => {
- if (val && val >= 0) {
- return verifiyNumberInteger(val)
- } else {
- return ''
- }
- }
- return () => (
- <div class={styles.ruleContainer}>
- <CellGroup inset>
- <Cell>{{ title: () => <div class={styles.ruleTitle}>考勤定位范围</div> }}</Cell>
- <Cell>
- {{
- title: () => (
- <div
- class={styles.ruleContent}
- style={{
- display: 'flex',
- alignItems: 'center'
- }}
- >
- 签到、签退地点须在学校定位点
- <Field
- class={[styles.field, styles['field-m'], styles['field-w80']]}
- autocomplete="off"
- formatter={onFormatterInt}
- type="number"
- v-model={forms['scope_of_attendance']}
- >
- {{ extra: () => <span class={styles.ruleExtra}>米</span> }}
- </Field>
- 以内
- </div>
- )
- }}
- </Cell>
- </CellGroup>
- <CellGroup inset>
- <Cell>
- {{
- title: () => (
- <div class={[styles.ruleTitle]}>
- <span class={styles.red}>签到</span>地点在考勤定位范围之外时,扣减当日训练补助
- </div>
- )
- }}
- </Cell>
- <Cell>
- {{
- title: () => (
- <div class={[styles.ruleContent, styles.ruleMore, styles.flexDev]}>
- 单次扣减金额:
- <Field
- class={[styles.field, styles['field-m'], styles['field-w136']]}
- autocomplete="off"
- formatter={onFormatterInt}
- type="number"
- v-model={forms['sign_in_attendance']}
- >
- {{
- extra: () => (
- <Popover
- v-model:show={statusList.show1}
- class={styles.popover}
- actions={actions}
- onSelect={(val: any) => {
- forms['sign_in_attendance_type'] = val.value
- }}
- >
- {{
- reference: () => (
- <div class={[styles.unit, statusList.show1 && styles.active]}>
- {configUnit[forms['sign_in_attendance_type']]}
- </div>
- )
- }}
- </Popover>
- )
- }}
- </Field>
- </div>
- )
- }}
- </Cell>
- </CellGroup>
- <CellGroup inset>
- <Cell>
- {{
- title: () => (
- <div class={[styles.ruleTitle]}>
- <span class={styles.red}>签退</span>地点在考勤定位范围之外时,扣减当日训练补助
- </div>
- )
- }}
- </Cell>
- <Cell>
- {{
- title: () => (
- <div class={[styles.ruleContent, styles.ruleMore, styles.flexDev]}>
- 单次扣减金额:
- <Field
- class={[styles.field, styles['field-m'], styles['field-w136']]}
- autocomplete="off"
- formatter={onFormatterInt}
- type="number"
- v-model={forms['sign_out_attendance']}
- >
- {{
- extra: () => (
- <Popover
- v-model:show={statusList.show2}
- class={styles.popover}
- actions={actions}
- onSelect={(val: any) => {
- forms['sign_out_attendance_type'] = val.value
- }}
- >
- {{
- reference: () => (
- <div class={[styles.unit, statusList.show2 && styles.active]}>
- {configUnit[forms['sign_out_attendance_type']]}
- </div>
- )
- }}
- </Popover>
- )
- }}
- </Field>
- </div>
- )
- }}
- </Cell>
- </CellGroup>
- <Teleport to={'#app'}>
- <OSticky position="bottom">
- <div class={'btnGroup'}>
- <Button type="primary" round block onClick={onSubmit}>
- 保存设置
- </Button>
- </div>
- </OSticky>
- </Teleport>
- </div>
- )
- }
- })
|