ny
昨天 282fbc6488f4e8ceb5fda759f963ee88fbf7b999
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<script lang="ts" setup>
import { reactive, toRefs } from 'vue';
 
import { MonacoEditor } from '@jnpf/ui';
 
interface State {
  currentContent: string;
  editorOptions: any;
  editorHeight: string;
}
 
const props = defineProps({
  type: {
    type: String,
    default: 'formField',
  },
});
const state = reactive<State>({
  currentContent: '',
  editorOptions: {
    readOnly: true,
    lineNumbers: 'off',
    minimap: { enabled: false },
  },
  editorHeight: '500px',
});
 
const { currentContent, editorOptions, editorHeight } = toRefs(state);
const commonContent = `\n// onlineUtils--在线js工具类\n// 获取用户信息\nconst userInfo = onlineUtils.getUserInfo()\n// 获取设备信息\nconst deviceInfo = onlineUtils.getDeviceInfo()\n// 请求接口(url,method='get',data,headers)\nonlineUtils.request('url', 'get', { param: '1' }, { header: '1' })\n// 路由跳转(url,type) (type仅移动端支持)\nonlineUtils.route('url')\npc: onlineUtils.route('/sysData/icons')\napp: onlineUtils.route('/pages/message/message/index')\n// 消息提示(message,type='info',duration=3000)\nonlineUtils.toast('message', 'info', 3000) \n`;
const formContent = `// formData--表单数据\nconsole.log(formData)\n// setFormData--设置表单某个组件数据(prop,value)\nsetFormData('key', 'value')\n// setShowOrHide--设置显示或隐藏(prop,value)\nsetShowOrHide('key', true)\n// setRequired--设置必填项(prop,value)\nsetRequired('key', true)\n// setDisabled--设置禁用项(prop,value)\nsetDisabled('key', true)`;
const formFieldContent = `// data--当前组件的选中数据\nconsole.log(data)\n// rowIndex--当前行下标(仅在子表中可用)\nconsole.log(rowIndex)\n${formContent}`;
const btnEventContent = `// data--列表当前行数据/当前选中数据\nconsole.log(data)\n// index--列表当前行下标(仅按钮在列表中支持)\nconsole.log(index)\n// refresh--刷新列表\nrefresh()`;
const childTableBtnContent = `// data--当前数据/当前选中数据\nconsole.log(data)`;
const afterOnloadContent = `// data--列表行数据\nconsole.log(data)\n// tableRef--表格DOM元素\nconsole.log(tableRef)`;
const rowStyleContent = `// row--列表行数据\n// rowIndex--列表行下标\n({ row, rowIndex }) => {\r\n   return {\r\n      background: rowIndex%2==0 ? 'red' : 'blue'\r\n   }\r\n}`;
const cellStyleContent = `// row--列表行数据\n// column--列表列数据\n// rowIndex--列表行下标\n// columnIndex--列表列下标\n({ row, column, rowIndex, columnIndex }) => {\r\n    return {\r\n        color: rowIndex%2 == 0 ? 'blue' : 'red'\r\n    }\r\n}`;
const btnEnableContent = `// row--列表行数据\n// rowIndex--列表行下标\n({ row, rowIndex, onlineUtils}) => {\r\n   return row.status==1\r\n}`;
const exampleContent = `\n/**------------代码示例------------*/`;
const interfaceExampleContent = `\n/*  1.js请求接口代码示例 */\n var dataParam = {}; \n dataParam.tenantId = ''  \n dataParam.origin = 'preview';  \n var paramList = [];\n var codingParam = {  \n  id: '',  \n  field: 'bianma', \n  defaultValue: formData.bianma, \n  fieldName: '编号',  \n  dataType: 'varchar',   \n  required: 0,  \n }; \n paramList.push(codingParam);\n dataParam.paramList = paramList; \n onlineUtils.request('/api/system/DataInterface/484378895726936069/Actions/Preview', 'post', dataParam).then(res => { \n  if (res.data && res.data.length >= 1) { \n   console.log(res.data); \n   onlineUtils.toast('编号' + formData.bianma + '已经存在请重新输入', 'error', 2000); \n  } else {\n   console.log('编码' + formData.bianma + '不存在', res.data); \n   onlineUtils.toast('编号' + formData.bianma + '可正常输入', 'success', 2000); \n }\n });\n`;
const crossDomainContent = `\n/*  2.js里面请求第三方接口,以避免跨域  */\n fetch('https://api.vvhan.com/api/hotlist/toutiao', { \n  method: 'get',\n }).then(response => response.json())\n  .then(data => console.log(data))\n.catch(error => console.error('Error:', error)); \n`;
const getTonkenContent = `\n/*  3.如何获取TOKEN值  */ \n const userInfo = onlineUtils.getUserInfo();\n console.log(userInfo.token)`;
const parameterTransmissionContent = `\n/*  4.如何实现页签间参数传值  */ \n localStorage.setItem('demo', hash); \n localStorage.getItem('demo');\n`;
const subTableAssignDataContent = `\n/*  5.主表控件change事件写JS,给子表赋多行数据  */ \n console.log(data.id) \n \n let list = [ \n  {  \n   F_GoodsCode: '公司财务人员',  \n }, \n  { \n   F_GoodsCode: '开发部主管',  \n },   \n {  \n   F_GoodsCode: '角色测试',\n  }, \n ]\n \n console.log(list); \n setFormData('tableField102', list);\n`;
const dateComponentContent = `\n/*  6.日期组件怎么定义默认值是当天  */ \n var a = new Date().toLocaleDateString(); //获取当前日期\n var nowdate = (new Date(a) / 1000) * 1000; //把当前日期变成时间戳\n console.log(nowdate);\n setFormData('f_orderdate', nowdate); //设置某组件日期\n setFormData('f_salesmanname', 'run');\n setFormData('f_ordercode', 'run123'); \n`;
const stateContent = `\n/*  7.在onLoad事件中判断操作状态是:新增还是修改状态  */ \n  var a = formData.id;\n  if (!a) { \n  console.log('新增状态'); \n  } else {\n   console.log('编辑状态'); \n  } \n`;
const hourCountContent = `\n/*  8.计算开始日期和结束日期之间的小时数  */ \n  console.log(data); \n // var a = data \n //setFormData('comInputField103', a)\n var d = data; \n var time = formData.dateField101;\n console.log(time);\n if (time != null) {\n  if (d == null) {\n    setFormData('comInputField103', null);\n } else { \n    if (d >= time) { \n    var rangeDateNum = (d - time) / (1000 * 3600); \n   var formattedAmount = Math.round(rangeDateNum * 100) / 100;\n\n   console.log(formattedAmount);\n    console.log(rangeDateNum); \n   setFormData('f_leave_hour', formattedAmount); \n        } \n      } \n    }  \n`;
const workflowBtnContent = `// flowInfo--流程信息\nconsole.log(flowInfo)\n// formData--表单数据\nconsole.log(formData)\n// taskInfo--任务节点信息\nconsole.log(taskInfo)\n`;
 
