diff --git a/src/api/sales/CustomerGroup/index.ts b/src/api/sales/CustomerGroup/index.ts new file mode 100644 index 0000000..ec4f645 --- /dev/null +++ b/src/api/sales/CustomerGroup/index.ts @@ -0,0 +1,90 @@ +import { LngCustomerGroupPageModel, LngCustomerGroupPageParams, LngCustomerGroupPageResult } from './model/CustomerGroupModel'; +import { defHttp } from '/@/utils/http/axios'; +import { ErrorMessageMode } from '/#/axios'; + +enum Api { + Page = '/sales/customerGroup/page', + List = '/sales/customerGroup/list', + Info = '/sales/customerGroup/info', + LngCustomerGroup = '/sales/customerGroup', + + + + + DataLog = '/sales/customerGroup/datalog', +} + +/** + * @description: 查询LngCustomerGroup分页列表 + */ +export async function getLngCustomerGroupPage(params: LngCustomerGroupPageParams, mode: ErrorMessageMode = 'modal') { + return defHttp.get( + { + url: Api.Page, + params, + }, + { + errorMessageMode: mode, + }, + ); +} + +/** + * @description: 获取LngCustomerGroup信息 + */ +export async function getLngCustomerGroup(id: String, mode: ErrorMessageMode = 'modal') { + return defHttp.get( + { + url: Api.Info, + params: { id }, + }, + { + errorMessageMode: mode, + }, + ); +} + +/** + * @description: 新增LngCustomerGroup + */ +export async function addLngCustomerGroup(lngCustomerGroup: Recordable, mode: ErrorMessageMode = 'modal') { + return defHttp.post( + { + url: Api.LngCustomerGroup, + params: lngCustomerGroup, + }, + { + errorMessageMode: mode, + }, + ); +} + +/** + * @description: 更新LngCustomerGroup + */ +export async function updateLngCustomerGroup(lngCustomerGroup: Recordable, mode: ErrorMessageMode = 'modal') { + return defHttp.put( + { + url: Api.LngCustomerGroup, + params: lngCustomerGroup, + }, + { + errorMessageMode: mode, + }, + ); +} + +/** + * @description: 删除LngCustomerGroup(批量删除) + */ +export async function deleteLngCustomerGroup(ids: string[], mode: ErrorMessageMode = 'modal') { + return defHttp.delete( + { + url: Api.LngCustomerGroup, + data: ids, + }, + { + errorMessageMode: mode, + }, + ); +} \ No newline at end of file diff --git a/src/api/sales/CustomerGroup/model/CustomerGroupModel.ts b/src/api/sales/CustomerGroup/model/CustomerGroupModel.ts new file mode 100644 index 0000000..09f2c74 --- /dev/null +++ b/src/api/sales/CustomerGroup/model/CustomerGroupModel.ts @@ -0,0 +1,44 @@ +import { BasicPageParams, BasicFetchResult } from '/@/api/model/baseModel'; + +/** + * @description: LngCustomerGroup分页参数 模型 + */ +export interface LngCustomerGroupPageParams extends BasicPageParams { + grpCode: string; + + typeCode: string; + + dateFrom: string; + + dateTo: string; + + grpName: string; + + note: string; +} + +/** + * @description: LngCustomerGroup分页返回值模型 + */ +export interface LngCustomerGroupPageModel { + id: string; + + grpCode: string; + + typeCode: string; + + dateFrom: string; + + dateTo: string; + + grpName: string; + + note: string; +} + +0; + +/** + * @description: LngCustomerGroup分页返回值结构 + */ +export type LngCustomerGroupPageResult = BasicFetchResult; \ No newline at end of file diff --git a/src/views/mdm/CountryRegion/components/Form.vue b/src/views/mdm/CountryRegion/components/Form.vue index cf74a2b..7ceba63 100644 --- a/src/views/mdm/CountryRegion/components/Form.vue +++ b/src/views/mdm/CountryRegion/components/Form.vue @@ -3,8 +3,13 @@ ref="systemFormRef" :formProps="data.formDataProps" :formModel="{}" - :isWorkFlow="props.fromPage!=FromPageType.MENU" - /> + :isWorkFlow="props.fromPage!=FromPageType.MENU"> + + \ No newline at end of file diff --git a/src/views/sales/CustomerGroup/components/Form.vue b/src/views/sales/CustomerGroup/components/Form.vue new file mode 100644 index 0000000..e88fd48 --- /dev/null +++ b/src/views/sales/CustomerGroup/components/Form.vue @@ -0,0 +1,368 @@ + + + \ No newline at end of file diff --git a/src/views/sales/CustomerGroup/components/config.ts b/src/views/sales/CustomerGroup/components/config.ts new file mode 100644 index 0000000..391abe3 --- /dev/null +++ b/src/views/sales/CustomerGroup/components/config.ts @@ -0,0 +1,429 @@ +import { FormProps, FormSchema } from '/@/components/Form'; +import { BasicColumn } from '/@/components/Table'; + +export const formConfig = { + useCustomConfig: false, +}; + +export const searchFormSchema: FormSchema[] = [ + { + field: 'dateFrom', + label: '日期', + component: 'RangePicker', + componentProps: { + format: 'YYYY-MM-DD', + style: { width: '100%' }, + getPopupContainer: () => document.body, + }, + }, + { + field: 'grpName', + label: '客户组说明', + component: 'Input', + }, + { + field: 'typeCode', + label: '类型', + component: 'XjrSelect', + componentProps: { + datasourceType: 'dic', + params: { itemId: '1990241330091048961' }, + labelField: 'name', + valueField: 'value', + + getPopupContainer: () => document.body, + }, + }, +]; + +export const columns: BasicColumn[] = [ + { + dataIndex: 'grpCode', + title: '客户组编码', + componentType: 'input', + align: 'left', + + sorter: true, + }, + + { + dataIndex: 'typeCode', + title: '类型', + componentType: 'select', + align: 'left', + + sorter: true, + }, + + { + dataIndex: 'dateFrom', + title: '超始日期', + componentType: 'date', + align: 'left', + + sorter: true, + }, + + { + dataIndex: 'dateTo', + title: '结束日期', + componentType: 'date', + align: 'left', + + sorter: true, + }, + + { + dataIndex: 'grpName', + title: '客户组说明', + componentType: 'textarea', + align: 'left', + + sorter: true, + }, + + { + dataIndex: 'note', + title: '备注', + componentType: 'textarea', + align: 'left', + + sorter: true, + }, +]; +//表单事件 +export const formEventConfigs = { + 0: [ + { + type: 'circle', + color: '#2774ff', + text: '开始节点', + icon: '#icon-kaishi', + bgcColor: '#D8E5FF', + isUserDefined: false, + }, + { + color: '#F6AB01', + icon: '#icon-chushihua', + text: '初始化表单', + bgcColor: '#f9f5ea', + isUserDefined: false, + nodeInfo: { processEvent: [] }, + }, + ], + 1: [ + { + color: '#B36EDB', + icon: '#icon-shujufenxi', + text: '获取表单数据', + detail: '(新增无此操作)', + bgcColor: '#F8F2FC', + isUserDefined: false, + nodeInfo: { processEvent: [] }, + }, + ], + 2: [ + { + color: '#F8625C', + icon: '#icon-jiazai', + text: '加载表单', + bgcColor: '#FFF1F1', + isUserDefined: false, + nodeInfo: { processEvent: [] }, + }, + ], + 3: [ + { + color: '#6C6AE0', + icon: '#icon-jsontijiao', + text: '提交表单', + bgcColor: '#F5F4FF', + isUserDefined: false, + nodeInfo: { processEvent: [] }, + }, + ], + 4: [ + { + type: 'circle', + color: '#F8625C', + text: '结束节点', + icon: '#icon-jieshuzhiliao', + bgcColor: '#FFD6D6', + isLast: true, + isUserDefined: false, + }, + ], +}; +export const formProps: FormProps = { + labelCol: { span: 3, offset: 0 }, + labelAlign: 'right', + layout: 'horizontal', + size: 'default', + schemas: [ + { + key: 'd788c25634344c4d9e76e6c20cfbf949', + field: 'grpCode', + label: '客户组编码', + type: 'input', + component: 'Input', + colProps: { span: 12 }, + defaultValue: '', + componentProps: { + width: '100%', + span: '', + defaultValue: '', + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: false, + respNewRow: false, + placeholder: '请输入客户组编码', + maxlength: null, + prefix: '', + suffix: '', + addonBefore: '', + addonAfter: '', + disabled: true, + allowClear: false, + showLabel: true, + required: false, + rules: [], + events: {}, + isSave: false, + isShow: true, + scan: false, + style: { width: '100%' }, + }, + }, + { + key: 'b272dd41b20040808c1ea3ddac99a47f', + field: 'typeCode', + label: '类型', + type: 'select', + component: 'XjrSelect', + colProps: { span: 12 }, + componentProps: { + width: '100%', + span: '', + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: false, + respNewRow: false, + placeholder: '请选择下拉选择', + sepTextField: '', + showLabel: true, + showSearch: false, + clearable: false, + disabled: false, + staticOptions: [ + { key: 1, label: 'Option 1', value: 'Option 1' }, + { key: 2, label: 'Option 2', value: 'Option 2' }, + { key: 3, label: 'Option 3', value: 'Option 3' }, + ], + defaultSelect: null, + datasourceType: 'dic', + params: { itemId: '1990241330091048961' }, + labelField: 'name', + valueField: 'value', + apiConfig: { + path: 'CodeGeneration/selection', + method: 'GET', + apiId: '93d735dcb7364a0f8102188ec4d77ac7', + }, + dicOptions: [], + required: true, + rules: [], + events: {}, + isShow: true, + itemId: '1990241330091048961', + style: { width: '100%' }, + }, + }, + { + key: '3fc7c48352794ec5901605f3cffad0dc', + field: 'dateFrom', + label: '超始日期', + // type: 'date', + type: 'slot', + slotName: 'dateFrom', + component: 'DatePicker', + colProps: { span: 12 }, + defaultValue: '', + componentProps: { + span: '', + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: false, + respNewRow: false, + defaultValue: '', + width: '100%', + placeholder: '请选择超始日期', + format: 'YYYY-MM-DD HH:mm:ss', + showLabel: true, + allowClear: true, + disabled: false, + required: false, + isShow: true, + rules: [], + events: {}, + style: { width: '100%' }, + }, + }, + { + key: 'db833a66db2c45dab55ef34b47e4c95a', + field: 'dateTo', + label: '结束日期', + // type: 'date', + type: 'slot', + slotName: 'dateTo', + component: 'DatePicker', + colProps: { span: 12 }, + defaultValue: '', + componentProps: { + span: '', + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: false, + respNewRow: false, + defaultValue: '', + width: '100%', + placeholder: '请选择结束日期', + format: 'YYYY-MM-DD HH:mm:ss', + showLabel: true, + allowClear: true, + disabled: false, + required: false, + isShow: true, + rules: [], + events: {}, + style: { width: '100%' }, + }, + }, + { + key: 'c95c753263bd4f20ade0bf3edce4061f', + field: 'grpName', + label: '客户组说明', + type: 'textarea', + component: 'InputTextArea', + colProps: { span: 24 }, + defaultValue: '', + componentProps: { + width: '100%', + span: '', + defaultValue: '', + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: false, + respNewRow: true, + placeholder: '请输入客户组说明,最多200字', + maxlength: 200, + rows: 2, + autoSize: false, + showCount: false, + disabled: false, + showLabel: true, + allowClear: false, + required: true, + isShow: true, + rules: [], + events: {}, + style: { width: '100%' }, + }, + }, + { + key: 'c4697d84099e4b5392062f4d7bd775ab', + field: 'note', + label: '备注', + type: 'textarea', + component: 'InputTextArea', + colProps: { span: 24 }, + defaultValue: '', + componentProps: { + width: '100%', + span: '', + defaultValue: '', + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: false, + respNewRow: true, + placeholder: '请输入备注,最多200字', + maxlength: 200, + rows: 2, + autoSize: false, + showCount: false, + disabled: false, + showLabel: true, + allowClear: false, + required: false, + isShow: true, + rules: [], + events: {}, + style: { width: '100%' }, + }, + }, + // { + // key: '0459b560bc024780b529f9d346a1e5b1', + // label: '表格组件', + // field: 'lngCustomerGroupCustomerList', + // type: 'form', + // component: 'SubForm', + // required: true, + // colProps: { span: 24 }, + // componentProps: { + // mainKey: 'lngCustomerGroupCustomerList', + // columns: [ + // { + // key: 'fe7ce464a2294fc8b9ccc4c3764f12b7', + // title: '单行文本', + // dataIndex: 'grpCode', + // componentType: 'Input', + // defaultValue: '', + // componentProps: { + // width: '100%', + // span: '', + // defaultValue: '', + // labelWidthMode: 'fix', + // labelFixWidth: 120, + // responsive: false, + // respNewRow: false, + // placeholder: '请输入单行文本', + // maxlength: null, + // prefix: '', + // suffix: '', + // addonBefore: '', + // addonAfter: '', + // disabled: false, + // allowClear: false, + // showLabel: true, + // required: false, + // rules: [], + // events: {}, + // isSave: false, + // isShow: true, + // scan: false, + // }, + // }, + // { title: '操作', key: 'action', fixed: 'right', width: '50px' }, + // ], + // span: '24', + // preloadType: 'api', + // apiConfig: {}, + // itemId: '', + // dicOptions: [], + // useSelectButton: false, + // buttonName: '选择数据', + // showLabel: true, + // showComponentBorder: true, + // showFormBorder: true, + // showIndex: false, + // isShow: true, + // multipleHeads: [], + // }, + // }, + ], + showActionButtonGroup: false, + buttonLocation: 'center', + actionColOptions: { span: 24 }, + showResetButton: false, + showSubmitButton: false, + hiddenComponent: [], +}; \ No newline at end of file diff --git a/src/views/sales/CustomerGroup/components/customerListModal.vue b/src/views/sales/CustomerGroup/components/customerListModal.vue new file mode 100644 index 0000000..2eed41b --- /dev/null +++ b/src/views/sales/CustomerGroup/components/customerListModal.vue @@ -0,0 +1,138 @@ + + + diff --git a/src/views/sales/CustomerGroup/components/workflowPermission.ts b/src/views/sales/CustomerGroup/components/workflowPermission.ts new file mode 100644 index 0000000..05a3daf --- /dev/null +++ b/src/views/sales/CustomerGroup/components/workflowPermission.ts @@ -0,0 +1,121 @@ +export const permissionList = [ + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '客户组编码', + fieldId: 'grpCode', + isSubTable: false, + showChildren: true, + type: 'input', + key: 'd788c25634344c4d9e76e6c20cfbf949', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '类型', + fieldId: 'typeCode', + isSubTable: false, + showChildren: true, + type: 'select', + key: 'b272dd41b20040808c1ea3ddac99a47f', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '超始日期', + fieldId: 'dateFrom', + isSubTable: false, + showChildren: true, + type: 'date', + key: '3fc7c48352794ec5901605f3cffad0dc', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '结束日期', + fieldId: 'dateTo', + isSubTable: false, + showChildren: true, + type: 'date', + key: 'db833a66db2c45dab55ef34b47e4c95a', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '客户组说明', + fieldId: 'grpName', + isSubTable: false, + showChildren: true, + type: 'textarea', + key: 'c95c753263bd4f20ade0bf3edce4061f', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '备注', + fieldId: 'note', + isSubTable: false, + showChildren: true, + type: 'textarea', + key: 'c4697d84099e4b5392062f4d7bd775ab', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSubTable: true, + showChildren: false, + tableName: 'lngCustomerGroupCustomerList', + fieldName: '表格组件', + fieldId: 'lngCustomerGroupCustomerList', + type: 'form', + key: '0459b560bc024780b529f9d346a1e5b1', + children: [ + { + required: true, + view: true, + edit: true, + disabled: false, + isSubTable: true, + isSaveTable: false, + showChildren: false, + tableName: 'lngCustomerGroupCustomerList', + fieldName: '单行文本', + fieldId: 'grpCode', + key: 'fe7ce464a2294fc8b9ccc4c3764f12b7', + children: [], + }, + ], + }, +]; \ No newline at end of file diff --git a/src/views/sales/CustomerGroup/index.vue b/src/views/sales/CustomerGroup/index.vue new file mode 100644 index 0000000..b0a757c --- /dev/null +++ b/src/views/sales/CustomerGroup/index.vue @@ -0,0 +1,311 @@ + + + \ No newline at end of file diff --git a/src/views/sales/GradeSystem/components/Form.vue b/src/views/sales/GradeSystem/components/Form.vue index 2a761c0..45f42cb 100644 --- a/src/views/sales/GradeSystem/components/Form.vue +++ b/src/views/sales/GradeSystem/components/Form.vue @@ -5,13 +5,16 @@ :formModel="{}" :isWorkFlow="props.fromPage!=FromPageType.MENU" /> - 新增 - + 新增 + @@ -37,7 +40,7 @@ const { filterFormSchemaAuth } = usePermission(); const { mergeFormSchemas,mergeFormEventConfigs } = useFormConfig(); const { currentRoute } = useRouter(); - + const isView = ref(false) const RowKey = 'id'; const emits = defineEmits(['changeUploadComponentIds','loadingCompleted', 'form-mounted']); const props = defineProps({ @@ -61,7 +64,7 @@ { title: t('序号'), dataIndex: 'index', key: 'index', sorter: true, customRender: (column) => `${column.index + 1}` ,width: 100}, { title: t('评价事项'), dataIndex: 'itemName', sorter: true, width:200}, { title: t('评价标准'), dataIndex: 'itemDesc', sorter: true, }, - { title: t('评价部门'), dataIndex: 'eDeptCode', sorter: true, width: 140}, + { title: t('评价部门'), dataIndex: 'eDeptCode', sorter: true, width: 200}, { title: t('操作'), dataIndex: 'operation', width: 120}, ]); const curIdx = ref(null) @@ -87,6 +90,11 @@ } onMounted(async () => { + isView.value = currentRoute.value?.fullPath.includes('viewForm') + if (isView.value) { + let idx = columns.value.findIndex(v =>v.dataIndex=='operation') + idx>-1 && columns.value.splice(idx, 1) + } try { // 合并渲染覆盖配置中的字段配置、表单事件配置 await mergeCustomFormRenderConfig(); @@ -194,15 +202,15 @@ try { values[RowKey] = rowId; state.formModel = values; - let obj = { + let list = JSON.parse(JSON.stringify(dataList.value)); + list.forEach(v => { + delete v.eDeptName + !v.gsId && (v.gsId = values.gsId) + !v.id && (v.id = values.id) + }) + let obj = { ...values, - lngGradeSystemItemList: dataList.value.map(v => { - return { - ...v, - gsId: values.gsId, - id: values.id, - } - }) + lngGradeSystemItemList: list } let saveVal = await updateLngGradeSystem(obj); await submitFormEvent(customFormEventConfigs, state.formModel, @@ -215,9 +223,13 @@ async function add(values) { try { state.formModel = values; + let list = JSON.parse(JSON.stringify(dataList.value)); + list.forEach(v => { + delete v.eDeptName + }) let obj = { ...values, - lngGradeSystemItemList: dataList.value, + lngGradeSystemItemList: list, valid: 'Y' } let saveVal = await addLngGradeSystem(obj); diff --git a/src/views/sales/GradeSystem/components/config.ts b/src/views/sales/GradeSystem/components/config.ts index adea496..dfb98f8 100644 --- a/src/views/sales/GradeSystem/components/config.ts +++ b/src/views/sales/GradeSystem/components/config.ts @@ -37,6 +37,19 @@ export const searchFormSchema: FormSchema[] = [ getPopupContainer: () => document.body, }, }, + { + field: 'valid', + label: '是否有效', + component: 'XjrSelect', + componentProps: { + datasourceType: 'dic', + params: { itemId: '1978057078528327681' }, + labelField: 'name', + valueField: 'value', + + getPopupContainer: () => document.body, + }, + }, ]; export const columns: BasicColumn[] = [ diff --git a/src/views/sales/GradeSystem/components/evaluateModal.vue b/src/views/sales/GradeSystem/components/evaluateModal.vue index 53e525f..1c10b08 100644 --- a/src/views/sales/GradeSystem/components/evaluateModal.vue +++ b/src/views/sales/GradeSystem/components/evaluateModal.vue @@ -14,8 +14,8 @@ - + @@ -30,6 +30,7 @@ import { Form, message } from 'ant-design-vue'; import { useI18n } from '/@/hooks/web/useI18n'; import { useMessage } from '/@/hooks/web/useMessage'; import type { CascaderProps } from 'ant-design-vue'; + import { requestMagicApi } from '/@/api/magicApi'; const { t } = useI18n(); const isUpdate = ref(true); @@ -45,18 +46,28 @@ const rules = { }; const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { - initialFetch() setModalProps({ confirmLoading: false }); isUpdate.value = !!data?.isUpdate; - console.log(isUpdate.value, 88888888888) if (!isUpdate.value) { initialFetch() - } else { - const resData = await getAreaInfo({code: 1,excludeType:'excludeType' }); - options.value = resData.areaList } if (unref(isUpdate)) { Object.assign(formState, {...data.record}) + const res = await requestMagicApi({ + method: "get", + url: "mdm/getDepartmentByCode", + body: undefined, + query: { + code: data?.record?.eDeptCode + } + }); + options.value = (res.tree || []).map(item => { + return { + ...item, + isLeaf: !item.hasChild, + } + }) + Object.assign(formState,{...formState, 'eDeptCode':res.codeArr}) } }); @@ -66,10 +77,14 @@ const loadData: CascaderProps['loadData'] = async (selectedOptions) => { const targetOption = selectedOptions[selectedOptions.length - 1]; targetOption.loading = true; try { - const res = await getAreaList({ - pid: targetOption.id, - excludeType: 'excludeType', - }); + const res = await requestMagicApi({ + method: "get", + url: "mdm/queryChildByCode", + body: undefined, + query: { + code: targetOption.code + } + }); if (Array.isArray(res)) { const children = (res || []).map(item => { @@ -89,7 +104,14 @@ const loadData: CascaderProps['loadData'] = async (selectedOptions) => { }; async function initialFetch() { try { - const res = await getAreaList({ pid: '', excludeType:'CONTINENT' }); + const res = await requestMagicApi({ + method: "get", + url: "mdm/queryChildByCode", + body: undefined, + query: { + code: '0' + } + }); options.value = (res || []).map(item => { return { ...item, @@ -100,6 +122,10 @@ const loadData: CascaderProps['loadData'] = async (selectedOptions) => { } const onChange = (value, selectedOptions) => { console.log(value, 55,selectedOptions ) + let list = selectedOptions.map(v=> { + return v.name + }) + formState.eDeptName = list.join('/') } onMounted(() => { diff --git a/src/views/sales/GradeSystem/index.vue b/src/views/sales/GradeSystem/index.vue index c056b0a..28a9d9c 100644 --- a/src/views/sales/GradeSystem/index.vue +++ b/src/views/sales/GradeSystem/index.vue @@ -1,5 +1,5 @@