/* ******************* 保时捷target setting流程提交控制 start ******************* */ import React from "react"; import ReactDOM from "react-dom" window.workflowCus = Object.assign(window.workflowCus ? window.workflowCus : {}, { /** * @author youhong.ai * @desc 禁止点击提交按钮 */ doNotClickSubmit: function () { let submitButton = $('.ant-btn.ant-btn-primary[ecid="_Route@vmt0lk_Comp@upn4fo_Button@2oxqe7@0_button@xq1ea3"][title="Submit "]') if (submitButton.length === 0) { submitButton = $('.ant-btn.ant-btn-primary[ecid="_Route@vmt0lk_Comp@upn4fo_Button@2oxqe7@0_button@xq1ea3"][title="提交"]') } if (submitButton.length === 0) { submitButton = $("#weareqtop_9v5e5i_1670481049632 div.ant-row.wea-new-top-req div.ant-col-xs-18.ant-col-sm-18.ant-col-md-16.ant-col-lg-14 button[title='提交'],[title='Submit '],[title='Submit']") } if (submitButton.length !== 0) { let buttonReact = window.Utils.findReact(submitButton[0]) let rightBtn = Utils.findReact($(".ant-menu-item.text-elli[ecid='_Route@vmt0lk_Comp@upn4fo_WeaRightMenu@1ok9r0_Item@eu37n0_li@zyccqn']")[0]) setTimeout(() => { buttonReact.props.disabled = true buttonReact.setState({}) rightBtn.props.disabled = true rightBtn.setState({}) }, 100) } }, /** * @author youhong.ai * @desc 允许点击按钮 */ allowClickSubmit: function () { let submitButton = $('.ant-btn.ant-btn-primary[ecid="_Route@vmt0lk_Comp@upn4fo_Button@2oxqe7@0_button@xq1ea3"][title="Submit "]') if (submitButton.length === 0) { submitButton = $('.ant-btn.ant-btn-primary[ecid="_Route@vmt0lk_Comp@upn4fo_Button@2oxqe7@0_button@xq1ea3"][title="提交"]') } if (submitButton.length === 0) { submitButton = $("#weareqtop_9v5e5i_1670481049632 div.ant-row.wea-new-top-req div.ant-col-xs-18.ant-col-sm-18.ant-col-md-16.ant-col-lg-14 button[title='提交'],[title='Submit '],[title='Submit']") } if (submitButton.length !== 0) { WfForm.controlBtnDisabled(false) let buttonReact = window.Utils.findReact(submitButton[0]) buttonReact.props.disabled = false buttonReact.setState({}) } }, /** * 监听qzhj字段值改变 * @author youhong.ai * @param id 字段id * @param value 字段值 * @param obj 字段值对象 */ onQzhjFieldChangeValue: function (obj, id, value) { if (value != '100') { window.workflowCus.doNotClickSubmit() } else { window.workflowCus.allowClickSubmit() } }, /** * 检查qzhj字段值 * @author youhong.ai * @param fieldId qzhj字段id */ checkOnQzhJfiedlChangeValue: function (fieldId) { let value = WfForm.getFieldValue(fieldId); window.workflowCus.onQzhjFieldChangeValue(null, null, value) }, /** * 检查提交按钮是否符合条件 * @author youhong.ai * @param fieldId 字段id * @returns {(function(function()=): void)|*} */ checkClickSubmit: function (fieldId) { return (callback = () => { }) => { let value = WfForm.getFieldValue(fieldId); if (value != 100) { WfForm.showMessage("~`~`7 目标设定的总值必须是100%,请检查并修改后提交。 " + "`~`8 The total value of target setting must be 100%,please check to submit after modification! " + "`~`9 目标设定的总值必须是100%,请检查并修改后提交。`~`~", 2, 5); } else { callback() } } }, /** * 保存按钮触发流程转数据 * @author youhong.ai */ saveTriggerWorkflowToModel: async function () { let baseInfo = WfForm.getBaseInfo() if (baseInfo && baseInfo.requestid != '-1') { let result = await Utils.api({ url: "/api/aiyh/workflow/target-setting/save-trigger", type: "POST", contentType: "application/json", data: JSON.stringify({ requestId: baseInfo.requestid, nodeId: baseInfo.nodeid, isBill: baseInfo.isbill, formId: baseInfo.formid, workflowId: baseInfo.workflowid }) }) if (result && result.code === 200) { localStorage.setItem("saveTriggerWorkflowToModel", "false") } } }, saveAfterCallback: function (callback) { localStorage.setItem("saveTriggerWorkflowToModel", "true") callback() } }) /* ******************* 保时捷target setting流程提交控制 end ******************* */ /* ******************* 保时捷target setting流程提交控制 start ******************* */ $(() => { let qzhjFieldId = WfForm.convertFieldNameToId("qzhj") window.workflowCus.checkOnQzhJfiedlChangeValue(qzhjFieldId) WfForm.registerCheckEvent(WfForm.OPER_SUBMIT, window.workflowCus.checkClickSubmit(qzhjFieldId)) WfForm.registerCheckEvent(WfForm.OPER_SAVECOMPLETE, window.workflowCus.saveAfterCallback) WfForm.bindFieldChangeEvent(qzhjFieldId, window.workflowCus.onQzhjFieldChangeValue) let flag = localStorage.getItem("saveTriggerWorkflowToModel") if (flag === "true") { window.workflowCus.saveTriggerWorkflowToModel() } }) /* ******************* 保时捷target setting流程提交控制 end ******************* */ /* ******************* 保时捷个人目标台账查询target setting按钮默认置灰色 ******************* */ window.workflowCus = Object.assign(window.workflowCus ? window.workflowCus : {}, { notAllowedTargetSetting: function () { window.workflowCus.changeBtnDisabledValue(true) }, changeBtnDisabledValue: function (disable) { if ($(".ant-btn.ant-btn-primary[ecid='_Route@9uoqid_Com@knmejd_ButtonNew@813let@0_Button@tegwjx_button@xq1ea3']").length === 0) { return } let button = Utils.findReact($(".ant-btn.ant-btn-primary[ecid='_Route@9uoqid_Com@knmejd_ButtonNew@813let@0_Button@tegwjx_button@xq1ea3']")[0]) if (button) { button.props.disabled = disable button.setState({}) } }, allowedTargetSettingBtnClick: function () { window.workflowCus.changeBtnDisabledValue(false) }, queryTotalWeight: function () { Utils.api({ url: "/api/ayh/target-setting/btn/can-allowed" }).then(res => { if (res && res.code === 200) { if (res.data) { window.workflowCus.allowedTargetSettingBtnClick() } else { window.workflowCus.notAllowedTargetSetting() } } }).catch(error => { console.log(err) }) }, reRender: function () { const dataHandle = function (datas, displayType) { window.workflowCus.notAllowedTargetSetting() //Changes to 'datas' do not directly modify the real database data, but modify the data received at the front end. $(() => { window.workflowCus.queryTotalWeight() }) return datas } ModeList.dataLoadAfter(dataHandle) } }) $(() => { window.workflowCus.notAllowedTargetSetting() setTimeout(() => { window.workflowCus.notAllowedTargetSetting() }, 10) window.workflowCus.reRender() }) /* ******************* 保时捷个人目标台账查询target setting按钮默认置灰色 END ******************* */ /* ******************* apa流程通过apa分数字段带出level字段 ******************* */ window.workflowCus = Object.assign(window.workflowCus ? window.workflowCus : {}, { getLevelByScore: async function (config) { let scoreFiled = config.scoreFiled let score = Utils.getFiledValueByName(scoreFiled); if (score == 0 || score == '') { return } let result = await Utils.api({ url: "/api/ayh/workflow/apa/level", data: { score } }) if (result && result.code === 200) { Utils.changeFieldValueByName(config.levelField, result.data) } } }) /* ******************* apa流程通过apa分数字段带出level字段eng ******************* */ /* ******************* apa流程通过apa分数字段带出level字段 ******************* */ $(() => { let config = { scoreFiled: "apafsptyg", levelField: "level1" } try { setTimeout(() => { WfForm.bindFieldChangeEvent(Utils.convertNameObjToId(config.scoreFiled), () => { window.workflowCus.getLevelByScore(config) }) window.workflowCus.getLevelByScore(config) }, 100) } catch (err) { console.log(err) } }) /* ******************* apa流程通过apa分数字段带出level字段eng ******************* */ /* ******************* apa(employee)流程明细分数控制 ******************* */ function addChangeEventListener(configItem) { let fieldIds = Utils.convertNameToIdUtil([{ fieldName: configItem.selfEvaluationScore, table: configItem.table }, { fieldName: configItem.leaderScore, table: configItem.table }]) WfForm.bindDetailFieldChangeEvent(fieldIds, (id, rowIndex, value) => { if (value == '') { return } if (value >= 1 && value <= 5) { if (value % 0.5 !== 0) { showHint(id + "_" + rowIndex) } } else { showHint(id + "_" + rowIndex) } }) } function showHint(id) { WfForm.showMessage(`Evaluate your target completion by selecting a score. The scores are of 0.5 break-down. 5 - Outstanding 4 - Exceeds Expectations 3 - Meets Expectations 2 - Needs Improvement 1 - Unsatisfactory`, 2, 10) setTimeout(() => { WfForm.changeFieldValue(id, {value: ""}) }, 100) } $(() => { let employeeDetailConfig = [{ table: 'detail_1', selfEvaluationScore: 'zp', leaderScore: 'ldpf' }, { table: 'detail_2', selfEvaluationScore: 'zp', leaderScore: 'ldpf' }] employeeDetailConfig.forEach(item => { addChangeEventListener(item) }) }) /* ******************* apa(employee)流程明细分数控制end ******************* */ /* ******************* 流程明细数据整合插入start ******************* */ $(() => { const workflowInsertValueConfig = [ { table: 'detail_1', targetTable: 'detail_3', filedMapping: [{ source: 'mbmc', target: 'name' }, { source: 'mbms', target: 'description' }, { source: 'zp', target: 'score' }, { source: 'zwpj', target: 'grpj' }, { source: 'mbmc', target: 'ldpf' }, { source: 'ldpj', target: 'ldpj' }] }, { table: 'detail_2', targetTable: 'detail_3', filedMapping: [{ source: 'xx', target: 'name' }, { source: 'ms', target: 'description' }, { source: 'zp', target: 'score' }, { source: 'zwpj', target: 'grpj' }, { source: 'mbmc', target: 'ldpf' }, { source: 'ldpj', target: 'ldpj' }] } ] /** * 执行提交时将配置中的明细表数据合并到指定的明细表中 */ WfForm.registerCheckEvent(WfForm.OPER_SUBMIT, (continueRun) => { start() continueRun() }) /** * 开始执行合并操作 */ function start() { let mappingResult = [] workflowInsertValueConfig.forEach(item => { let valueMapping = getDetailValueMapping(item) mappingResult = [...mappingResult, ...valueMapping] }) setValue(mappingResult) } /** * 设置表数据到指定的明细表中 * @param valueMapping 值映射数组 */ function setValue(valueMapping) { valueMapping.forEach(row => { let rowData = {} row.forEach(item => { if (!rowData[item.targetTable]) { rowData[item.targetTable] = {} } rowData[item.targetTable][Utils.convertNameToIdUtil({ fieldName: item.targetField, table: item.targetTable })] = { value: item.value } }) Object.keys(rowData).forEach(key => { WfForm.addDetailRow(key, rowData[key]); }) }) } /** * 获取明细值和对应字段的映射数组 * @param configItem 配置项 * @returns {*[]} 明细字段和对应值的映射数组 */ function getDetailValueMapping(configItem) { let detailIdsStr = WfForm.getDetailAllRowIndexStr(configItem.table); let detailIdArr = detailIdsStr.split(",") let result = [] for (let i = 0; i < detailIdArr.length; i++) { let fieldValueMapping = getValueByConfig(configItem.filedMapping, configItem.table, detailIdArr[i], configItem.targetTable) result.push(fieldValueMapping) } return result } /** * 通过配置数据获取值 * @param fieldMapping 字段映射规则数组 * @param tableName 表名称 * @param detailIndex 明细表下标 * @param targetTable 目标表 * @returns {*[]} 对应明细行的值数组 */ function getValueByConfig(fieldMapping, tableName, detailIndex, targetTable) { let result = [] fieldMapping.forEach(item => { let fieldValue = Utils.getFiledValueByName({ fieldName: item.source, table: tableName }, detailIndex) result.push({ targetField: item.target, value: fieldValue, targetTable: targetTable }) }) return result } }) /* ******************* 流程明细数据整合插入end ******************* */ /* ******************* 当明细数据未加载完成时 控制流程提交 start ******************* */ $(() => { const config = { table: 'detail_1', field: ['qswj'] } function check() { let detailRowIndexStr = WfForm.getDetailAllRowIndexStr(config.table); let rowIndexArr = detailRowIndexStr.split(","); try { rowIndexArr.forEach(item => { config.field.forEach(field => { let value = WfForm.getFieldValue(WfForm.convertFieldNameToId(field, config.table) + "_" + item) if (value == '' || value == null) { throw field + " is can not be null!"; } }) }) } catch (err) { return false } return true } WfForm.registerCheckEvent(WfForm.OPER_SUBMIT, callback => { if (check()) { callback() } else { WfForm.showConfirm("~`~` " + "7 模版文件生成中,请稍后在提交! " + " `~`8 Template file generation, please submit later! " + "`~`~", function () { }, function () { }, { title: "~`~` " + "7 提交检查提示 " + "`~` 8 Submit check prompt " + "`~`~", //弹确认框的title,仅PC端有效 okText: "OK", //自定义确认按钮名称 cancelText: "Cancel" //自定义取消按钮名称 }); } }) }) /* ******************* 当明细数据未加载完成时 控制流程提交 end ******************* */ /* ******************* 流程明细字段包含某个字符串时给某个字段赋值为某个东西start ******************* */ $(() => { let config = [{ table: 'detail_1', mapping: [{ sourceField: '', targetField: '', sourceIncludes: '', targetSet: '' }] }] function runJs() { config.forEach(item => { let tableName = item.table let mapping = item.mapping if (tableName === "main") { mapping.forEach(row => { let sourceValue = WfForm.getFieldValue(WfForm.convertFieldNameToId(row.sourceField, tableName)); if (sourceValue.indexOf(row.sourceIncludes) !== -1) { WfForm.changeFieldValue(WfForm.convertFieldNameToId(row.targetField, tableName, { value: row.targetSet })) } }) } else { let rowIndexArr = WfForm.getDetailAllRowIndexStr(tableName).split(","); rowIndexArr.forEach(rowIndex => { mapping.forEach(row => { let sourceValue = WfForm.getFieldValue(WfForm.convertFieldNameToId(row.sourceField, tableName)); if (sourceValue.indexOf(row.sourceIncludes) !== -1) { WfForm.changeFieldValue(WfForm.convertFieldNameToId(row.targetField, tableName) + "_" + rowIndex, { value: row.targetSet }) } }) }) } }) } WfForm.registerCheckEvent(WfForm.OPER_SUBMIT, callback => { runJs() callback() }) }) /* ******************* 流程明细字段包含某个字符串时给某个字段赋值为某个东西end ******************* */ /* ******************* 流程提交按钮触发流程抄送start ******************* */ $(() => { let config = { // 抄送人所在明细表编号,1-明细1 ; 2-明细2 detailNo: '1', // 抄送人所在字段字段名 ccResourceField: '', // 一级部门负责人字段名 firstLevelDepResponsibleField: '' } WfForm.registerCheckEvent(WfForm.OPER_SUBMIT, function (callback) { $.ajax("/api/aiyh/pcn/cc-workflow/trigger", { type: "POST", data: JSON.stringify({ detailNo: config.detailNo, requestId: WfForm.getBaseInfo().requestid, ccResourceField: config.ccResourceField, firstLevelDepResponsibleField: config.firstLevelDepResponsibleField }), headers: { "Content-Type": "application/json" }, complete: (res) => { res.then(r => { if (r && r.code === 200) { callback(); } }) } }) }); }) /* ******************* 流程提交按钮触发流程抄送end ******************* */ /* ******************* 提交外出流程 ******************* */ (function start() { function fillNum(n) { if (n < 10) { return "0" + n; } else { return n; } } let date = new Date(); let month = date.getMonth() + 1; let year = date.getFullYear(); let n = window.prompt("请输入日期:", date.getDate().toString()); let workDate = year + "-" + fillNum(month) + "-" + fillNum(n); n = fillNum(n); WfForm.changeFieldValue("field607", {value: workDate}); let workflowTitle = WfForm.getFieldValue("field-1"); WfForm.changeFieldValue("field-1", {value: workflowTitle.substring(0, workflowTitle.length - 2) + n}); WfForm.changeFieldValue("field609", {value: workDate}); WfForm.changeFieldValue("field608", {value: "00:00"}); WfForm.changeFieldValue("field610", {value: "23:59"}); WfForm.changeFieldValue("field30038", {value: 0}); WfForm.changeFieldValue("field611", {value: "出差"}); WfForm.changeFieldValue("field8715", {value: "2"}); $("button[ecid='_Route@vmt0lk_Comp@upn4fo_FormContent@g9f33k_MainLayout@kdmfyn_LayoutTr@ds2cqb@main_0_CellType@27chqt@main_17_10_FieldContent@r045n3_BrowserElement@2mq6lm_WeaBrowser@j1zg9h_WrappedComponent@i9q2c5_Component@iiw91q_Associative@zt8qgk_Button@ztqsd2_button@xq1ea3']").trigger("click"); WfForm.registerCheckEvent(WfForm.OPER_CLOSE, function (callback) { setTimeout(() => { window.location.href = "/spa/workflow/static4form/index.html#/main/workflow/req?iscreate=1&workflowid=746"; }, 500) }); })() /* ******************* 提交外出流程 ******************* */ /* ******************* 明细数据统计数量添加 ******************* */ $(() => { let config = { // 数据来源表配置 sourceConfig: { key: '', table: '', type: '' }, // 需要修改的表配置 targetConfig: { key: '', table: '', type: [{ type: '', changeField: '' }, { type: '', changeField: '' }] } } function changeTargetFieldValue() { let sourceConfig = config.sourceConfig; let targetConfig = config.targetConfig; let targetDetailRowArr = WfForm.getDetailAllRowIndexStr(targetConfig.table).split(","); let targetMap = new Map() // 组装明细数据 targetDetailRowArr.forEach(item => { let fieldMark = WfForm.convertFieldNameToId(targetConfig.key, targetConfig.table) let fieldId = fieldMark + "_" + item let fieldValue = WfForm.getFieldValue(fieldId); targetMap.set(fieldValue, item) }) let sourceDetailRowArr = WfForm.getDetailAllRowIndexStr(sourceConfig.table).split(","); sourceDetailRowArr.forEach(item => { let fieldMark = WfForm.convertFieldNameToId(sourceConfig.key, sourceConfig.table) let fieldId = fieldMark + "_" + item let fieldValue = WfForm.getFieldValue(fieldId); let typeFieldMark = WfForm.convertFieldNameToId(sourceConfig.type, sourceConfig.table) let typeFieldId = typeFieldMark + "_" + item let typeFieldValue = WfForm.getFieldValue(typeFieldId); targetConfig.type.forEach(typeItem => { if (typeItem.type == typeFieldValue) { // 需要修改对应行的字段 let targetRowIndex = targetMap.get(fieldValue); let fieldMark = WfForm.convertFieldNameToId(typeItem.changeField, targetConfig.table) let fieldId = fieldMark + "_" + targetRowIndex let targetRowValue = WfForm.getFieldValue(fieldId); let result = +targetRowValue + 1 WfForm.changeFieldValue(fieldId, { value: result }) } }) }) } WfForm.registerCheckEvent(WfForm.OPER_SUBMIT, callback => { changeTargetFieldValue() callback() }) }) /* ******************* 明细数据数量统计添加 end ******************* */ /* ******************* 计算年月日 start ******************* */ $(() => { const config = [{ // 源字段 sourceField: 'htksrq', // 目标字段 targetField: 'htjsrq', // 日期加月份字段 numberField: 'contractperiod', monthBase: 12 }, { sourceField: 'syqksrq', targetField: 'syqjsrq', numberField: 'probationperiod', monthBase: 1 }] runJs(); function runJs() { config.forEach(item => { bindAction(item) }) } function bindAction(configItem) { let fieldId = WfForm.convertFieldNameToId(configItem.numberField) WfForm.bindFieldChangeEvent(fieldId, (obj, id, value) => { if ("" == value) { WfForm.changeFieldValue(WfForm.convertFieldNameToId(configItem.targetField), {value: ""}) return } let sourceValue = WfForm.getFieldValue(WfForm.convertFieldNameToId(configItem.sourceField)); if ("" == sourceValue) { setTimeout(() => { WfForm.changeFieldValue(fieldId, {value: ""}) }, 10) } let date = new Date(sourceValue) date.setMonth(date.getMonth() + +value * configItem.monthBase) date.setDate(date.getDate() - 1) let day = date.getDate(); let month = date.getMonth() + 1; let year = date.getFullYear(); WfForm.changeFieldValue(WfForm.convertFieldNameToId(configItem.targetField), { value: `${year}-${fullNum(month)}-${fullNum(day)}` }) }) } function fullNum(i) { if (i <= 9) { return '0' + i } else { return i } } }) /* ******************* 计算年月日 end ******************* */ /* ******************* 年假计算 start ******************* */ $(() => { let config = { // 基础年假 base: 20, // 入职日期 dateField: 'jrbsjjtsj', // 年假 targetField: 'nj' } runJs() function runJs() { WfForm.bindFieldChangeEvent(WfForm.convertFieldNameToId(config.dateField), (obj, id, value) => { let date = new Date(value) let nowDate = new Date() let njValue = calculateBonus(date, nowDate, config) if (value !== 0) { WfForm.changeFieldValue(WfForm.convertFieldNameToId(config.targetField), {value: njValue}) } }) } function calculateBonus(startDate, endDate, config) { const diffInMs = endDate.getTime() - startDate.getTime(); const diffInYears = diffInMs / (1000 * 60 * 60 * 24 * 365); if (diffInYears < 3) { return config.base; } else if (diffInYears >= 3 && diffInYears < 6) { return config.base + 1; } else { const extraYears = Math.floor((diffInYears - 3) / 3); let resultDay = config.base + extraYears * 2 if (resultDay >= 25) { return 25; } return resultDay; } } }) /* ******************* 年假计算 end ******************* */ /* ******************* youhong.ai 明细字段合并主表,序号内容换行展示 start ******************* */ $(() => { const config = { // 明细表 detail: 'detail_3', // 明细字段 detailField: 'jbxxnr', // 主表字段 mainField: 'jbxxnr' } function runJs() { let rowIndexStr = WfForm.getDetailAllRowIndexStr(config.detail); let rowIndexArr = rowIndexStr.split(","); let value = "" rowIndexArr.forEach(item => { let fieldId = WfForm.convertFieldNameToId(config.detailField, config.detail) + "_" + item let fieldValue = WfForm.getFieldValue(fieldId); value += (+item + 1) + "、" + fieldValue + "\n"; }) WfForm.changeFieldValue(WfForm.convertFieldNameToId(config.mainField), {value}) } WfForm.registerCheckEvent(WfForm.OPER_SUBMIT, (callback) => { runJs() callback() }) }) /* ******************* youhong.ai 明细字段合并主表,序号内容换行展示 end ******************* */ /* ******************* youhong.ai 取明细行中最早时间的一行,将数据放到主表 start ******************* */ $(() => { const config = { // 明细表 detail: 'detail_1', // 映射关系 mapping: [{ // 明细表字段 detailField: 'jbsj', // 主表字段 mainField: 'zzjsrq', }, { // 明细表字段 detailField: 'jbtd', // 主表字段 mainField: 'jbqd', }], dateSort: 'jbsj' } function runJs() { let rowIndexStr = WfForm.getDetailAllRowIndexStr(config.detail); let rowIndexArray = rowIndexStr.split(","); const detailData = [] rowIndexArray.forEach(item => { let obj = {} config.mapping.forEach(mapping => { obj[mapping.detailField] = WfForm.getFieldValue(WfForm.convertFieldNameToId(mapping.detailField, config.detail) + "_" + item) }) detailData.push(obj) }) console.log(detailData) let minDateObj = filterByMinDate(detailData, config.dateSort); console.log(minDateObj) config.mapping.forEach(item => { WfForm.changeFieldValue(WfForm.convertFieldNameToId(item.mainField), { value: minDateObj[item.detailField] }) }) } function filterByMinDate(arr, key) { return arr.reduce((min, obj) => { if (!min || new Date(obj[key]) <= new Date(min[key])) { return obj; } return min; }, null); } WfForm.registerCheckEvent(WfForm.OPER_SUBMIT, (callback) => { runJs() callback() }) }) /* ******************* youhong.ai 取明细行中最早时间的一行,将数据放到主表 end ******************* */ /* ******************* youhong.ai 主表选择框自定义渲染为进度条 start ******************* */ $(() => { const field = 'jz' const config = { '-1': 0, '0': 20, '1': 40, '2': 60, '3': 80, '4': 100, } function customerRender(info, compFn) { let fieldValue = info.fieldValue; if (!fieldValue) { fieldValue = '-1' } let {WeaProgress} = ecCom return React.createElement(WeaProgress, { strokeColor: '#6c8dc1', percent: config[fieldValue] }) } WfForm.proxyFieldContentComp(WfForm.convertFieldNameToId(field).replace("field", ""), customerRender) setTimeout(() => { WfForm.forceRenderField(WfForm.convertFieldNameToId(field)); }, 500) }) /* ******************* youhong.ai 主表选择框自定义渲染为进度条 end ******************* */ /* ******************* youhong.ai 限制考试按钮点击 start ******************* */ $(() => { let config = { // 条件 conditions: { lx: '', bxxx: '' }, // 表名 tableName: "uf_hgpxtz", // 文档字段 docIdField: 'clwd', // 阅读时长字段 timeField: '', // 版本 1 - 2 version: '2' } function pxlx() { let datas = ModeList.getTableDatas(); if (datas && datas.length >= 1) { let obj = datas[0]; let value = obj.lx Object.keys(config.conditions).forEach(key => { config.conditions[key] = obj[key] }) api({ url: "/api/aiyh/exam-btn/control/is-read", type: "POST", data: JSON.stringify(config), contentType: "application/json" }).then(res => { if (res && res.code == 200) { if (res.data) { let url = "/spa/workflow/index_form.jsp#/main/workflow/req?iscreate=1&workflowid=306&field24498=" + value; window.open(url); } else { ModeList.showMessage("需要查看所有考试相关文档后方可考试,请先查看考试材料!", 1, 2); } } else { ModeList.showMessage("系统错误,请稍后尝试!", 2, 1.5); } }) } } window.pxlx = pxlx /** * @author youhong.ai * @desc 发起请求 */ function api(requestOptions = { url: "", type: "GET", data: "", isAsync: true, success: () => { }, error: () => { }, complete: () => { }, contentType: 'application/json', beforeSend: () => { } }) { let options = Object.assign({ url: "", type: "GET", data: "", isAsync: true, success: () => { }, error: () => { }, complete: () => { }, contentType: 'application/json', beforeSend: () => { } }, requestOptions) return $.ajax(options) } }) /* ******************* youhong.ai 限制考试按钮点击 end ******************* */ /* ******************* youhong.ai 随机抽取题库考题 start ******************* */ $(() => { const config = { table: '', // 使用范围字段 scopeOfUse: '', // 类型明细表 typeDetail: { // 明细表名 tableName: "", // 类型字段 typeField: '', // 类型数量 typeNumber: '', // 类型数量字段 typeTotalNumber: '' }, targetDetail: { tableName: '', testQuestionField: '' }, // 橘色id roleId: 88, } /** * 获取考题分类总数 * @param scopeOfUse 大分类:管理员 与 普通员工 */ function getTestPaperTypeNumber(scopeOfUse) { Utils.api({ url: `/api/aiyh/exam-btn/control/count?scopeOfUse=${scopeOfUse}&groupField=${config.typeDetail.typeField}&scopeOfUseField=${config.scopeOfUse}&table=${config.table}` }).then(res => { if (res && res.code === 200) { let typeNumber = res.data // 监听类型变化 WfForm.bindDetailFieldChangeEvent(WfForm.convertFieldNameToId(config.typeDetail.typeField, config.typeDetail.tableName), (id, rowIndex, value) => { let totalNumber = typeNumber[value] // 更新总数字段 WfForm.changeFieldValue(WfForm.convertFieldNameToId(config.typeDetail.typeTotalNumber, config.typeDetail.tableName) + "_" + rowIndex, { value: totalNumber }) }) } }) } /** * 获取试题类型和数量 * @param scopeOfUse 使用范围 */ function getTestPaper(scopeOfUse) { getTestPaperTypeNumber(scopeOfUse) } /** * 生成随机试题 */ function extractTestQuestions() { let detailAllRowIndexStr = WfForm.getDetailAllRowIndexStr(config.typeDetail.tableName); let rowArr = detailAllRowIndexStr.split(","); let typeNumberObj = {} rowArr.forEach(item => { let type = WfForm.getFieldValue(WfForm.convertFieldNameToId(config.typeDetail.typeField, config.typeDetail.tableName) + "_" + item); let number = WfForm.getFieldValue(WfForm.convertFieldNameToId(config.typeDetail.typeNumber, config.typeDetail.tableName) + "_" + item); if (number <= 0) { return } typeNumberObj[type] = number }) let params = { scopeOfUse: WfForm.getFieldValue(config.scopeOfUse), groupField: config.typeDetail.typeField, scopeOfUseField: config.scopeOfUse, table: config.table, questNumberMap: typeNumberObj } Utils.api({ url: "/api/aiyh/exam-btn/control/random-test-questions", data: JSON.stringify(params), }).then(res => { if (res && res.code == 200) { let testQuestions = res.data let n = 0; WfForm.delDetailRow(config.targetDetail.tableName, "all"); testQuestions.forEach(item => { let fieldMark = WfForm.convertFieldNameToId(config.targetDetail.testQuestionField, config.targetDetail.tableName) WfForm.addDetailRow(config.targetDetail.tableName, { [fieldMark]: { value: item.id, specialobj: [{ id: item.id, name: item.name }] } }) WfForm.triggerFieldAllLinkage(fieldMark + "_" + n++) }) } }) } function runJs() { // 监听分类数量发生变化 WfForm.bindFieldChangeEvent(WfForm.convertFieldNameToId(config.typeDetail.typeNumber, config.typeDetail.tableName), (id, rowIndex, value) => { if (value == '') { return } let total = WfForm.getFieldValue(WfForm.convertFieldNameToId(config.typeDetail.typeTotalNumber, config.typeDetail.tableName) + "_" + rowIndex); if (value > total) { WfForm.showConfirm("抽题数不能大于总题数!", function () { WfForm.changeFieldValue(WfForm.convertFieldNameToId(config.typeDetail.typeNumber, config.typeDetail.tableName) + "_" + rowIndex, { value: "" }) }); } }) // 监听主表使用范围 WfForm.bindFieldChangeEvent(WfForm.convertFieldNameToId(config.scopeOfUse), (obj, id, value) => { if (value == '') { return } getTestPaper(value) }) // 渲染生成抽取试题按钮 const generateBtnNode = document.querySelector("#cus_generate_test_questions>span") const {Button} = antd ReactDOM.render(React.createElement(Button, { type: "primary", children: "抽取试题", onClick: () => { extractTestQuestions() } }), generateBtnNode) $("#cus_generate_test_questions button").css({ margin: "3px auto" }) $("#cus_generate_test_questions span").css("color", "#FFF") } runJs() }) /* ******************* youhong.ai 随机抽取题库考题 end ******************* */