function onOpenChange(val) {
  if (!val) return;
  const content =
    commonContent +
    exampleContent +
    interfaceExampleContent +
    crossDomainContent +
    getTonkenContent +
    parameterTransmissionContent +
    subTableAssignDataContent +
    dateComponentContent +
    stateContent +
    hourCountContent;
  if (props.type === 'form') {
    state.currentContent = formContent + content;
    return;
  }
  if (props.type === 'btnEvent') {
    state.currentContent = btnEventContent + content;
    return;
  }
  if (props.type === 'childTableBtn') {
    state.currentContent = childTableBtnContent + content;
    return;
  }
  if (props.type === 'afterOnload') {
    state.currentContent = afterOnloadContent + content;
    return;
  }
  if (props.type === 'rowStyle') {
    state.currentContent = rowStyleContent;
    return;
  }
  if (props.type === 'cellStyle') {
    state.currentContent = cellStyleContent;
    return;
  }
  if (props.type === 'btnEnableRule') {
    state.currentContent = btnEnableContent + content;
    return;
  }
  if (props.type === 'workflow') {
    state.currentContent = workflowBtnContent + content;
    return;
  }
  state.currentContent = formFieldContent + content;
}
</script>
 
<template>
  <a-popover overlay-class-name="script-demo-popover" @open-change="onOpenChange">
    <template #title>
      <div class="script-demo-popover-title">参数介绍及使用示例</div>
    </template>
    <template #content>
      <div class="script-demo-popover-main" :style="{ height: editorHeight }">
        <MonacoEditor :options="editorOptions" v-model="currentContent" />
      </div>
    </template>
    <span class="link-text">参数介绍及使用示例</span>
  </a-popover>
</template>
 
<style lang="scss">
.script-demo-popover {
  .script-demo-popover-title {
    padding: 6px 0;
    font-size: 16px;
  }
 
  .script-demo-popover-main {
    width: 430px;
  }
}
</style>