@steedos-widgets/amis-lib 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -0
- package/dist/amis-lib.umd.js +314 -0
- package/dist/amis-lib.umd.min.js +314 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/index.cjs.js +315 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.esm.js +315 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/types/config/index.d.ts +8 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/lib/amis.d.ts +9 -0
- package/dist/types/lib/apps.d.ts +2 -0
- package/dist/types/lib/buttons.d.ts +11 -0
- package/dist/types/lib/converter/amis/api.d.ts +54 -0
- package/dist/types/lib/converter/amis/fields/index.d.ts +54 -0
- package/dist/types/lib/converter/amis/fields/list.d.ts +43 -0
- package/dist/types/lib/converter/amis/fields/lookup.d.ts +185 -0
- package/dist/types/lib/converter/amis/fields/sections.d.ts +22 -0
- package/dist/types/lib/converter/amis/fields/table.d.ts +34 -0
- package/dist/types/lib/converter/amis/form.d.ts +22 -0
- package/dist/types/lib/converter/amis/graphql.d.ts +22 -0
- package/dist/types/lib/converter/amis/index.d.ts +320 -0
- package/dist/types/lib/converter/amis/tpl.d.ts +11 -0
- package/dist/types/lib/converter/amis/util.d.ts +1 -0
- package/dist/types/lib/expression.d.ts +2 -0
- package/dist/types/lib/notification.d.ts +2 -0
- package/dist/types/lib/objects.d.ts +709 -0
- package/dist/types/lib/page.d.ts +1 -0
- package/dist/types/lib/public.env.d.ts +4 -0
- package/dist/types/lib/record.d.ts +3 -0
- package/dist/types/lib/router.d.ts +52 -0
- package/dist/types/lib/steedos.client.d.ts +13 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/lib/steedos.client.js","../src/lib/converter/amis/graphql.js","../src/lib/router.jsx","../src/lib/converter/amis/tpl.js","../src/config/index.js","../src/lib/converter/amis/fields/table.js","../src/lib/converter/amis/fields/list.js","../src/lib/converter/amis/fields/lookup.js","../src/lib/converter/amis/fields/index.js","../src/lib/converter/amis/api.js","../src/lib/converter/amis/fields/sections.js","../src/lib/converter/amis/form.js","../src/lib/converter/amis/index.js","../src/lib/record.js","../src/lib/objects.js","../src/lib/apps.js","../src/lib/expression.js","../src/lib/buttons.js","../src/lib/notification.js","../src/lib/page.js","../src/lib/public.env.js"],"sourcesContent":["/*\n * @Author: baozhoutao@steedos.com\n * @Date: 2022-07-04 11:24:28\n * @LastEditors: baozhoutao@steedos.com\n * @LastEditTime: 2022-09-01 16:00:48\n * @Description: \n */\nimport { endsWith, isEmpty, cloneDeep } from \"lodash\";\n\nconst STEEDOS_AUTH = {};\n\nconst getBuilderContext = ()=>{\n return Builder.settings.context ? Builder.settings.context : Builder.settings\n}\n\nexport const setSteedosAuth = (steedosSession) => {\n Object.assign(STEEDOS_AUTH, steedosSession);\n}\n\nexport async function fetchAPI(api, options = { credentials: 'include' }) {\n const headers = { 'Content-Type': 'application/json' }\n const AUTHORIZATION = getAuthorization()\n if (AUTHORIZATION) {\n headers[\n 'Authorization'\n ] = AUTHORIZATION\n } else {\n throw new Error(401)\n }\n\n options.headers = Object.assign({}, headers, options.headers);\n\n const res = await fetch(`${getRootUrl()}${api}`, options)\n \n if(res.status === 401){\n throw new Error(401)\n }\n\n const json = await res.json()\n if (json.errors) {\n console.error(json.errors)\n throw new Error('Failed to fetch API')\n }\n return json\n}\n\nexport function getFileSrc(fileId){\n return `${getRootUrl()}/api/files/files/${fileId}`\n}\n\nexport function getImageSrc(fileId){\n return `${getRootUrl()}/api/files/images/${fileId}`\n}\n\n\nexport function getTenantId(){\n try {\n const spaceId = getBuilderContext().tenantId\n\n if (window.location.search && !spaceId) {\n var searchParams = new URLSearchParams(window.location.search);\n spaceId = searchParams.get('X-Space-Id');\n }\n if (!spaceId) {\n return null;\n }\n return spaceId;\n } catch (error) {\n console.error(error)\n }\n}\n\nexport function getAuthToken(){\n try {\n const context = getBuilderContext()\n let token = context.authToken;\n if (!token) {\n return null;\n }\n return token;\n } catch (error) {\n console.error(error)\n }\n}\n\nexport function getAuthorization(){\n try {\n const context = getBuilderContext()\n let spaceId = context.tenantId;\n let token = context.authToken;\n \n if (!spaceId || !token) {\n return null;\n }\n return `Bearer ${spaceId},${token}`;\n } catch (error) {\n console.error(error)\n }\n}\n\nexport function absoluteUrl(url){\n return `${getRootUrl()}${url}`\n}\n\nexport function getRootUrl(defaultRootUrl){\n const context = getBuilderContext()\n if(context.rootUrl){\n return context.rootUrl;\n }\n const rootUrl = typeof window != 'undefined' ? window.localStorage.getItem(\"steedos:rootUrl\") : '';\n if(rootUrl){\n return rootUrl\n }\n return defaultRootUrl;\n}\n\nexport function setRootUrl(rootUrl){\n if(endsWith(rootUrl, '/')){\n rootUrl = rootUrl.substring(0, rootUrl.length-1)\n }\n localStorage.setItem(\"steedos:rootUrl\", rootUrl)\n}\n\nexport const getSteedosAuth = () => {\n // if(isEmpty(STEEDOS_AUTH)){\n // return {\n // space: localStorage.getItem(\"steedos:spaceId\"),\n // token: localStorage.getItem(\"steedos:token\"), \n // userId: localStorage.getItem(\"steedos:userId\"),\n // name: Meteor.user().name //TODO: 使用steedos 函数. 此属性在上传附件时使用\n // }\n // }\n return cloneDeep(STEEDOS_AUTH);\n}","import * as _ from 'lodash';\nimport { getUISchema } from '../../objects';\n\nexport async function getFieldsTemplate(fields, expand){\n if(expand != false){\n expand = true;\n }\n let fieldsName = ['_id'];\n let displayFields = [];\n let fieldsArr = [];\n if(_.isArray(fields)){\n fieldsArr = fields;\n }else{\n fieldsArr = _.values(fields);\n }\n for (const field of fieldsArr) {\n if(field.name.indexOf('.') < 0){\n if(expand && (field.type == 'lookup' || field.type == 'master_detail') && field.reference_to){\n const refUiSchema = await getUISchema(field.reference_to);\n const NAME_FIELD_KEY = refUiSchema.NAME_FIELD_KEY || 'name';\n fieldsName.push(`${field.name}:${field.name}__expand{_id,${NAME_FIELD_KEY}${field.reference_to_field ? `,${field.reference_to_field}`:''}}`);\n }else{\n fieldsName.push( field.alias ? `${field.alias}:${field.name}` : field.name)\n }\n\n if(field.type === 'date' || field.type == 'datetime' || field.type == 'boolean'){\n fieldsName.push(`${field.name}`)\n }\n\n if(field.type === 'date' || field.type == 'datetime' || field.type == 'boolean' || field.type == 'select' || field.type == 'file'){\n displayFields.push(`${field.name}`)\n }\n }\n }\n\n displayFields = _.uniq(displayFields);\n fieldsName = _.uniq(fieldsName);\n\n if(displayFields.length > 0){\n return `${fieldsName.join(',')},_display{${displayFields.join(',')}}`;\n }\n return `${fieldsName.join(' ')}`\n}\n\nexport async function getFindOneQuery(object, recordId, fields, options){\n let queryOptions = \"\";\n \n if(recordId){\n queryOptions = `(filters:[\"${object.idFieldName}\", \"=\", \"${recordId}\"])`;\n }\n let alias = \"data\";\n if(options){\n if(options.alias){\n alias = options.alias;\n }\n\n if(options.filters){\n queryOptions = `(filters:${options.filters})`;\n }\n if(options.queryOptions){\n queryOptions = `(${options.queryOptions})`;\n }\n }\n return {\n query: `{${alias}:${object.name}${queryOptions}{${await getFieldsTemplate(fields)}}}`\n }\n}\n\nexport function getSaveQuery(object, recordId, fields, options){\n return {\n objectName: \"${objectName}\",\n $: \"$$\",\n recordId: \"${recordId}\",\n modalName: \"${modalName}\"\n }\n}\n\n/*\n img字段值移除URL前缀使其保存时正常保存id,而不是url。\n*/\nexport function getScriptForRemoveUrlPrefixForImgFields(fields){\n let imgFieldsKeys = [];\n let imgFields = {};\n fields.forEach((item)=>{\n if(item.type === 'image'){\n imgFieldsKeys.push(item.name);\n imgFields[item.name] = {\n name: item.name,\n multiple: item.multiple\n };\n }\n })\n if(!imgFieldsKeys.length){\n return '';\n }\n return `\n let imgFieldsKeys = ${JSON.stringify(imgFieldsKeys)};\n let imgFields = ${JSON.stringify(imgFields)};\n imgFieldsKeys.forEach((item)=>{\n let imgFieldValue = formData[item];\n if(imgFieldValue && imgFieldValue.length){\n // 因为表单初始化接口的接收适配器中为image字段值添加了url前缀(为了字段编辑时正常显示图片),所以保存时移除(为了字段值保存时正常保存id,而不是url)。\n if(imgFields[item].multiple){\n if(imgFieldValue instanceof Array){\n formData[item] = imgFieldValue.map((value)=>{ \n let itemValue = value?.split('/');\n return itemValue[itemValue.length - 1];\n });\n }\n }else{\n let imgValue = imgFieldValue.split('/');\n formData[item] = imgValue[imgValue.length - 1];\n }\n }\n })\n `\n}\n\n/*\n file字段值重写使其保存时正常保存id。\n*/\nexport function getScriptForSimplifiedValueForFileFields(fields){\n let fileFieldsKeys = [];\n let fileFields = {};\n fields.forEach((item)=>{\n if(item.type === 'file'){\n fileFieldsKeys.push(item.name);\n fileFields[item.name] = {\n name: item.name,\n multiple: item.multiple\n };\n }\n })\n if(!fileFieldsKeys.length){\n return '';\n }\n return `\n let fileFieldsKeys = ${JSON.stringify(fileFieldsKeys)};\n let fileFields = ${JSON.stringify(fileFields)};\n fileFieldsKeys.forEach((item)=>{\n let fileFieldValue = formData[item];\n if(fileFieldValue){\n // 因为表单初始化接口的接收适配器中为file字段值重写了值及格式(为了字段编辑时正常显示附件名、点击附件名正常下载),所以保存时还原(为了字段值保存时正常保存id)。\n if(fileFields[item].multiple){\n if(fileFieldValue instanceof Array && fileFieldValue.length){\n formData[item] = fileFieldValue.map((value)=>{ \n if(typeof value === 'object'){\n return value.value;\n }else{\n return value;\n }\n });\n }\n }else{\n formData[item] = typeof fileFieldValue === 'object' ? fileFieldValue.value : fileFieldValue;\n }\n }\n })\n `\n}\n\nexport function getSaveDataTpl(fields){\n return `\n const formData = api.data.$;\n for (key in formData){\n // image、select等字段清空值后保存的空字符串转换为null。\n if(formData[key] === ''){\n formData[key] = null;\n }\n }\n const objectName = api.data.objectName;\n const fieldsName = Object.keys(formData);\n delete formData.created;\n delete formData.created_by;\n delete formData.modified;\n delete formData.modified_by;\n delete formData._display;\n ${getScriptForRemoveUrlPrefixForImgFields(fields)}\n ${getScriptForSimplifiedValueForFileFields(fields)}\n let query = \\`mutation{record: \\${objectName}__insert(doc: {__saveData}){_id}}\\`;\n if(formData.recordId && formData.recordId !='new'){\n query = \\`mutation{record: \\${objectName}__update(id: \"\\${formData._id}\", doc: {__saveData}){_id}}\\`;\n };\n delete formData._id;\n let __saveData = JSON.stringify(JSON.stringify(formData));\n `\n}\n\nexport function getSaveRequestAdaptor(fields){\n return `\n ${getSaveDataTpl(fields)}\n api.data = {query: query.replace('{__saveData}', __saveData)};\n return api;\n `\n}\n\nexport async function getFindQuery(object, recordId, fields, options){\n let limit = options.limit || 10;\n let queryOptions = `(top: ${limit})`;\n if(recordId){\n queryOptions = `(filters:[\"_id\", \"=\", \"${recordId}\"], top: ${limit})`;\n }\n let alias = \"data\";\n if(options){\n if(options.alias){\n alias = options.alias;\n }\n\n if(options.filters){\n queryOptions = `(filters:${options.filters})`;\n }\n if(options.queryOptions){\n queryOptions = `(${options.queryOptions})`;\n }\n }\n return {\n orderBy: \"${orderBy}\",\n orderDir: \"${orderDir}\",\n pageNo: \"${page}\",\n pageSize: \"${perPage}\",\n query: `{${alias}:${object.name}${queryOptions}{${await getFieldsTemplate(fields, options.expand)}},count:${object.name}__count(filters:{__filters})}`\n }\n}\n\nexport function getApi (isMobile){\n if(isMobile){\n //TODO 返回 绝对路径\n }else{\n // return __meteor_runtime_config__.ROOT_URL_PATH_PREFIX + \"/graphql\"\n return `\\${context.rootUrl}/graphql`\n }\n}","/*\n * @Author: baozhoutao@steedos.com\n * @Date: 2022-08-16 17:02:08\n * @LastEditors: baozhoutao@steedos.com\n * @LastEditTime: 2022-08-16 17:29:37\n * @Description:\n */\n\n\nexport const Router = {\n getAppPath({formFactor, appId}){\n return `/${formFactor === 'SMALL' ? 'mapp': 'app'}/${appId}`;\n },\n getPagePath(){\n //TODO\n },\n getObjectListViewPath({formFactor, appId, objectName, listViewName}){\n return `/${formFactor === 'SMALL' ? 'mapp': 'app'}/${appId}/${objectName}/grid/${listViewName}`;\n },\n getObjectDetailPath({formFactor, appId, objectName, recordId}){\n return `/${formFactor === 'SMALL' ? 'mapp': 'app'}/${appId}/${objectName}/view/${recordId}`;\n },\n getObjectRelatedViewPath({formFactor, appId, masterObjectName, masterRecordId, objectName, foreignKey}){\n return `/${formFactor === 'SMALL' ? 'mapp': 'app'}/${appId}/${masterObjectName}/${masterRecordId}/${objectName}/grid?related_field_name=${foreignKey}`;\n }\n}","/*\n * @Author: baozhoutao@steedos.com\n * @Date: 2022-05-23 09:53:08\n * @LastEditors: baozhoutao@steedos.com\n * @LastEditTime: 2022-09-02 10:43:04\n * @Description: \n */\nimport { Router } from '../../router'\n\nexport function getCreatedInfoTpl(formFactor){\n const href = Router.getObjectDetailPath({\n formFactor, appId: \"admin\", objectName: 'users', recordId: '${created_by._id}'\n })\n return `<div><a href='${href}'>\\${created_by.name}</a>\\${_display.created}</div>`\n}\n\nexport function getModifiedInfoTpl(formFactor){\n const href = Router.getObjectDetailPath({\n formFactor, appId: \"admin\", objectName: 'users', recordId: '${modified_by._id}'\n })\n return `<div><a href='${href}'>\\${modified_by.name}</a>\\${_display.modified}</div>`\n}\n\nexport function getDateTpl(field){\n return `<div>\\${_display.${field.name}}</div>`\n}\n\n\nexport function getDateTimeTpl(field){\n return `<div>\\${_display.${field.name}}</div>`\n}\n\n//TODO 处理name字段\nexport function getRefObjectNameFieldName(field){\n // const refObject = objectql.getObject(field.reference_to);\n // return refObject.NAME_FIELD_KEY;\n return 'name';\n}\n\nexport function getSelectTpl(field){\n return `<div>\\${_display.${field.name}}</div>`\n}\n\nexport function getNameTpl(field, ctx){\n if(ctx.objectName === 'cms_files'){\n return `<a href=\"\\${context.rootUrl}/api/files/files/\\${versions[0]}?download=true\">\\${${field.name}}</a>`\n }\n const href = Router.getObjectDetailPath({\n formFactor: ctx.formFactor, appId: ctx.appId, objectName: ctx.tabId, recordId: `\\${${ctx.idFieldName}}`\n })\n return `<a href=\"${href}\">\\${${field.name}}</a>`\n}\n\nexport function getLookupTpl(field, ctx){\n if(!field.reference_to){\n return getSelectTpl(field)\n }\n const NAME_FIELD_KEY = getRefObjectNameFieldName(field);\n if(field.multiple){\n const href = Router.getObjectDetailPath({\n formFactor: ctx.formFactor, appId: ctx.appId, objectName: field.reference_to, recordId: `<%=item._id%>`\n })\n return `\n <% if (data.${field.name} && data.${field.name}.length) { %><% data.${field.name}.forEach(function(item) { %> <a href=\"${href}\"><%=item.${NAME_FIELD_KEY}%></a> <% }); %><% } %>\n `\n }else{\n const href = Router.getObjectDetailPath({\n formFactor: ctx.formFactor, appId: ctx.appId, objectName: field.reference_to, recordId: `\\${${field.name}._id}`\n })\n return `<a href=\"${href}\">\\${${field.name}.${NAME_FIELD_KEY}}</a>`\n }\n \n}\n\nexport function getSwitchTpl(field){\n return `<% if (data.${field.name}) { %>\n <span class=\"slds-icon_container slds-icon-utility-check slds-current-color\" title=\"<%=data._display.${field.name}%>\">\n <span class=\"slds-assistive-text\"><%=data._display.${field.name}%></span>\n </span>\n <% } %>`\n}\n\nexport function getPasswordTpl(field){\n return `<% if (data.${field.name}) { %>\n <span>······</span>\n <% } %>`\n}\n\n\nexport function getFieldTpl (field, options){\n if(field.is_name || field.name === options.labelFieldName){\n return getNameTpl(field, options)\n }\n switch (field.type) {\n case 'password':\n return getPasswordTpl(field);\n case 'boolean':\n return getSwitchTpl(field);\n case 'select':\n return getSelectTpl(field);\n case 'date':\n return getDateTpl(field);\n case 'datetime':\n return getDateTimeTpl(field);\n case 'lookup':\n return getLookupTpl(field, options);\n case 'master_detail':\n return getLookupTpl(field, options);\n default:\n break;\n }\n};","/*\n * @Author: baozhoutao@steedos.com\n * @Date: 2022-08-04 10:42:49\n * @LastEditors: baozhoutao@steedos.com\n * @LastEditTime: 2022-08-25 10:28:47\n * @Description: \n */\nexport default {\n listView: {\n newRecordMode: 'modal',\n editRecordMode: 'modal',\n perPage: 20\n }\n}","import * as _ from 'lodash'\nimport * as Tpl from '../tpl';\nimport * as Fields from '../index';\nimport * as graphql from '../graphql';\nimport config from '../../../../config'\n\nfunction getOperation(fields){\n const controls = [];\n _.each(fields, function(field){\n controls.push(Fields.convertSFieldToAmisField(field, true));\n })\n return {\n \"type\": \"operation\",\n \"label\": \"操作\",\n \"width\": 100,\n fixed: \"right\",\n \"buttons\": [\n {\n \"type\": \"button\",\n \"icon\": \"fa fa-eye\",\n \"actionType\": \"dialog\",\n \"tooltip\": \"查看\",\n \"dialog\": {\n \"title\": \"查看\",\n \"body\": {\n \"type\": \"form\",\n \"controls\": controls\n }\n }\n }]\n }\n}\n\n//获取name字段,如果没有,则_index字段添加链接\nfunction getDetailColumn(){}\n\nfunction getTableColumns(fields, options){\n const columns = [{name: '_index',type: 'text', width: 32, placeholder: \"\"}];\n _.each(fields, function(field){\n if((field.is_name || field.name === options.labelFieldName) && options.objectName === 'cms_files'){\n columns.push({\n \"type\": \"button\",\n \"label\": `\\${${field.name}}`,\n \"type\": \"button\",\n \"actionType\": \"ajax\",\n \"api\": {\n \"url\": \"${context.rootUrl}/api/files/files/${versions[0]}?download=true\",\n \"method\": \"get\",\n \"headers\": {\n \"Authorization\": \"Bearer ${context.tenantId},${context.authToken}\"\n },\n \"responseType\": \"blob\",\n \"dataType\": \"form-data\"\n },\n \"id\": \"u:6c8291d1029f\",\n \"level\": \"link\"\n })\n }else{\n const tpl = Tpl.getFieldTpl(field, options);\n\n let type = 'text';\n if(tpl){\n type = 'tpl';\n }\n if(!field.hidden && !field.extra){\n columns.push({\n name: field.name,\n label: field.label,\n sortable: field.sortable,\n // searchable: field.searchable,\n width: field.width,\n type: type,\n tpl: tpl,\n toggled: field.toggled\n // toggled: true \n })\n }\n }\n \n });\n\n // columns.push(getOperation(fields));\n\n return columns;\n}\n\nfunction getDefaultParams(options){\n return {\n perPage: options.top || config.listView.perPage\n }\n}\n\nexport function getTableSchema(fields, options){\n if(!options){\n options = {};\n }\n return {\n mode: \"table\",\n name: \"thelist\",\n draggable: false,\n headerToolbar: [ 'reload'],\n defaultParams: getDefaultParams(options),\n columns: getTableColumns(fields, options),\n syncLocation: false,\n keepItemSelectionOnPageChange: true,\n checkOnItemClick: false,\n labelTpl: `\\${${options.labelFieldName}}`,\n autoFillHeight: false, // 自动高度效果不理想,先关闭\n }\n}\n\nexport async function getTableApi(mainObject, fields, options){\n const searchableFields = [];\n let { globalFilter, filter } = options;\n\n if(_.isArray(filter)){\n filter = _.map(filter, function(item){\n if(item.operation){\n return [item.field, item.operation, item.value];\n }else{\n return item\n }\n })\n }\n\n _.each(fields,function(field){\n if(field.searchable){\n searchableFields.push(field.name);\n }\n })\n let valueField = mainObject.key_field || '_id';\n const api = await getApi(mainObject, null, fields, {alias: 'rows', queryOptions: `filters: {__filters}, top: {__top}, skip: {__skip}, sort: \"{__sort}\"`});\n api.data.$term = \"$term\";\n api.data.$self = \"$$\";\n api.data.filter = \"$filter\"\n api.requestAdaptor = `\n const selfData = JSON.parse(JSON.stringify(api.data.$self));\n ${globalFilter ? `var filters = ${JSON.stringify(globalFilter)};` : 'var filters = [];'}\n if(_.isEmpty(filters)){\n filters = api.data.filter || [${JSON.stringify(filter)}];\n }else{\n filters = [filters, 'and', api.data.filter || [${JSON.stringify(filter)}]]\n }\n var pageSize = api.data.pageSize || 10;\n var pageNo = api.data.pageNo || 1;\n var skip = (pageNo - 1) * pageSize;\n var orderBy = api.data.orderBy || '';\n var orderDir = api.data.orderDir || '';\n var sort = orderBy + ' ' + orderDir;\n var allowSearchFields = ${JSON.stringify(searchableFields)};\n if(api.data.$term){\n filters = [[\"name\", \"contains\", \"'+ api.data.$term +'\"]];\n }else if(selfData.op === 'loadOptions' && selfData.value){\n filters = [[\"${valueField.name}\", \"=\", selfData.value]];\n }\n\n var searchableFilter = [];\n _.each(selfData, (value, key)=>{\n if(!_.isEmpty(value) || _.isBoolean(value)){\n if(_.startsWith(key, '__searchable__between__')){\n searchableFilter.push([\\`\\${key.replace(\"__searchable__between__\", \"\")}\\`, \"between\", value])\n }else if(_.startsWith(key, '__searchable__')){\n if(_.isString(value)){\n searchableFilter.push([\\`\\${key.replace(\"__searchable__\", \"\")}\\`, \"contains\", value])\n }else{\n searchableFilter.push([\\`\\${key.replace(\"__searchable__\", \"\")}\\`, \"=\", value])\n }\n }\n }\n });\n\n if(searchableFilter.length > 0){\n if(filters.length > 0 ){\n filters = [filters, 'and', searchableFilter];\n }else{\n searchableFilter = filters;\n }\n }\n\n if(allowSearchFields){\n allowSearchFields.forEach(function(key){\n const keyValue = selfData[key];\n if(keyValue){\n filters.push([key, \"contains\", keyValue]);\n }\n })\n }\n\n if(selfData.__keywords && allowSearchFields){\n const keywordsFilters = [];\n allowSearchFields.forEach(function(key, index){\n const keyValue = selfData.__keywords;\n if(keyValue){\n keywordsFilters.push([key, \"contains\", keyValue]);\n if(index < allowSearchFields.length - 1){\n keywordsFilters.push('or');\n }\n }\n })\n filters.push(keywordsFilters);\n }\n api.data.query = api.data.query.replace(/{__filters}/g, JSON.stringify(filters)).replace('{__top}', pageSize).replace('{__skip}', skip).replace('{__sort}', sort.trim());\n return api;\n `\n api.adaptor = `\n _.each(payload.data.rows, function(item, index){\n item._index = index + 1;\n })\n window.postMessage(Object.assign({type: \"listview.loaded\"}), \"*\")\n return payload;\n `;\n return api;\n}\n\nasync function getApi(object, recordId, fields, options){\n const data = await graphql.getFindQuery(object, recordId, fields, options);\n return {\n method: \"post\",\n url: graphql.getApi(),\n data: data,\n headers: {\n Authorization: \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n}","/*\n * @Author: baozhoutao@steedos.com\n * @Date: 2022-07-23 09:12:14\n * @LastEditors: baozhoutao@steedos.com\n * @LastEditTime: 2022-09-02 10:46:48\n * @Description: \n */\n\nimport * as Tpl from '../tpl';\nimport { Router } from '../../../router'\n\nfunction getListBody(fields, options){\n const columns = [];\n _.each(fields, function(field){\n\n const tpl = Tpl.getFieldTpl(field, options);\n\n let type = 'text';\n if(tpl){\n type = 'tpl';\n }\n if(!field.hidden && !field.extra){\n columns.push({\n name: field.name,\n label: field.label,\n sortable: field.sortable,\n // searchable: field.searchable,\n width: field.width,\n type: type,\n tpl: tpl,\n toggled: field.toggled\n // toggled: true \n })\n }\n });\n\n return {\n \"type\": \"hbox\",\n \"columns\": columns\n };\n}\n\nfunction getDefaultParams(options){\n return {\n perPage: options.top || 10\n }\n}\n\nexport function getListSchema(fields, options){\n return {\n mode: \"list\",\n name: \"thelist\",\n draggable: false,\n headerToolbar: ['reload'],\n defaultParams: getDefaultParams(options),\n syncLocation: false,\n keepItemSelectionOnPageChange: true,\n checkOnItemClick: false,\n labelTpl: `\\${name}`, //TODO 获取name字段\n listItem: {\n body: [...(getListBody(fields, options).columns)],\n actions: options.actions === false ? null : [\n {\n icon: \"fa fa-eye\",\n label: \"查看\",\n type: \"button\",\n actionType: \"link\",\n link: Router.getObjectDetailPath({\n formFactor: options.formFactor, \n appId: options.appId, \n objectName: options.tabId, \n recordId: `\\${_id}`\n })\n }\n ]\n }\n }\n}\n\n\nexport function getCardSchema(fields, options){\n let title = null;\n const titleField = _.find(fields, (f)=>{\n return f.name === options.labelFieldName;\n });\n if(titleField){\n title = Tpl.getFieldTpl(titleField, options)\n }\n return {\n mode: \"cards\",\n name: \"cards\",\n draggable: false,\n headerToolbar: ['statistics', 'pagination'],\n defaultParams: getDefaultParams(options),\n syncLocation: false,\n keepItemSelectionOnPageChange: false,\n checkOnItemClick: false,\n labelTpl: `\\${${options.labelFieldName}}`,\n card: {\n \"type\": \"card\",\n \"header\": {\n \"title\": title\n },\n \"body\": [...(getListBody(_.filter(fields, (f)=>{\n return f.name != options.labelFieldName\n }), options).columns)]\n }\n }\n}","import { getUISchema } from '../../../objects';\nimport * as _ from 'lodash'\nimport * as graphql from '../graphql'\nimport * as Tpl from '../tpl';\nimport * as Field from './index';\nimport * as Table from './table';\nimport * as List from './list';\n\nconst getReferenceTo = async (field)=>{\n let referenceTo = field.reference_to;\n if(!referenceTo){\n return ;\n }\n\n if(referenceTo === 'users'){\n referenceTo = 'space_users';\n field.reference_to_field = 'user'\n }\n\n const refObjectConfig = await getUISchema(referenceTo);\n let valueField = null;\n let valueFieldName = field.reference_to_field;\n if(!valueFieldName){\n valueFieldName = refObjectConfig.idFieldName || '_id';\n }\n if(valueFieldName === '_id'){\n valueField = {name: '_id', label: 'ID', type: 'text', toggled: false};\n }else{\n valueField = refObjectConfig.fields[valueFieldName] || {name: valueFieldName};\n }\n return {\n objectName: referenceTo,\n valueField: valueField,\n labelField: refObjectConfig.fields[refObjectConfig.NAME_FIELD_KEY || 'name']\n }\n}\n\n\nexport async function lookupToAmisPicker(field, readonly, ctx){\n let referenceTo = await getReferenceTo(field);\n if(!referenceTo){\n return ;\n }\n const refObjectConfig = await getUISchema(referenceTo.objectName);\n const tableFields = [];\n let i = 0;\n const searchableFields = [];\n\n const fieldsArr = [];\n\t_.each(refObjectConfig.fields , (field, field_name)=>{\n if(field_name != '_id' && !field.hidden){\n if(!_.has(field, \"name\")){\n field.name = field_name\n }\n fieldsArr.push(field)\n }\n })\n _.each(_.sortBy(fieldsArr, \"sort_no\"),function(field){\n if(i < 5){\n if(!_.find(tableFields, function(f){\n return f.name === field.name\n })){\n i++;\n tableFields.push(field)\n if(field.searchable){\n searchableFields.push(field.name);\n }\n }\n }\n });\n\n const fields = {\n [referenceTo.labelField.name]: referenceTo.labelField,\n [referenceTo.valueField.name]: referenceTo.valueField\n };\n\n _.each(tableFields, (tableField)=>{\n if(!tableField.hidden){\n fields[tableField.name] = tableField;\n }\n });\n\n const source = await getApi({\n name: referenceTo.objectName\n }, null, fields, {expand: true, alias: 'rows', queryOptions: `filters: {__filters}, top: {__top}, skip: {__skip}, sort: \"{__sort}\"`});\n source.data.$term = \"$term\";\n source.data.$self = \"$$\";\n \n source.requestAdaptor = `\n const selfData = JSON.parse(JSON.stringify(api.data.$self));\n var filters = [];\n var pageSize = api.data.pageSize || 10;\n var pageNo = api.data.pageNo || 1;\n var skip = (pageNo - 1) * pageSize;\n var orderBy = api.data.orderBy || '';\n var orderDir = api.data.orderDir || '';\n var sort = orderBy + ' ' + orderDir;\n var allowSearchFields = ${JSON.stringify(searchableFields)};\n if(api.data.$term){\n filters = [[\"name\", \"contains\", \"'+ api.data.$term +'\"]];\n }else if(selfData.op === 'loadOptions' && selfData.value){\n filters = [[\"${referenceTo.valueField.name}\", \"=\", selfData.value]];\n }\n if(allowSearchFields){\n allowSearchFields.forEach(function(key){\n const keyValue = selfData[key];\n if(keyValue){\n filters.push([key, \"contains\", keyValue]);\n }\n })\n }\n api.data.query = api.data.query.replace(/{__filters}/g, JSON.stringify(filters)).replace('{__top}', pageSize).replace('{__skip}', skip).replace('{__sort}', sort.trim());\n return api;\n `\n\n let top = 20;\n\n if(refObjectConfig.paging && refObjectConfig.paging.enabled === false){\n top = 1000;\n };\n\n let pickerSchema = null;\n if(ctx.formFactor === 'SMALL'){\n pickerSchema = List.getListSchema(tableFields, {\n top: top,\n ...ctx,\n actions: false\n })\n }else{\n pickerSchema = Table.getTableSchema(tableFields, {\n top: top,\n ...ctx\n })\n }\n\n const data = {\n type: Field.getAmisStaticFieldType('picker', readonly),\n labelField: referenceTo.labelField.name,\n valueField: referenceTo.valueField.name,\n modalMode: 'dialog', //TODO 设置 dialog 或者 drawer,用来配置弹出方式\n source: source,\n size: \"lg\",\n pickerSchema: pickerSchema,\n joinValues: false,\n extractValue: true\n }\n if(field.multiple){\n data.multiple = true\n data.extractValue = true\n }\n\n if(readonly){\n data.tpl = Tpl.getLookupTpl(field, ctx)\n }\n\n return data;\n}\n\nexport async function lookupToAmisSelect(field, readonly, ctx){\n let referenceTo = await getReferenceTo(field);\n\n let apiInfo;\n\n if(referenceTo){\n apiInfo = await getApi({\n name: referenceTo.objectName\n }, null, {\n [referenceTo.labelField.name]: Object.assign({}, referenceTo.labelField, {alias: 'label'}),\n [referenceTo.valueField.name]: Object.assign({}, referenceTo.valueField, {alias: 'value'})\n }, {expand: false, alias: 'options', queryOptions: `filters: {__filters}, top: {__top}`})\n }else{\n apiInfo = {\n method: \"post\",\n url: graphql.getApi(),\n data: {query: '{objects(filters: [\"_id\", \"=\", \"-1\"]){_id}}', $: \"$$\"}\n }\n }\n\n \n apiInfo.data.$term = \"$term\";\n apiInfo.data.$value = `$${field.name}.${referenceTo ? referenceTo.valueField.name : '_id'}`;\n _.each(field.depend_on, function(fName){\n apiInfo.data[fName] = `$${fName}`;\n })\n apiInfo.data['$'] = `$$`;\n apiInfo.data['rfield'] = `\\${object_name}`;\n // [[\"_id\", \"=\", \"$${field.name}._id\"],\"or\",[\"name\", \"contains\", \"$term\"]]\n apiInfo.requestAdaptor = `\n var filters = '[]';\n var top = 10;\n if(api.data.$term){\n filters = '[\"name\", \"contains\", \"'+ api.data.$term +'\"]';\n }else if(api.data.$value){\n filters = '[\"_id\", \"=\", \"'+ api.data.$value +'\"]';\n }\n api.data.query = api.data.query.replace(/{__filters}/g, filters).replace('{__top}', top);\n return api;\n `\n let labelField = referenceTo ? referenceTo.labelField.name : '';\n let valueField = referenceTo ? referenceTo.valueField.name : '';\n if(field._optionsFunction){\n apiInfo.adaptor = `\n payload.data.options = eval(${field._optionsFunction})(api.data);\n return payload;\n `\n labelField = 'label';\n valueField = 'value';\n }\n\n const data = {\n type: Field.getAmisStaticFieldType('select', readonly),\n joinValues: false,\n extractValue: true,\n labelField: labelField,\n valueField: valueField,\n autoComplete: apiInfo,\n }\n if(_.has(field, 'defaultValue') && !(_.isString(field.defaultValue) && field.defaultValue.startsWith(\"{\"))){\n data.value = field.defaultValue\n }\n if(field.multiple){\n data.multiple = true\n data.extractValue = true\n }\n\n if(readonly){\n data.tpl = Tpl.getLookupTpl(field, ctx)\n }\n\n return data;\n}\n\nasync function getApi(object, recordId, fields, options){\n const data = await graphql.getFindQuery(object, recordId, fields, options);\n return {\n method: \"post\",\n url: graphql.getApi(),\n data: data,\n headers: {\n Authorization: \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n}\n\nexport async function lookupToAmis(field, readonly, ctx){\n let referenceTo = await getReferenceTo(field);\n if(!referenceTo){\n return await lookupToAmisSelect(field, readonly, ctx);\n }\n const refObject = await getUISchema(referenceTo.objectName);\n\n // 此处不参考 steedos 的 enable_enhanced_lookup 规则. 如果默认是开启弹出选择,用户选择过程操作太繁琐, 所以默认是关闭弹出选择.\n if(refObject.enable_enhanced_lookup == true){\n return await lookupToAmisPicker(field, readonly, ctx);\n }else{\n return await lookupToAmisSelect(field, readonly, ctx);\n }\n}","import { cloneDeep, includes } from 'lodash';\nimport { lookupToAmis } from './lookup';\nimport { absoluteUrl } from '../../../steedos.client.js'\nimport * as Fields from '../fields';\nimport * as Tpl from '../tpl';\nimport * as _ from 'lodash'\nexport const OMIT_FIELDS = ['created', 'created_by', 'modified', 'modified_by'];\n// const Lookup = require('./lookup');\nconst AmisFormInputs = [\n 'text',\n 'date',\n 'file',\n 'image',\n 'datetime',\n 'time',\n 'number',\n 'currency',\n 'percent',\n 'password',\n 'url',\n 'email'\n]\n\nexport function getBaseFields(readonly){\n let calssName = 'm-1';\n if(readonly){\n calssName = `${calssName} slds-form-element_readonly`\n }\n return [\n { \n name: \"createdInfo\", \n label: \"创建人\",\n type: \"static\",\n labelClassName: 'text-left',\n className: calssName,\n tpl: Tpl.getCreatedInfoTpl()\n },\n { \n name: \"modifiedInfo\", \n label: \"修改人\",\n type: \"static\",\n labelClassName: 'text-left',\n className: calssName,\n tpl: Tpl.getModifiedInfoTpl()\n }\n ]\n};\n\nexport function getAmisStaticFieldType(type, readonly){\n if(!readonly){\n if(_.includes(AmisFormInputs, type)){\n return `input-${type}`;\n }\n return type;\n }\n if(_.includes(['text'], type)){\n return `static-${type}`;\n }else{\n return 'static';\n }\n};\n\nexport function getAmisFieldType(sField){\n switch (sField.type) {\n case 'text':\n return 'text';\n case 'textarea':\n return 'textarea';\n case 'html':\n return 'html';\n case 'select':\n return 'select';\n case 'boolean':\n return 'checkbox';\n case 'date':\n return 'date';\n case 'datetime':\n return 'datetime';\n case 'number':\n return 'number';\n case 'currency':\n return 'number';\n case 'percent':\n return 'number'\n case 'password':\n return 'password';\n case 'lookup':\n // TODO 根据字段配置返回 select || picker\n return 'select';\n case 'master_detail':\n // TODO 根据字段配置返回 select || picker\n return 'picker';\n case 'autonumber':\n return 'text';\n case 'url':\n return 'url'\n case 'email':\n return 'email'\n case 'image':\n return 'image'\n case 'formula':\n //TODO\n break;\n case 'summary':\n //TODO\n break;\n case 'grid':\n return 'table';\n default:\n console.log('convertData default', sField.type);\n // convertData.type = field.type\n break;\n }\n\n};\n\nexport function getObjectFieldSubFields(mainField, fields){\n const newMainField = Object.assign({subFields: []}, mainField);\n const subFields = _.filter(fields, function(field){\n return field.name.startsWith(`${mainField.name}.`)\n });\n newMainField.subFields = subFields;\n return newMainField;\n}\n\nexport function getGridFieldSubFields(mainField, fields){\n const newMainField = Object.assign({subFields: []}, mainField);\n const subFields = _.filter(fields, function(field){\n return field.name.startsWith(`${mainField.name}.`)\n });\n newMainField.subFields = subFields;\n return newMainField;\n}\n\n/**\n * TODO 处理权限\n * @param {*} object steedos object\n * @param {*} userSession \n */\n export function getPermissionFields(object, userSession){\n const permissionFields = [];\n const fieldsArr = [];\n\t_.each(object.fields , (field, field_name)=>{\n\t\tif(!_.has(field, \"name\")){\n\t\t\tfield.name = field_name\n }\n\t\tfieldsArr.push(field)\n })\n _.each(_.sortBy(fieldsArr, \"sort_no\"), function(field){\n if(!field.hidden){\n permissionFields.push( Object.assign({}, field, {permission: {allowEdit: true}}))\n }\n })\n return permissionFields;\n}\n\n\nexport function getSelectFieldOptions(field){\n const dataType = field.data_type || 'text';\n const options = [];\n _.each(field.options, (item)=>{\n switch (dataType) {\n case 'number':\n options.push({label: item.label, value: Number(item.value)});\n break;\n case 'text':\n options.push({label: item.label, value: String(item.value)});\n break;\n case 'boolean':\n options.push({label: item.label, value: item.value === 'false' ? false : true});\n break;\n default:\n break;\n }\n });\n return options;\n}\n\nexport async function convertSFieldToAmisField(field, readonly, ctx) {\n let rootUrl = null;\n // 创建人和修改人、创建时间和修改时间不显示\n if(_.includes(OMIT_FIELDS, field.name) && ctx.showSystemFields != true){\n return;\n }\n const baseData = {name: ctx.fieldNamePrefix ? `${ctx.fieldNamePrefix}${field.name}` : field.name, label: field.label, labelRemark: field.inlineHelpText, required: _.has(ctx, 'required') ? ctx.required : field.required};\n let convertData = {\n };\n // if(_.includes(OMIT_FIELDS, field.name)){\n // readonly = true;\n // }\n switch (field.type) {\n case 'text':\n convertData.type = getAmisStaticFieldType('text', readonly);\n break;\n case 'textarea':\n convertData.type = getAmisStaticFieldType('textarea', readonly);\n convertData.tpl = `<b><%=data.${field.name}%></b>`;\n break;\n case 'html':\n convertData = {\n type: \"editor\",\n language: \"html\",\n value: field.defaultValue || ''\n }\n break;\n // convertData = {\n // type: getAmisStaticFieldType('html', readonly)\n // }\n // break;\n case 'select':\n convertData = {\n type: getAmisStaticFieldType('select', readonly),\n joinValues: false,\n options: getSelectFieldOptions(field),\n extractValue: true,\n clearable: true,\n labelField: 'label',\n valueField: 'value',\n tpl: readonly ? Tpl.getSelectTpl(field) : null\n }\n if(_.has(field, 'defaultValue') && !(_.isString(field.defaultValue) && field.defaultValue.startsWith(\"{\"))){\n const dataType = field.data_type || 'text';\n if(field.defaultValue != null){\n if(dataType === 'text'){\n convertData.value = String(field.defaultValue);\n }else if(dataType === 'number'){\n convertData.value = Number(field.defaultValue);\n }else if(dataType === 'boolean'){\n convertData.value = field.defaultValue === 'false' ? false : true;\n }\n }\n }\n if(field.multiple){\n convertData.multiple = true\n convertData.extractValue = true\n }\n break;\n case 'boolean':\n convertData = {\n type: getAmisStaticFieldType('checkbox', readonly),\n option: field.inlineHelpText,\n tpl: readonly ? Tpl.getSwitchTpl(field) : null\n }\n break;\n case 'input-date-range':\n convertData = {\n type: \"input-date-range\",\n inputFormat: \"YYYY-MM-DD\",\n format:'YYYY-MM-DDT00:00:00.000[Z]',\n tpl: readonly ? Tpl.getDateTpl(field) : null,\n // utc: true\n }\n break;\n case 'date':\n convertData = {\n type: getAmisStaticFieldType('date', readonly),\n inputFormat: \"YYYY-MM-DD\",\n format:'YYYY-MM-DDT00:00:00.000[Z]',\n tpl: readonly ? Tpl.getDateTpl(field) : null,\n // utc: true\n }\n break;\n case 'input-datetime-range':\n convertData = {\n type: \"input-datetime-range\",\n inputFormat: 'YYYY-MM-DD HH:mm',\n format:'YYYY-MM-DDTHH:mm:ss.SSS[Z]',\n tpl: readonly ? Tpl.getDateTimeTpl(field) : null,\n utc: true\n }\n break;\n case 'datetime':\n convertData = {\n type: getAmisStaticFieldType('datetime', readonly),\n inputFormat: 'YYYY-MM-DD HH:mm',\n format:'YYYY-MM-DDTHH:mm:ss.SSS[Z]',\n tpl: readonly ? Tpl.getDateTimeTpl(field) : null,\n utc: true\n }\n break;\n case 'input-time-range':\n convertData = {\n type: 'input-time-range',\n inputFormat: 'HH:mm',\n timeFormat:'1970-01-01THH:mm:00.000[Z]',\n format:'1970-01-01THH:mm:00.000[Z]',\n tpl: readonly ? Tpl.getDateTimeTpl(field) : null,\n // utc: true\n }\n break;\n case 'time':\n convertData = {\n type: getAmisStaticFieldType('time', readonly),\n inputFormat: 'HH:mm',\n timeFormat:'1970-01-01THH:mm:00.000[Z]',\n format:'1970-01-01THH:mm:00.000[Z]',\n tpl: readonly ? Tpl.getDateTimeTpl(field) : null,\n // utc: true\n }\n break;\n case 'number':\n convertData = {\n type: getAmisStaticFieldType('number', readonly),\n min: field.min,\n max: field.max,\n precision: field.scale\n }\n break;\n case 'currency':\n //TODO\n convertData = {\n type: getAmisStaticFieldType('number', readonly),\n min: field.min,\n max: field.max,\n precision: field.scale\n }\n break;\n case 'input-array':\n convertData = Object.assign({}, field, baseData);\n break;\n case 'input-range':\n convertData = {\n type: 'input-range',\n min: field.min,\n max: field.max,\n value: [0, 0],\n multiple: true,\n showInput: true\n }\n break;\n case 'percent':\n //TODO\n convertData = {\n type: getAmisStaticFieldType('number', readonly),\n min: field.min,\n max: field.max,\n precision: field.scale\n }\n break;\n case 'password':\n convertData = {\n type: getAmisStaticFieldType('password', readonly),\n tpl: readonly ? Tpl.getPasswordTpl(field) : null\n }\n break;\n case 'lookup':\n convertData = await lookupToAmis(field, readonly, ctx) //TODO\n break;\n case 'master_detail':\n convertData = await lookupToAmis(field, readonly, ctx) //TODO\n break;\n case 'autonumber':\n //TODO\n break;\n case 'url':\n convertData = {\n type: getAmisStaticFieldType('url', readonly)\n }\n break;\n case 'email':\n convertData = {\n type: getAmisStaticFieldType('email', readonly)\n }\n break;\n case 'image':\n rootUrl = absoluteUrl('/api/files/images/');\n convertData = {\n type: getAmisStaticFieldType('image', readonly),\n receiver: {\n method: \"post\",\n url: \"${context.rootUrl}/s3/images\",\n adaptor: `\nvar rootUrl = ${JSON.stringify(rootUrl)};\npayload = {\n status: response.status == 200 ? 0 : response.status,\n msg: response.statusText,\n data: {\n value: payload._id,\n filename: payload.original.name,\n url: rootUrl + payload._id,\n }\n}\nreturn payload;\n `,\n headers: {\n Authorization: \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n }\n if(field.multiple){\n convertData.multiple = true;\n convertData.joinValues = false;\n convertData.extractValue = true;\n }\n break;\n case 'file':\n rootUrl = absoluteUrl('/api/files/files/');\n convertData = {\n type: getAmisStaticFieldType('file', readonly),\n receiver: {\n method: \"post\",\n url: \"${context.rootUrl}/s3/files\",\n adaptor: `\nvar rootUrl = ${JSON.stringify(rootUrl)};\npayload = {\n status: response.status == 200 ? 0 : response.status,\n msg: response.statusText,\n data: {\n value: payload._id,\n name: payload.original.name,\n url: rootUrl + payload._id,\n }\n}\nreturn payload;\n `,\n headers: {\n Authorization: \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n }\n if(field.multiple){\n convertData.multiple = true;\n convertData.joinValues = false;\n convertData.extractValue = true;\n }\n break;\n case 'formula':\n //TODO\n break;\n case 'summary':\n //TODO\n break;\n case 'code':\n convertData = {\n type: \"editor\",\n language: field.language,\n value: field.defaultValue || ''\n }\n break;\n case 'toggle':\n convertData = {\n type: \"switch\"\n }\n break;\n case 'grid':\n convertData = {\n type: 'input-table',\n strictMode:false,\n affixHeader: false, // 是否固定表头, 不固定表头, 否则form有y轴滚动条时, 表头会跟随滚动条滚动.\n // needConfirm: true, 此属性设置为false后,导致table不能编辑。\n editable: !readonly,\n addable: !readonly,\n removable: !readonly,\n draggable: !readonly,\n columns: []\n }\n _.each(field.subFields, function(subField){\n const subFieldName = subField.name.replace(`${field.name}.$.`, '').replace(`${field.name}.`, '');\n const gridSub = convertSFieldToAmisField(Object.assign({}, subField, {name: subFieldName}), readonly);\n if(gridSub){\n delete gridSub.name\n delete gridSub.label\n convertData.columns.push({\n name: subFieldName,\n label: subField.label,\n quickEdit: readonly ? false : gridSub\n })\n }\n })\n break;\n default:\n // console.log('convertData default', field.type);\n // convertData.type = field.type\n break;\n }\n if(!_.isEmpty(convertData)){\n if(field.is_wide){\n convertData.className = 'col-span-2 m-1';\n }else{\n convertData.className = 'm-1';\n }\n if(readonly){\n convertData.className = `${convertData.className} slds-form-element_readonly`\n }\n convertData.labelClassName = 'text-left';\n if(readonly){\n convertData.quickEdit = false;\n }\n\n if(field.visible_on){\n convertData.visibleOn = `\\$${field.visible_on.substring(1, field.visible_on.length -1).replace(/formData./g, '')}`;\n }\n\n return Object.assign({}, baseData, convertData);\n }\n \n}\n\nexport async function getFieldSearchable(perField, permissionFields, ctx){\n let field = perField;\n if(field.type === 'grid'){\n field = await Fields.getGridFieldSubFields(perField, permissionFields);\n }else if(perField.type === 'object'){\n field = await Fields.getObjectFieldSubFields(perField, permissionFields);\n }\n\n \n let fieldNamePrefix = '__searchable__';\n if(field.name.indexOf(\".\") < 0){\n let _field = cloneDeep(field)\n if(includes(['textarea', 'html', 'code', 'autonumber'], field.type)){\n _field.type = 'text'\n }\n\n if(field.type === 'number' || field.type === 'currency'){\n _field.type = 'input-array';\n _field.inline = true;\n _field.addable = false;\n _field.removable = false;\n _field.value = [null,null];\n _field.items = {\n type: \"input-number\"\n }\n _field.is_wide = true;\n fieldNamePrefix = `${fieldNamePrefix}between__`\n }\n\n if(field.type ==='date'){\n _field.type = 'input-date-range';\n _field.is_wide = true;\n fieldNamePrefix = `${fieldNamePrefix}between__`\n }\n if(field.type === 'datetime'){\n _field.type = 'input-datetime-range'\n _field.is_wide = true;\n fieldNamePrefix = `${fieldNamePrefix}between__`\n }\n if(field.type === 'time'){\n _field.type = 'input-time-range'\n _field.is_wide = true;\n fieldNamePrefix = `${fieldNamePrefix}between__`\n }\n if(field.reference_to === 'users'){\n _field.reference_to = 'space_users';\n _field.reference_to_field = 'user';\n }\n _field.readonly = false;\n _field.disabled = false;\n _field.multiple = true;\n _field.is_wide = false;\n _field.defaultValue = undefined;\n const amisField = await Fields.convertSFieldToAmisField(_field, false, Object.assign({}, ctx, {fieldNamePrefix: fieldNamePrefix, required: false, showSystemFields: true}));\n if(amisField){\n return amisField;\n }\n }\n}","import { OMIT_FIELDS } from './fields';\nimport { absoluteUrl } from '../../steedos.client'\nimport * as graphql from './graphql'\nimport * as _ from 'lodash';\n\nconst API_CACHE = 100;\n\nfunction getReadonlyFormAdaptor(fields){\n let scriptStr = '';\n const selectFields = _.filter(fields, function(field){return field.name.indexOf('.') < 0 && ((field.type == 'select' && field.options) || ((field.type == 'lookup' || field.type == 'master_detail') && !field.reference_to))});\n _.each(selectFields, function(field){\n if(!_.includes(OMIT_FIELDS, field.name)){\n const valueField = field.name;\n if(field.options){\n const options = JSON.stringify({options: field.options});\n scriptStr = scriptStr + `var ${field.name}Options= (${options}).options;`;\n }else if(field.optionsFunction){\n scriptStr = scriptStr + `var ${field.name}Options = eval(${field.optionsFunction.toString()})(api.data);`\n }\n if(field.multiple){\n scriptStr = scriptStr + `data.${field.name}__label = _.map(_.filter(${field.name}Options, function(option){return _.includes(data.${field.name}, option.value)}), 'label');`\n }else{\n scriptStr = scriptStr + `var ${field.name}Selected = _.find(${field.name}Options, function(option){return data.${field.name} == option.value});`\n scriptStr = scriptStr + `data.${field.name}__label = ${field.name}Selected ? ${field.name}Selected.label:null;`\n }\n }\n })\n\n // const refFields = _.filter(fields, function(field){return field.name.indexOf('.') < 0 && (field.type == 'lookup' || field.type == 'master_detail') && !field.reference_to});\n // _.each(refFields, function(field){\n // if(!_.includes(OMIT_FIELDS, field.name)){\n // const valueField = field.reference_to_field || '_id';\n // scriptStr = scriptStr + `var ${field.name}Options = eval(${field.optionsFunction.toString()})(api.data);`\n // if(field.multiple){\n // scriptStr = scriptStr + `data.${field.name}__label = _.map(_.filter(${field.name}Options, function(option){return _.includes(data.${field.name}, option.value)}), 'label');`\n // }else{\n // scriptStr = scriptStr + `var ${field.name}Selected = _.find(${field.name}Options, function(option){return data.${field.name} == option.value});`\n // scriptStr = scriptStr + `data.${field.name}__label = ${field.name}Selected ? ${field.name}Selected.label:null;`\n // }\n // }\n // })\n\n return `\n if(payload.data.data){\n var data = payload.data.data[0];\n ${scriptStr}\n payload.data = data;\n window.postMessage(Object.assign({type: \"record.loaded\"}, {record: data}), \"*\")\n }\n return payload;\n`\n}\n\nexport async function getReadonlyFormInitApi(object, recordId, fields){\n return {\n method: \"post\",\n url: graphql.getApi()+\"?rf=\"+ (new Date()).getTime(),\n cache: API_CACHE,\n adaptor: getReadonlyFormAdaptor(fields),\n data: await graphql.getFindOneQuery(object, recordId, fields),\n headers: {\n Authorization: \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n}\n\nfunction getConvertDataScriptStr(fields){\n const refFields = _.filter(fields, function(field){return field.name.indexOf('.') < 0 && (field.type == 'lookup' || field.type == 'master_detail') && field.reference_to});\n let scriptStr = '';\n _.each(refFields, function(field){\n if(!_.includes(OMIT_FIELDS, field.name)){\n const valueField = field.reference_to_field || '_id';\n if(field.multiple){\n scriptStr = scriptStr + `data.${field.name} = _.map(data.${field.name}, '${valueField}');`\n }else{\n scriptStr = scriptStr + `data.${field.name} = data.${field.name} ? data.${field.name}.${valueField}:null;`\n }\n }\n })\n return scriptStr;\n}\n\n/*\n img字段值添加URL前缀使其在amis中正常显示图片。\n*/\nfunction getScriptForAddUrlPrefixForImgFields(fields){\n let imgFieldsKeys = [];\n let imgFields = {};\n let rootUrl = absoluteUrl('/api/files/images/');\n fields.forEach((item)=>{\n if(item.type === 'image'){\n imgFieldsKeys.push(item.name);\n imgFields[item.name] = {\n name: item.name,\n multiple: item.multiple\n };\n }\n })\n if(!imgFieldsKeys.length){\n return '';\n }\n return `\n // image字段值添加URL前缀\n let imgFieldsKeys = ${JSON.stringify(imgFieldsKeys)};\n let imgFields = ${JSON.stringify(imgFields)};\n let rootUrl = ${JSON.stringify(rootUrl)};\n imgFieldsKeys.forEach((item)=>{\n let imgFieldValue = data[item];\n if(imgFieldValue && imgFieldValue.length){\n if(imgFields[item].multiple){\n if(imgFieldValue instanceof Array){\n data[item] = imgFieldValue.map((value)=>{ return rootUrl + value});\n }\n }else{\n data[item] = rootUrl + imgFieldValue;\n }\n }\n })\n `\n}\n\n/*\n file字段值重写使其在amis中正常显示附件名、点击附件名下载文件。\n*/\nfunction getScriptForRewriteValueForFileFields(fields){\n let fileFieldsKeys = [];\n let fileFields = {};\n let fileRootUrl = absoluteUrl('/api/files/files/');\n fields.forEach((item)=>{\n if(item.type === 'file'){\n fileFieldsKeys.push(item.name);\n fileFields[item.name] = {\n name: item.name,\n multiple: item.multiple\n };\n }\n })\n if(!fileFieldsKeys.length){\n return '';\n }\n return `\n // file字段值重写以便编辑时正常显示附件名、点击附件名正常下载附件\n let fileFieldsKeys = ${JSON.stringify(fileFieldsKeys)};\n let fileFields = ${JSON.stringify(fileFields)};\n let fileRootUrl = ${JSON.stringify(fileRootUrl)};\n fileFieldsKeys.forEach((item)=>{\n let fileFieldValue = data[item];\n if(fileFieldValue && fileFieldValue.length){\n const fileFieldNames = data._display[item].split(',');\n if(fileFields[item].multiple){\n if(fileFieldValue instanceof Array){\n data[item] = fileFieldValue.map((value, index)=>{ \n return {\n value: value,\n name: fileFieldNames[index],\n url: fileRootUrl + value + \"?download=true\",\n state: \"uploaded\"\n }\n });\n }\n }else{\n data[item] = {\n value: fileFieldValue,\n name: fileFieldNames[0],\n url: fileRootUrl + fileFieldValue + \"?download=true\",\n state: \"uploaded\"\n };\n }\n }\n })\n `\n}\n\nexport async function getEditFormInitApi(object, recordId, fields){\n return {\n method: \"post\",\n url: graphql.getApi(),\n sendOn: \"!!this.recordId\",\n cache: API_CACHE,\n adaptor: `\n if(payload.data.data){\n var data = payload.data.data[0];\n if(data){\n ${getConvertDataScriptStr(fields)}\n ${getScriptForAddUrlPrefixForImgFields(fields)}\n ${getScriptForRewriteValueForFileFields(fields)}\n //初始化接口返回的字段移除字段值为null的字段\n for (key in data){\n if(data[key] === null){\n delete data[key];\n }\n }\n };\n payload.data = data;\n delete payload.extensions;\n }\n return payload;\n `,\n data: await graphql.getFindOneQuery(object, recordId, fields),\n headers: {\n Authorization: \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n}\n\n\nexport function getSaveApi(object, recordId, fields, options){\n return {\n method: 'post',\n url: graphql.getApi(),\n data: graphql.getSaveQuery(object, recordId, fields, options),\n requestAdaptor: graphql.getSaveRequestAdaptor(fields),\n responseData: {\n \"recordId\": \"${record._id}\"\n },\n adaptor: `\n return payload;\n `,\n headers: {\n Authorization: \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n}\n\nexport function getBatchDelete(objectName){\n return {\n method: 'post',\n url: graphql.getApi(),\n requestAdaptor: `\n var ids = api.data.ids.split(\",\");\n var deleteArray = [];\n ids.forEach((id,index)=>{\n deleteArray.push(\\`delete__\\${index}:${objectName}__delete(id: \"\\${id}\")\\`);\n })\n api.data = {query: \\`mutation{\\${deleteArray.join(',')}}\\`};\n return api;\n `,\n data: {\n ids: `\\${ids}`\n },\n headers: {\n Authorization: \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n}","/*\n * @Author: baozhoutao@steedos.com\n * @Date: 2022-05-26 16:02:08\n * @LastEditors: baozhoutao@steedos.com\n * @LastEditTime: 2022-09-01 11:25:18\n * @Description: \n */\nimport * as Fields from '../fields';\nimport * as lodash from 'lodash';\n\nconst getFieldSchemaArray = (mergedSchema)=>{\n let fieldSchemaArray = [];\n fieldSchemaArray.length = 0\n\n const fieldsArr = [];\n lodash.forEach(mergedSchema.fields, (field, fieldName)=>{\n if(!lodash.has(field, \"name\")){\n field.name = fieldName\n }\n fieldsArr.push(field)\n })\n\n lodash.forEach(lodash.sortBy(mergedSchema.fields, \"sort_no\"), (field) => {\n if (!field.group || field.group == 'null' || field.group == '-')\n field.group = '通用'\n const fieldName = field.name;\n let isObjectField = /\\w+\\.\\w+/.test(fieldName)\n if (field.type == 'grid' || field.type == 'object') {\n // field.group = field.label\n field.is_wide = true;\n }\n \n if (!isObjectField){\n if(!field.hidden){\n fieldSchemaArray.push(Object.assign({name: fieldName}, field, {permission: {allowEdit: true}}))\n }\n }\n })\n return fieldSchemaArray;\n}\n\nconst getSection = async (permissionFields, fieldSchemaArray, sectionName, ctx) => {\n const sectionFields = lodash.filter(fieldSchemaArray, { 'group': sectionName });\n if(sectionFields.length == lodash.filter(sectionFields, ['hidden', true]).length){\n return ;\n }\n\n const fieldSetBody = [];\n\n for (const perField of sectionFields) {\n let field = perField;\n if(perField.type === 'grid'){\n field = await Fields.getGridFieldSubFields(perField, permissionFields);\n }else if(perField.type === 'object'){\n field = await Fields.getObjectFieldSubFields(perField, permissionFields);\n }\n if(field.name.indexOf(\".\") < 0){\n const amisField = await Fields.convertSFieldToAmisField(field, field.readonly, ctx);\n if(amisField){\n fieldSetBody.push(amisField)\n }\n }\n }\n\n // fieldSet 暂不支持显隐控制\n // const sectionFieldsVisibleOn = lodash.map(lodash.compact(lodash.map(fieldSetBody, 'visibleOn')) , (visibleOn)=>{\n // return `(${visibleOn.substring(2, visibleOn.length -1)})`;\n // });\n\n const section = {\n \"type\": \"fieldSet\",\n \"title\": sectionName,\n \"collapsable\": true,\n \"body\": fieldSetBody,\n }\n // if(sectionFieldsVisibleOn.length > 0){\n // section.visibleOn = `\\${${sectionFieldsVisibleOn.join(\" || \")}}`\n // }\n return section\n}\n\nexport const getSections = async (permissionFields, mergedSchema, ctx) => {\n const fieldSchemaArray = getFieldSchemaArray(mergedSchema)\n const _sections = lodash.groupBy(fieldSchemaArray, 'group');\n const sections = [];\n for (const key in _sections) {\n const section = await getSection(permissionFields, fieldSchemaArray, key, ctx);\n if(section.body.length > 0){\n sections.push(section)\n }\n }\n return sections;\n}","/*\n * @Author: baozhoutao@steedos.com\n * @Date: 2022-07-07 11:02:29\n * @LastEditors: baozhoutao@steedos.com\n * @LastEditTime: 2022-09-01 11:46:15\n * @Description: \n */\nimport { getSections } from './fields/sections';\n\nexport async function getFormBody(permissionFields, objectConfig, ctx){\n return await getSections(permissionFields, objectConfig, ctx);\n}","import { getAuthToken , getTenantId, getRootUrl, getSteedosAuth } from '../../steedos.client.js';\nimport { getReadonlyFormInitApi, getSaveApi, getEditFormInitApi, getBatchDelete } from './api';\nimport { getTableSchema, getTableApi } from './fields/table';\nimport { getFormBody } from './form';\nimport { getListSchema, getCardSchema } from './fields/list';\nimport _, { map } from 'lodash';\n\nfunction getBulkActions(objectSchema){\n return [\n {\n \"type\": \"button\",\n \"level\": \"danger\",\n \"label\": \"批量删除\",\n \"actionType\": \"ajax\",\n \"confirmText\": \"确定要删除吗\",\n \"id\": \"batchDelete\",\n \"api\": getBatchDelete(objectSchema.name),\n }\n // {\n // \"label\": \"批量修改\",\n // \"actionType\": \"dialog\",\n // \"dialog\": {\n // \"title\": \"批量编辑\",\n // \"name\": \"sample-bulk-edit\",\n // \"body\": {\n // \"type\": \"form\",\n // \"api\": \"https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/sample/bulkUpdate2\",\n // \"controls\": [\n // {\n // \"type\": \"hidden\",\n // \"name\": \"ids\"\n // },\n // {\n // \"type\": \"text\",\n // \"name\": \"name\",\n // \"label\": \"Name\"\n // }\n // ]\n // }\n // }\n // }\n ]\n}\n\nfunction getHeaderToolbar(mainObject, formFactor){\n\n if(formFactor === 'SMALL'){\n return [\n \"bulkActions\",\n {\n \"type\": \"reload\",\n \"align\": \"right\"\n },\n {\n \"type\": \"search-box\",\n \"align\": \"right\",\n \"name\": \"__keywords\",\n \"placeholder\": \"请输入关键字\",\n \"mini\": true\n }\n ]\n }else{\n return [\n \"filter-toggler\",\n \"bulkActions\",\n // {\n // \"type\": \"export-excel\",\n // \"align\": \"right\"\n // },\n // {\n // \"type\": \"reload\",\n // \"align\": \"right\"\n // },\n // {\n // \"type\": \"columns-toggler\",\n // \"align\": \"right\"\n // },\n {\n \"type\": \"search-box\",\n \"align\": \"right\",\n \"name\": \"__keywords\",\n \"placeholder\": \"请输入关键字\",\n \"mini\": true\n },\n // {\n // \"type\": \"drag-toggler\",\n // \"align\": \"right\"\n // },\n // {\n // \"type\": \"pagination\",\n // \"align\": \"right\"\n // }\n ]\n }\n\n\n \n}\n\nfunction getToolbar(){\n return [\n \n ]\n}\n\nfunction footerToolbar(){\n return [\n \"statistics\",\n // \"switch-per-page\",\n \"pagination\"\n ]\n}\n\nfunction getFilter(){\n return {\n \"title\": \"条件搜索\",\n \"submitText\": \"\",\n \"body\": [\n {\n \"type\": \"input-text\",\n \"name\": \"name\",\n \"placeholder\": \"合同名称\",\n \"addOn\": {\n \"label\": \"搜索\",\n \"type\": \"submit\"\n }\n }\n ]\n }\n}\n\nexport async function getObjectList(objectSchema, fields, options){\n \n const bulkActions = getBulkActions(objectSchema)\n\n const bodyProps = {\n toolbar: getToolbar(), \n footerToolbar: footerToolbar(), \n headerToolbar: getHeaderToolbar(objectSchema, options.formFactor),\n bulkActions: bulkActions, \n bodyClassName: \"\",\n // filterTogglable: true,\n // filterDefaultVisible: true,\n // filter: getFilter()\n }\n\n let body = null;\n const id = `listview_${objectSchema.name}`;\n if(options.formFactor === 'SMALL'){\n delete bodyProps.bulkActions;\n delete bodyProps.headerToolbar;\n delete bodyProps.footerToolbar;\n body = Object.assign({}, getCardSchema(fields, Object.assign({idFieldName: objectSchema.idFieldName, labelFieldName: objectSchema.NAME_FIELD_KEY || 'name'}, options, {actions: false})), {\n type: 'crud', \n primaryField: '_id', \n id: id,\n name: id,\n keepItemSelectionOnPageChange: false, \n api: await getTableApi(objectSchema, fields, options)}, \n bodyProps\n );\n }else{\n const table = getTableSchema(fields, Object.assign({idFieldName: objectSchema.idFieldName, labelFieldName: objectSchema.NAME_FIELD_KEY || 'name'}, options));\n delete table.mode;\n body = Object.assign({}, table, {\n type: 'crud', \n primaryField: '_id', \n id: id,\n name: id,\n keepItemSelectionOnPageChange: true, \n api: await getTableApi(objectSchema, fields, options)}, \n bodyProps\n )\n }\n\n return {\n type: 'service',\n bodyClassName: '',\n name: `page`,\n data: {context: {rootUrl: getRootUrl(), tenantId: getTenantId(), authToken: getAuthToken()}},\n body: body\n }\n}\n\nconst getGlobalData = (mode)=>{\n const user = getSteedosAuth();\n return {mode: mode, user: user, spaceId: user.spaceId, userId: user.userId}\n}\n\nexport async function getObjectForm(objectSchema, ctx){\n const { recordId, tabId, appId } = ctx;\n const fields = _.values(objectSchema.fields);\n return {\n type: 'page',\n bodyClassName: 'p-0',\n regions: [\n \"body\"\n ],\n name: `page_edit_${recordId}`,\n data: {global: getGlobalData('edit'), recordId: recordId, objectName: objectSchema.name, context: {rootUrl: getRootUrl(), tenantId: getTenantId(), authToken: getAuthToken()}},\n initApi: null,\n initFetch: null ,\n body: [\n {\n type: \"form\",\n mode: ctx.formFactor === 'SMALL' ? 'normal' : 'horizontal',\n persistData: false,\n promptPageLeave: true,\n name: `form_edit_${recordId}`,\n debug: false,\n title: \"\",\n submitText: \"\", // amis 表单不显示提交按钮, 表单提交由项目代码接管\n api: await getSaveApi(objectSchema, recordId, fields, {}),\n initApi: await getEditFormInitApi(objectSchema, recordId, fields),\n initFetch: recordId != 'new',\n body: await getFormBody(fields, objectSchema, ctx),\n panelClassName:'m-0 sm:rounded-lg shadow-none',\n bodyClassName: 'p-0',\n className: 'p-4 sm:p-0 steedos-amis-form',\n }\n ]\n }\n}\n\nexport async function getObjectDetail(objectSchema, recordId, ctx){\n const fields = _.values(objectSchema.fields);\n return {\n type: 'service',\n name: `page_readonly_${recordId}`,\n id: `detail_${recordId}`,\n data: {global: getGlobalData('read'), context: {rootUrl: getRootUrl(), tenantId: getTenantId(), authToken: getAuthToken()}},\n api: await getReadonlyFormInitApi(objectSchema, recordId, fields),\n body: [\n {\n type: \"form\",\n mode: ctx.formFactor === 'SMALL' ? 'normal' : 'horizontal',\n persistData: false,\n promptPageLeave: false,\n name: `form_readonly_${recordId}`,\n debug: false,\n title: \"\",\n data: {\n \"formData\": \"$$\"\n },\n wrapWithPanel: false, \n body: await getFormBody(map(fields, (field)=>{field.readonly = true;}), objectSchema, ctx),\n className: 'steedos-amis-form',\n actions: [] // 不显示表单默认的提交按钮\n }\n ]\n }\n}","/*\n * @Author: baozhoutao@steedos.com\n * @Date: 2022-09-01 09:00:26\n * @LastEditors: baozhoutao@steedos.com\n * @LastEditTime: 2022-09-03 13:21:38\n * @Description: \n */\nimport { fetchAPI, getSteedosAuth } from \"./steedos.client\"\nimport { each } from \"lodash\";\n\nconst getGraphqlFieldsQuery = (fields)=>{\n const fieldsName = ['_id'];\n fields.push('record_permissions');\n //TODO 此处需要考虑相关对象查询\n each(fields, (fieldName)=>{\n if(fieldName.indexOf('.') > -1){\n fieldName = fieldName.split('.')[0]\n }\n fieldsName.push(`${fieldName}`)\n })\n return `${fieldsName.join(' ')}`;\n}\n\nconst getFindOneQuery = (objectName, id, fields)=>{\n objectName = objectName.replace(/\\./g, '_');\n const queryFields = getGraphqlFieldsQuery(fields);\n let queryOptions = ''\n let alias = \"record\";\n \n const queryOptionsArray = [`id: \"${id}\"`];\n \n if(queryOptionsArray.length > 0){\n queryOptions = `(${queryOptionsArray.join(',')})`\n }\n\n return `{${alias}:${objectName}__findOne${queryOptions}{${queryFields}}}`\n}\n\nexport const getRecord = async (objectName, recordId, fields)=>{\n const result = await fetchAPI('/graphql', {\n method: 'post',\n body: JSON.stringify({\n query: getFindOneQuery(objectName, recordId, fields)\n })\n })\n return result.data.record;\n}\n\nexport const getRelatedsCount = async (masterRecordId, relateds) => {\n const relatedQuery = [];\n\n each(relateds, (relate)=>{\n relatedQuery.push(`${relate.object_name}: ${relate.object_name}__count(filters: [[\"${relate.foreign_key}\",\"=\",\"${masterRecordId}\"]])`);\n })\n\n const query = `\n {\n ${relatedQuery.join(',')}\n }\n `;\n const result = await fetchAPI('/graphql', {\n method: 'POST',\n body: JSON.stringify({ query })\n })\n\n return result.data\n}\n\nexport const getRecordPermissions = async (objectName, recordId)=>{\n const result = await fetchAPI(`/service/api/@${objectName}/recordPermissions/${recordId}`, {\n method: 'GET'\n })\n return result;\n}","/*\n * @Author: baozhoutao@steedos.com\n * @Date: 2022-07-05 15:55:39\n * @LastEditors: baozhoutao@steedos.com\n * @LastEditTime: 2022-09-03 10:46:31\n * @Description:\n */\nimport { fetchAPI } from \"./steedos.client\";\nimport {\n getObjectList,\n getObjectDetail,\n getObjectForm,\n} from \"./converter/amis/index\";\nimport _ , { slice, isEmpty, each, has } from \"lodash\";\nimport { getFieldSearchable } from \"./converter/amis/fields/index\";\nimport { getRecord } from './record';\n\nconst UI_SCHEMA_CACHE = {};\n\nconst setUISchemaCache = (key, value) => {\n UI_SCHEMA_CACHE[key] = value;\n};\n\nconst getUISchemaCache = (key) => {\n return _.cloneDeep(UI_SCHEMA_CACHE[key]);\n};\n\nconst hasUISchemaCache = (key) => {\n return _.has(UI_SCHEMA_CACHE, key);\n};\n\nconst getListViewColumns = (listView, formFactor) => {\n let listViewColumns = [];\n if (formFactor === \"SMALL\") {\n listViewColumns = !isEmpty(listView.mobile_columns)\n ? listView.mobile_columns\n : slice(listView.columns, 0, 4);\n } else {\n listViewColumns = listView.columns;\n }\n return listViewColumns;\n};\n\nexport async function getUISchema(objectName, force) {\n if (!objectName) {\n return;\n }\n if (hasUISchemaCache(objectName) && !force) {\n return getUISchemaCache(objectName);\n }\n const url = `/service/api/@${objectName.replace(/\\./g, \"_\")}/uiSchema`;\n let uiSchema = null;\n try {\n uiSchema = await fetchAPI(url, { method: \"get\" });\n setUISchemaCache(objectName, uiSchema);\n for (const fieldName in uiSchema.fields) {\n if (uiSchema.fields) {\n const field = uiSchema.fields[fieldName];\n\n if (\n (field.type === \"lookup\" || field.type === \"master_detail\") &&\n field.reference_to\n ) {\n const refUiSchema = await getUISchema(field.reference_to);\n if (!refUiSchema) {\n delete uiSchema.fields[fieldName];\n }\n }\n }\n }\n each(uiSchema.list_views, (v, k)=>{\n v.name = k;\n if(!has(v, 'columns')){\n v.columns = uiSchema.list_views.all.columns;\n }\n })\n } catch (error) {\n console.error(`getUISchema`, objectName, error);\n setUISchemaCache(objectName, null);\n }\n return getUISchemaCache(objectName);\n}\n\nexport async function getField(objectName, fieldName) {\n const uiSchema = await getUISchema(objectName);\n return uiSchema?.fields[fieldName];\n}\n\n// 获取表单页面\nexport async function getFormSchema(objectName, ctx) {\n const uiSchema = await getUISchema(objectName);\n const amisSchema = await getObjectForm(uiSchema, ctx);\n return {\n uiSchema,\n amisSchema,\n };\n}\n\n// 获取只读页面\nexport async function getViewSchema(objectName, recordId, ctx) {\n const uiSchema = await getUISchema(objectName);\n const amisSchema = await getObjectDetail(uiSchema, recordId, ctx);\n return {\n uiSchema,\n amisSchema,\n };\n}\n\n// 获取列表视图\nexport async function getListSchema(\n appName,\n objectName,\n listViewName,\n options = {}\n) {\n const uiSchema = await getUISchema(objectName);\n const listView = _.find(\n uiSchema.list_views,\n (listView, name) => name === listViewName\n );\n\n if (!listView) {\n return { uiSchema };\n }\n let fields = uiSchema.fields;\n const listViewFields = [];\n\n let listViewColumns = getListViewColumns(listView, options.formFactor);\n\n if (listView && listViewColumns) {\n _.each(listViewColumns, function (column) {\n if (_.isString(column) && uiSchema.fields[column]) {\n listViewFields.push(uiSchema.fields[column]);\n } else if (_.isObject(column) && uiSchema.fields[column.field]) {\n listViewFields.push(\n Object.assign({}, uiSchema.fields[column.field], {\n width: column.width,\n wrap: column.wrap,\n })\n );\n }\n });\n }\n\n if (listView && listView.extra_columns) {\n _.each(listView.extra_columns, function (column) {\n if (_.isString(column)) {\n listViewFields.push({ extra: true, name: column });\n } else if (_.isObject(column)) {\n listViewFields.push({ extra: true, name: column.field });\n }\n });\n }\n\n fields = listViewFields;\n const amisSchema = await getObjectList(uiSchema, fields, {\n tabId: objectName,\n appId: appName,\n objectName: objectName,\n ...options,\n filter: listView.filters,\n });\n\n return {\n uiSchema,\n amisSchema,\n };\n}\n\n// 获取所有相关表\nexport async function getObjectRelateds(\n appName,\n objectName,\n recordId,\n formFactor\n) {\n const uiSchema = await getUISchema(objectName);\n\n const related = [];\n\n const details = [].concat(uiSchema.details || []);\n\n if (uiSchema.enable_files) {\n details.push(`cms_files.parent`);\n }\n\n for (const detail of details) {\n const arr = detail.split(\".\");\n\n let filter = null;\n const refField = await getField(arr[0], arr[1]);\n if (\n refField._reference_to ||\n (refField.reference_to && !_.isString(refField.reference_to))\n ) {\n filter = [\n [`${arr[1]}/o`, \"=\", objectName],\n [`${arr[1]}/ids`, \"=\", recordId],\n ];\n } else {\n filter = [`${arr[1]}`, \"=\", recordId];\n }\n\n related.push({\n masterObjectName: objectName,\n object_name: arr[0],\n foreign_key: arr[1],\n schema: await getListSchema(appName, arr[0], \"all\", {\n globalFilter: filter,\n formFactor: formFactor,\n }),\n });\n }\n return related;\n}\n\n// 获取单个相关表\nexport async function getObjectRelated(\n appName,\n masterObjectName,\n objectName,\n relatedFieldName,\n recordId,\n formFactor\n) {\n let filter = null;\n const refField = await getField(objectName, relatedFieldName);\n if (\n refField._reference_to ||\n (refField.reference_to && !_.isString(refField.reference_to))\n ) {\n filter = [\n [`${relatedFieldName}/o`, \"=\", masterObjectName],\n [`${relatedFieldName}/ids`, \"=\", recordId],\n ];\n } else {\n filter = [`${relatedFieldName}`, \"=\", recordId];\n }\n const masterObjectUISchema = await getUISchema(masterObjectName, formFactor);\n return {\n masterObjectName: masterObjectName,\n object_name: objectName,\n foreign_key: relatedFieldName,\n schema: await getListSchema(appName, objectName, \"all\", {\n globalFilter: filter,\n formFactor: formFactor,\n }),\n record: await getRecord(masterObjectName, recordId, [\n masterObjectUISchema.NAME_FIELD_KEY,\n ]),\n masterObjectUISchema: masterObjectUISchema,\n };\n}\n\nexport async function getSearchableFieldsFilterSchema(fields) {\n const body = [];\n for (let field of fields) {\n if (\n !_.includes(\n [\n \"grid\",\n \"avatar\",\n \"image\",\n \"object\",\n \"[object]\",\n \"[Object]\",\n \"[grid]\",\n \"[text]\",\n \"audio\",\n \"file\",\n ],\n field.type\n )\n ) {\n delete field.defaultValue\n delete field.required\n delete field.is_wide\n delete field.readonly\n delete field.hidden\n delete field.omit\n const amisField = await getFieldSearchable(field, fields, {});\n if (amisField) {\n amisField.className = \"min-w-[200px] pr-4 max-w-[350px] grow\";\n body.push(amisField);\n }\n }\n }\n return {\n title: \"\",\n type: \"form\",\n name: \"listview-filter-form\",\n mode: \"normal\",\n wrapWithPanel: false,\n className: \"flex flex-row w-full flex-wrap mb-3\",\n body: body,\n };\n}\n","/*\n * @Author: baozhoutao@steedos.com\n * @Date: 2022-07-05 15:54:17\n * @LastEditors: baozhoutao@steedos.com\n * @LastEditTime: 2022-07-05 16:30:29\n * @Description: \n */\nimport { fetchAPI } from './steedos.client';\n\nexport async function getApps(){\n const APPS_API = '/service/api/apps/menus';\n const apps = await fetchAPI(APPS_API);\n return apps;\n}\n\nexport async function getApp(appName){\n const appApi = `/service/api/apps/${appName}/menus`;\n const app = await fetchAPI(appApi);\n return app;\n}","import * as _ from 'lodash'\n\nconst globalTag = '__G_L_O_B_A_L__';\n\nconst getParentPath = function (path) {\n var pathArr;\n if (typeof path === 'string') {\n pathArr = path.split('.');\n if (pathArr.length === 1) {\n return '#';\n }\n pathArr.pop();\n return pathArr.join('.');\n }\n return '#';\n}\n\nconst getValueByPath = function (formData, path) {\n if (path === '#' || !path) {\n return formData || {};\n } else if (typeof path === 'string') {\n return _.get(formData, path);\n } else {\n console.error('path has to be a string');\n }\n};\n\nexport const isExpression = function (func) {\n var pattern, reg1, reg2;\n if (typeof func !== 'string') {\n return false;\n }\n pattern = /^{{(.+)}}$/;\n reg1 = /^{{(function.+)}}$/;\n reg2 = /^{{(.+=>.+)}}$/;\n if (typeof func === 'string' && func.match(pattern) && !func.match(reg1) && !func.match(reg2)) {\n return true;\n }\n return false;\n};\n\nexport const parseSingleExpression = function (func, formData, dataPath, global, userSession = {}) {\n var error, funcBody, parent, parentPath, str;\n\n if (formData === void 0) {\n formData = {};\n }\n parentPath = getParentPath(dataPath);\n parent = getValueByPath(formData, parentPath) || {};\n if (typeof func === 'string') {\n funcBody = func.substring(2, func.length - 2);\n str = `\\n var $user=${JSON.stringify(userSession)}; return ` + funcBody.replace(/\\bformData\\b/g, JSON.stringify(formData).replace(/\\bglobal\\b/g, globalTag)).replace(/\\bglobal\\b/g, JSON.stringify(global)).replace(new RegExp('\\\\b' + globalTag + '\\\\b', 'g'), 'global').replace(/rootValue/g, JSON.stringify(parent));\n try {\n return Function(str)();\n } catch (_error) {\n error = _error;\n console.log(error, func, dataPath);\n return func;\n }\n } else {\n return func;\n }\n};","import _ from \"lodash\";\nimport { isExpression, parseSingleExpression } from \"./expression\";\nimport { getApi } from './converter/amis/graphql';\nimport config from \"../config\";\n\nconst getGlobalData = () => {\n return {\n now: new Date(),\n };\n};\n\nconst isVisible = (button, ctx) => {\n if (button._visible) {\n if (_.startsWith(_.trim(button._visible), \"function\")) {\n window.eval(\"var fun = \" + button._visible);\n button.visible = fun;\n } else if (isExpression(button._visible)) {\n button.visible = (props) => {\n parseSingleExpression(\n button._visible,\n props.record,\n \"#\",\n getGlobalData(),\n props.userSession\n );\n };\n }\n }\n if (_.isFunction(button.visible)) {\n try {\n return button.visible(ctx);\n } catch (error) {\n // console.error(`${button.name} visible error: ${error}`);\n }\n } else {\n return button.visible;\n }\n};\n\n// TODO\nexport const standardButtonsTodo = {\n standard_new: (event, props) => {\n const {\n appId,\n listViewId,\n uiSchema,\n formFactor,\n data,\n router,\n options = {},\n } = props;\n // router.push('/app/'+props.data.app_id+'/'+props.data.objectName+'/view/new');\n const type = config.listView.newRecordMode;\n SteedosUI?.Object.newRecord({\n onSubmitted: () => {\n SteedosUI.getRef(listViewId)\n .getComponentByName(`page.listview_${uiSchema.name}`)\n .handleAction({}, { actionType: \"reload\" });\n },\n onCancel: () => {\n SteedosUI.getRef(listViewId)\n .getComponentByName(`page.listview_${uiSchema.name}`)\n .handleAction({}, { actionType: \"reload\" });\n },\n appId: appId,\n formFactor: formFactor,\n name: SteedosUI.getRefId({ type: `${type}-form` }),\n title: `新建 ${uiSchema.label}`,\n objectName: uiSchema.name,\n data: data,\n recordId: \"new\",\n type,\n options: options,\n router,\n });\n },\n standard_edit: (event, props) => {\n const type = config.listView.newRecordMode;\n const {\n appId,\n recordId,\n uiSchema,\n formFactor,\n router,\n options = {},\n } = props;\n SteedosUI?.Object.editRecord({\n appId: appId,\n name: SteedosUI.getRefId({ type: `${type}-form` }),\n title: `编辑 ${uiSchema.label}`,\n objectName: uiSchema.name,\n recordId: recordId,\n type,\n options: options,\n router,\n formFactor: formFactor,\n onSubmitted: () => {\n SteedosUI.getRef(\n SteedosUI.getRefId({\n type: \"detail\",\n appId: appId,\n name: uiSchema.name,\n })\n )\n .getComponentById(`detail_${recordId}`)\n .reload();\n },\n });\n },\n standard_delete: (event, props) => { },\n standard_delete_many: (event, props)=>{\n const {\n listViewId,\n uiSchema,\n } = props;\n const listViewRef = SteedosUI?.getRef(listViewId).getComponentByName(`page.listview_${uiSchema.name}`)\n \n if(_.isEmpty(listViewRef.props.store.toJSON().selectedItems)){\n listViewRef.handleAction({}, {\n \"actionType\": \"toast\",\n \"toast\": {\n \"items\": [\n {\n \"position\": \"top-right\",\n \"body\": \"请选择要删除的项\"\n }\n ]\n }\n })\n }else{\n listViewRef.handleBulkAction(listViewRef.props.store.toJSON().selectedItems,[],{},listViewRef.props.bulkActions[0]);\n }\n }\n};\n\n// TODO\nconst standardButtonsVisible = {\n standard_newVisible: (props) => { },\n};\n\nexport const getButtons = (uiSchema, ctx) => {\n const disabledButtons = uiSchema.permissions.disabled_actions;\n let buttons = _.sortBy(_.values(uiSchema.actions), \"sort\");\n if (_.has(uiSchema, \"allow_customActions\")) {\n buttons = _.filter(buttons, (button) => {\n return _.include(uiSchema.allow_customActions, button.name); // || _.include(_.keys(Creator.getObject('base').actions) || {}, button.name)\n });\n }\n if (_.has(uiSchema, \"exclude_actions\")) {\n buttons = _.filter(buttons, (button) => {\n return !_.include(uiSchema.exclude_actions, button.name);\n });\n }\n\n _.each(buttons, (button) => {\n if (\n ctx.isMobile &&\n [\"record\", \"record_only\"].indexOf(button.on) > -1 &&\n button.name != \"standard_edit\"\n ) {\n if (button.on == \"record_only\") {\n button.on = \"record_only_more\";\n } else {\n button.on = \"record_more\";\n }\n }\n });\n\n if (\n ctx.isMobile &&\n [\"cms_files\", \"cfs.files.filerecord\"].indexOf(uiSchema.name) > -1\n ) {\n _.map(buttons, (button) => {\n if (button.name === \"standard_edit\") {\n button.on = \"record_more\";\n }\n if (button.name === \"download\") {\n button.on = \"record\";\n }\n });\n }\n\n return _.filter(buttons, (button) => {\n return _.indexOf(disabledButtons, button.name) < 0;\n });\n};\n\nexport const getListViewButtons = (uiSchema, ctx) => {\n const buttons = getButtons(uiSchema, ctx);\n const listButtons = _.filter(buttons, (button) => {\n if (button.on == \"list\") {\n return isVisible(button, ctx);\n }\n return false;\n });\n // 如果是standard_new 且 _visible 中调用了 Steedos 函数, 则自动添加标准的新建功能\n const standardNew = _.find(buttons, (btn)=>{ return btn.name == 'standard_new'})\n if( uiSchema.name != 'cms_files' && uiSchema.permissions.allowCreate && standardNew && standardNew._visible.indexOf('Steedos.StandardObjects.Base.Actions.standard_new.visible.apply') > 0){\n listButtons.push({\n label: standardNew.label,\n name: standardNew.name,\n on: standardNew.on,\n type: standardNew.type,\n todo: (event)=>{\n return standardButtonsTodo.standard_new.call({}, event, {\n listViewId: ctx.listViewId,\n appId: ctx.app_id,\n uiSchema: uiSchema,\n formFactor: ctx.formFactor,\n router: ctx.router,\n data: ctx.data,\n options: ctx.formFactor === 'SMALL' ? {\n props: {\n width: \"100%\",\n style: {\n width: \"100%\",\n },\n bodyStyle: { padding: \"0px\", paddingTop: \"0px\" },\n }\n } : null\n })\n }\n }); \n }\n return listButtons;\n};\n\nexport const getObjectDetailButtons = (uiSchema, ctx) => {\n const buttons = getButtons(uiSchema, ctx);\n const detailButtons = _.filter(buttons, (button) => {\n if (button.on == \"record\" || button.on == \"record_only\") {\n return isVisible(button, ctx);\n }\n return false;\n });\n // 如果是standard_edit 且 _visible 中调用了 Steedos 函数, 则自动添加标准的编辑功能\n const standardEdit = _.find(buttons, (btn)=>{ return btn.name == 'standard_edit'})\n if(ctx.permissions?.allowEdit && standardEdit && standardEdit._visible.indexOf('Steedos.StandardObjects.Base.Actions.standard_edit.visible.apply') > 0){\n detailButtons.push({\n label: standardEdit.label,\n name: standardEdit.name,\n on: standardEdit.on,\n type: standardEdit.type,\n todo: (event)=>{\n return standardButtonsTodo.standard_edit.call({}, event, {\n recordId: ctx.recordId,\n appId: ctx.app_id,\n uiSchema: uiSchema,\n formFactor: ctx.formFactor,\n router: ctx.router,\n options: ctx.formFactor === 'SMALL' ? {\n props: {\n width: \"100%\",\n style: {\n width: \"100%\",\n },\n bodyStyle: { padding: \"0px\", paddingTop: \"0px\" },\n }\n } : null\n })\n }\n })\n }\n\n return _.sortBy(detailButtons, \"sort\");\n};\n\nexport const getObjectDetailMoreButtons = (uiSchema, ctx) => {\n const buttons = getButtons(uiSchema, ctx);\n const moreButtons = _.filter(buttons, (button) => {\n if (button.on == \"record_more\" || button.on == \"record_only_more\") {\n return isVisible(button, ctx);\n }\n return false;\n });\n\n // 如果是standard_delete 且 _visible 中调用了 Steedos 函数, 则自动添加标准的删除功能\n const standardDelete = _.find(buttons, (btn)=>{ return btn.name == 'standard_delete'})\n if(ctx.permissions?.allowDelete && standardDelete && standardDelete._visible.indexOf('Steedos.StandardObjects.Base.Actions.standard_delete.visible.apply') > 0){\n moreButtons.push({\n label: standardDelete.label,\n name: standardDelete.name,\n on: standardDelete.on,\n type: \"amis_action\",\n confirmText: \"确定要删除此项目?\",\n sort: standardDelete.sort,\n amis_actions: [\n {\n \"args\": {\n \"api\": {\n method: 'post',\n url: getApi(),\n requestAdaptor: `\n var deleteArray = [];\n deleteArray.push(\\`delete:${ctx.objectName}__delete(id: \"${ctx.recordId}\")\\`);\n api.data = {query: \\`mutation{\\${deleteArray.join(',')}}\\`};\n return api;\n `,\n headers: {\n Authorization: \"Bearer ${context.tenantId},${context.authToken}\"\n }\n },\n \"messages\": {\n \"success\": \"删除成功\",\n \"failed\": \"删除失败\"\n }\n },\n \"actionType\": \"ajax\"\n }\n ]\n })\n }\n return _.sortBy(moreButtons, \"sort\");\n};\n\nexport const execute = (button, props) => {\n if (!button.todo) {\n return; //TODO 弹出提示未配置todo\n }\n\n if (_.isString(button.todo)) {\n if (_.startsWith(_.trim(button.todo), \"function\")) {\n window.eval(\"var fun = \" + button.todo);\n button.todo = fun;\n }\n }\n if (_.isFunction(button.todo)) {\n return button.todo.apply({}, [props]);\n }\n};\n","/*\n * @Author: baozhoutao@steedos.com\n * @Date: 2022-08-15 11:53:28\n * @LastEditors: baozhoutao@steedos.com\n * @LastEditTime: 2022-08-27 16:54:21\n * @Description: \n */\nimport { fetchAPI, getSteedosAuth } from \"./steedos.client\"\n\nexport const getNotifications = async () => {\n const auth = getSteedosAuth();\n const query = `\n {\n notifications(filters: [\"owner\",\"=\",\"${auth.userId}\"], sort: \"created desc,name\", top : 10){\n _id,name,body,related_to,related_name,url,owner,is_read,from,created\n },\n unReadCount: notifications__count(filters: [[\"owner\",\"=\",\"${auth.userId}\"], [\"is_read\", \"!=\", true]])\n }\n `;\n const result = await fetchAPI('/graphql', {\n method: 'POST',\n body: JSON.stringify({ query })\n })\n\n return result.data\n}\n\nexport const markReadAll = async ()=>{\n return await fetchAPI('/api/v4/notifications/all/markReadAll', {\n method: 'POST'\n });\n}","/*\n * @Author: baozhoutao@steedos.com\n * @Date: 2022-07-13 15:18:03\n * @LastEditors: baozhoutao@steedos.com\n * @LastEditTime: 2022-07-13 15:25:42\n * @Description: \n */\nimport { fetchAPI } from './steedos.client';\n\nexport async function getPage(pageId, appId, objectName = '', recordId, formFactor = 'LARGE'){\n const APPS_API = `/api/pageSchema/app?app=${appId}&objectApiName=${objectName}&recordId=${recordId}&pageId=${pageId}&formFactor=${formFactor}`;\n const page = await fetchAPI(APPS_API);\n return page;\n}","import { map } from 'lodash';\n\nconst PUBLIC_ENV = {};\n\nexport const setEnv = (k, v)=>{\n PUBLIC_ENV[k] = v;\n}\n\nexport const getEnv = (k) =>{\n return PUBLIC_ENV[k];\n}\n\nexport const setEnvs = (data) =>{\n map(data, (v, k)=>{\n PUBLIC_ENV[k] = v;\n });\n}\n\nexport const getEnvs = () =>{\n return PUBLIC_ENV;\n}"],"names":["STEEDOS_AUTH","getBuilderContext","Builder","settings","context","setSteedosAuth","Object","assign","steedosSession","async","fetchAPI","api","options","credentials","headers","Content-Type","AUTHORIZATION","getAuthorization","Error","res","await","fetch","getRootUrl","status","json","errors","console","error","getFileSrc","fileId","getImageSrc","getTenantId","spaceId","tenantId","searchParams","window","location","search","URLSearchParams","get","getAuthToken","token","authToken","absoluteUrl","url","defaultRootUrl","rootUrl","localStorage","getItem","setRootUrl","endsWith","substring","length","setItem","getSteedosAuth","cloneDeep","getFieldsTemplate","fields","expand","let","fieldsName","displayFields","fieldsArr","field","_","isArray","values","NAME_FIELD_KEY","name","indexOf","type","reference_to","getUISchema","push","reference_to_field","alias","uniq","join","getFindOneQuery","object","recordId","queryOptions","idFieldName","filters","query","getSaveQuery","objectName","$","modalName","getScriptForRemoveUrlPrefixForImgFields","imgFieldsKeys","imgFields","forEach","item","multiple","JSON","stringify","getScriptForSimplifiedValueForFileFields","fileFieldsKeys","fileFields","getSaveDataTpl","getSaveRequestAdaptor","getFindQuery","limit","orderBy","orderDir","pageNo","pageSize","getApi","isMobile","Router","getAppPath","formFactor","appId","getPagePath","getObjectListViewPath","listViewName","getObjectDetailPath","getObjectRelatedViewPath","masterObjectName","masterRecordId","foreignKey","getDateTpl","getDateTimeTpl","getRefObjectNameFieldName","getSelectTpl","getNameTpl","ctx","tabId","getLookupTpl","href","getSwitchTpl","getPasswordTpl","getFieldTpl","is_name","labelFieldName","config","listView","newRecordMode","editRecordMode","perPage","getTableColumns","columns","width","placeholder","each","tpl","Tpl.getFieldTpl","hidden","extra","label","sortable","toggled","actionType","method","Authorization","responseType","dataType","id","level","getDefaultParams","top","getTableSchema","mode","draggable","headerToolbar","defaultParams","syncLocation","keepItemSelectionOnPageChange","checkOnItemClick","labelTpl","autoFillHeight","getTableApi","mainObject","searchableFields","globalFilter","filter","map","operation","value","searchable","valueField","key_field","data","$term","$self","requestAdaptor","adaptor","graphql.getFindQuery","graphql.getApi","getListBody","getListSchema","listItem","body","actions","icon","link","getCardSchema","title","titleField","find","f","card","header","getReferenceTo","referenceTo","refObjectConfig","valueFieldName","labelField","lookupToAmisPicker","readonly","tableFields","i","field_name","has","sortBy","source","tableField","pickerSchema","paging","enabled","List.getListSchema","Table.getTableSchema","Field.getAmisStaticFieldType","modalMode","size","joinValues","extractValue","Tpl.getLookupTpl","lookupToAmisSelect","apiInfo","$value","depend_on","fName","_optionsFunction","autoComplete","isString","defaultValue","startsWith","lookupToAmis","enable_enhanced_lookup","OMIT_FIELDS","AmisFormInputs","getAmisStaticFieldType","includes","getObjectFieldSubFields","mainField","newMainField","subFields","getGridFieldSubFields","getSelectFieldOptions","data_type","Number","String","convertSFieldToAmisField","showSystemFields","baseData","fieldNamePrefix","labelRemark","inlineHelpText","required","convertData","language","clearable","Tpl.getSelectTpl","option","Tpl.getSwitchTpl","inputFormat","format","Tpl.getDateTpl","Tpl.getDateTimeTpl","utc","timeFormat","min","max","precision","scale","showInput","Tpl.getPasswordTpl","receiver","strictMode","affixHeader","editable","addable","removable","subField","subFieldName","replace","gridSub","quickEdit","isEmpty","is_wide","className","labelClassName","visible_on","visibleOn","getFieldSearchable","perField","permissionFields","Fields.getGridFieldSubFields","Fields.getObjectFieldSubFields","_field","inline","items","disabled","undefined","amisField","Fields.convertSFieldToAmisField","API_CACHE","getReadonlyFormAdaptor","scriptStr","selectFields","optionsFunction","toString","getReadonlyFormInitApi","Date","getTime","cache","graphql.getFindOneQuery","getConvertDataScriptStr","refFields","getScriptForAddUrlPrefixForImgFields","getScriptForRewriteValueForFileFields","fileRootUrl","getEditFormInitApi","sendOn","getSaveApi","graphql.getSaveQuery","graphql.getSaveRequestAdaptor","responseData","getBatchDelete","ids","getFieldSchemaArray","fieldSchemaArray","lodash","mergedSchema","fieldName","group","isObjectField","test","permission","allowEdit","getSection","sectionName","sectionFields","fieldSetBody","collapsable","getSections","sections","key","groupBy","section","getFormBody","objectConfig","getBulkActions","objectSchema","confirmText","getHeaderToolbar","align","mini","getToolbar","footerToolbar","getObjectList","bulkActions","bodyProps","toolbar","bodyClassName","primaryField","table","getGlobalData","user","userId","getObjectForm","regions","global","initApi","initFetch","persistData","promptPageLeave","debug","submitText","panelClassName","getObjectDetail","formData","wrapWithPanel","getGraphqlFieldsQuery","split","queryFields","queryOptionsArray","getRecord","record","getRelatedsCount","relateds","relatedQuery","relate","object_name","foreign_key","getRecordPermissions","UI_SCHEMA_CACHE","setUISchemaCache","getUISchemaCache","hasUISchemaCache","getListViewColumns","listViewColumns","mobile_columns","slice","force","uiSchema","list_views","v","k","all","getField","getFormSchema","amisSchema","getViewSchema","appName","listViewFields","column","isObject","wrap","extra_columns","getObjectRelateds","related","details","concat","enable_files","detail","arr","refField","_reference_to","schema","getObjectRelated","relatedFieldName","masterObjectUISchema","getSearchableFieldsFilterSchema","omit","getApps","getApp","globalTag","getParentPath","path","pathArr","pop","getValueByPath","isExpression","func","reg1","reg2","match","parseSingleExpression","dataPath","userSession","funcBody","parentPath","parent","str","RegExp","Function","_error","log","now","isVisible","button","_visible","trim","eval","visible","fun","props","isFunction","standardButtonsTodo","standard_new","event","listViewId","router","SteedosUI","newRecord","onSubmitted","getRef","getComponentByName","handleAction","onCancel","getRefId","standard_edit","editRecord","getComponentById","reload","standard_delete","standard_delete_many","listViewRef","store","toJSON","selectedItems","toast","position","handleBulkAction","getButtons","disabledButtons","permissions","disabled_actions","buttons","include","allow_customActions","exclude_actions","on","getListViewButtons","listButtons","standardNew","btn","allowCreate","todo","call","app_id","style","bodyStyle","padding","paddingTop","getObjectDetailButtons","detailButtons","standardEdit","getObjectDetailMoreButtons","moreButtons","standardDelete","allowDelete","sort","amis_actions","args","messages","success","failed","execute","apply","getNotifications","auth","markReadAll","getPage","pageId","PUBLIC_ENV","setEnv","getEnv","setEnvs","getEnvs"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './lib/objects';
|
|
2
|
+
export * from './lib/apps';
|
|
3
|
+
export * from './lib/buttons';
|
|
4
|
+
export * from './lib/expression';
|
|
5
|
+
export * from './lib/notification';
|
|
6
|
+
export * from './lib/page';
|
|
7
|
+
export * from './lib/public.env';
|
|
8
|
+
export * from './lib/record';
|
|
9
|
+
export * from './lib/steedos.client.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function amisRootClick(router: any, e: any): void;
|
|
2
|
+
export function getEvn(router: any): {
|
|
3
|
+
theme: string;
|
|
4
|
+
notify: (type: any, msg: any) => void;
|
|
5
|
+
confirm: (msg: any) => Promise<any>;
|
|
6
|
+
jumpTo: (to: any, action: any) => void;
|
|
7
|
+
};
|
|
8
|
+
export function registerRenders(assets: any): void;
|
|
9
|
+
export function amisRender(root: any, schema: any, data: {}, env: {}, options: any): any;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export namespace standardButtonsTodo {
|
|
2
|
+
function standard_new(event: any, props: any): void;
|
|
3
|
+
function standard_edit(event: any, props: any): void;
|
|
4
|
+
function standard_delete(event: any, props: any): void;
|
|
5
|
+
function standard_delete_many(event: any, props: any): void;
|
|
6
|
+
}
|
|
7
|
+
export function getButtons(uiSchema: any, ctx: any): any[];
|
|
8
|
+
export function getListViewButtons(uiSchema: any, ctx: any): any[];
|
|
9
|
+
export function getObjectDetailButtons(uiSchema: any, ctx: any): any[];
|
|
10
|
+
export function getObjectDetailMoreButtons(uiSchema: any, ctx: any): any[];
|
|
11
|
+
export function execute(button: any, props: any): any;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export function getReadonlyFormInitApi(object: any, recordId: any, fields: any): Promise<{
|
|
2
|
+
method: string;
|
|
3
|
+
url: string;
|
|
4
|
+
cache: number;
|
|
5
|
+
adaptor: string;
|
|
6
|
+
data: {
|
|
7
|
+
query: string;
|
|
8
|
+
};
|
|
9
|
+
headers: {
|
|
10
|
+
Authorization: string;
|
|
11
|
+
};
|
|
12
|
+
}>;
|
|
13
|
+
export function getEditFormInitApi(object: any, recordId: any, fields: any): Promise<{
|
|
14
|
+
method: string;
|
|
15
|
+
url: string;
|
|
16
|
+
sendOn: string;
|
|
17
|
+
cache: number;
|
|
18
|
+
adaptor: string;
|
|
19
|
+
data: {
|
|
20
|
+
query: string;
|
|
21
|
+
};
|
|
22
|
+
headers: {
|
|
23
|
+
Authorization: string;
|
|
24
|
+
};
|
|
25
|
+
}>;
|
|
26
|
+
export function getSaveApi(object: any, recordId: any, fields: any, options: any): {
|
|
27
|
+
method: string;
|
|
28
|
+
url: string;
|
|
29
|
+
data: {
|
|
30
|
+
objectName: string;
|
|
31
|
+
$: string;
|
|
32
|
+
recordId: string;
|
|
33
|
+
modalName: string;
|
|
34
|
+
};
|
|
35
|
+
requestAdaptor: string;
|
|
36
|
+
responseData: {
|
|
37
|
+
recordId: string;
|
|
38
|
+
};
|
|
39
|
+
adaptor: string;
|
|
40
|
+
headers: {
|
|
41
|
+
Authorization: string;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export function getBatchDelete(objectName: any): {
|
|
45
|
+
method: string;
|
|
46
|
+
url: string;
|
|
47
|
+
requestAdaptor: string;
|
|
48
|
+
data: {
|
|
49
|
+
ids: string;
|
|
50
|
+
};
|
|
51
|
+
headers: {
|
|
52
|
+
Authorization: string;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export function getBaseFields(readonly: any): {
|
|
2
|
+
name: string;
|
|
3
|
+
label: string;
|
|
4
|
+
type: string;
|
|
5
|
+
labelClassName: string;
|
|
6
|
+
className: string;
|
|
7
|
+
tpl: string;
|
|
8
|
+
}[];
|
|
9
|
+
export function getAmisStaticFieldType(type: any, readonly: any): any;
|
|
10
|
+
export function getAmisFieldType(sField: any): "date" | "datetime" | "select" | "image" | "password" | "text" | "table" | "picker" | "number" | "url" | "email" | "textarea" | "html" | "checkbox";
|
|
11
|
+
export function getObjectFieldSubFields(mainField: any, fields: any): any;
|
|
12
|
+
export function getGridFieldSubFields(mainField: any, fields: any): any;
|
|
13
|
+
/**
|
|
14
|
+
* TODO 处理权限
|
|
15
|
+
* @param {*} object steedos object
|
|
16
|
+
* @param {*} userSession
|
|
17
|
+
*/
|
|
18
|
+
export function getPermissionFields(object: any, userSession: any): any[];
|
|
19
|
+
export function getSelectFieldOptions(field: any): any[];
|
|
20
|
+
export function convertSFieldToAmisField(field: any, readonly: any, ctx: any): Promise<{
|
|
21
|
+
name: any;
|
|
22
|
+
label: any;
|
|
23
|
+
labelRemark: any;
|
|
24
|
+
required: any;
|
|
25
|
+
} & {
|
|
26
|
+
type: any;
|
|
27
|
+
tpl: string;
|
|
28
|
+
value: string | number | boolean;
|
|
29
|
+
multiple: boolean;
|
|
30
|
+
extractValue: boolean;
|
|
31
|
+
joinValues: boolean;
|
|
32
|
+
className: any;
|
|
33
|
+
labelClassName: string;
|
|
34
|
+
quickEdit: boolean;
|
|
35
|
+
visibleOn: string;
|
|
36
|
+
}>;
|
|
37
|
+
export function getFieldSearchable(perField: any, permissionFields: any, ctx: any): Promise<{
|
|
38
|
+
name: any;
|
|
39
|
+
label: any;
|
|
40
|
+
labelRemark: any;
|
|
41
|
+
required: any;
|
|
42
|
+
} & {
|
|
43
|
+
type: any;
|
|
44
|
+
tpl: string;
|
|
45
|
+
value: string | number | boolean;
|
|
46
|
+
multiple: boolean;
|
|
47
|
+
extractValue: boolean;
|
|
48
|
+
joinValues: boolean;
|
|
49
|
+
className: any;
|
|
50
|
+
labelClassName: string;
|
|
51
|
+
quickEdit: boolean;
|
|
52
|
+
visibleOn: string;
|
|
53
|
+
}>;
|
|
54
|
+
export const OMIT_FIELDS: string[];
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export function getListSchema(fields: any, options: any): {
|
|
2
|
+
mode: string;
|
|
3
|
+
name: string;
|
|
4
|
+
draggable: boolean;
|
|
5
|
+
headerToolbar: string[];
|
|
6
|
+
defaultParams: {
|
|
7
|
+
perPage: any;
|
|
8
|
+
};
|
|
9
|
+
syncLocation: boolean;
|
|
10
|
+
keepItemSelectionOnPageChange: boolean;
|
|
11
|
+
checkOnItemClick: boolean;
|
|
12
|
+
labelTpl: string;
|
|
13
|
+
listItem: {
|
|
14
|
+
body: any[];
|
|
15
|
+
actions: {
|
|
16
|
+
icon: string;
|
|
17
|
+
label: string;
|
|
18
|
+
type: string;
|
|
19
|
+
actionType: string;
|
|
20
|
+
link: string;
|
|
21
|
+
}[];
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export function getCardSchema(fields: any, options: any): {
|
|
25
|
+
mode: string;
|
|
26
|
+
name: string;
|
|
27
|
+
draggable: boolean;
|
|
28
|
+
headerToolbar: string[];
|
|
29
|
+
defaultParams: {
|
|
30
|
+
perPage: any;
|
|
31
|
+
};
|
|
32
|
+
syncLocation: boolean;
|
|
33
|
+
keepItemSelectionOnPageChange: boolean;
|
|
34
|
+
checkOnItemClick: boolean;
|
|
35
|
+
labelTpl: string;
|
|
36
|
+
card: {
|
|
37
|
+
type: string;
|
|
38
|
+
header: {
|
|
39
|
+
title: string;
|
|
40
|
+
};
|
|
41
|
+
body: any[];
|
|
42
|
+
};
|
|
43
|
+
};
|