123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397 |
- <template>
- <j-modal
- width="80%"
- :title="title"
- :visible.sync="editModalVisible"
- :fullscreen.sync="fullscreen"
- :switch-fullscreen="switchFullscreen"
- @cancel="handleCancleDbSync"
- :destroyOnClose="true"
- >
- <template slot="footer">
- <a-button @click="handleCancleDbSync">
- 关闭
- </a-button>
- <a-button type="primary" :loading="syncLoading" @click="handleDbSync" >确定</a-button>
- </template>
- <div class="table-page-search-wrapper warp">
- <a-form-model layout="horizontal" labelAlign="right" ref="ruleForm" :label-col="labelCol" :wrapper-col="wrapperCol" :model="formData" :rules="rules">
- <a-row :gutter="24">
- <a-col :xl="8" :lg="8" :md="8" :sm="24" >
- <a-form-model-item label="图表名称" prop="name">
- <a-input v-model="formData.name" placeholder="请输入图表名称"/>
- </a-form-model-item>
- </a-col>
- <a-col :xl="8" :lg="8" :md="8" :sm="24">
- <a-form-model-item label="编码" prop="code">
- <a-input v-model="formData.code" placeholder="请输入图表编码"/>
- </a-form-model-item>
- </a-col>
- <a-col :xl="8" :lg="8" :md="8" :sm="24">
- <a-form-model-item label="展示模板">
- <a-select v-model="formData.displayTemplate" placeholder="请选择展示模板">
- <a-select-option value="tab">Tab风格</a-select-option>
- <a-select-option value="single">单排布局</a-select-option>
- <a-select-option value="double">双排布局</a-select-option>
- </a-select>
- </a-form-model-item>
- </a-col>
- <a-col :xl="8" :lg="8" :md="8" :sm="24">
- <a-form-model-item label="X轴字段" prop="xaxisField">
- <a-input v-model="formData.xaxisField" placeholder="请输入X轴字段"/>
- </a-form-model-item>
- </a-col>
- <a-col :xl="8" :lg="8" :md="8" :sm="24">
- <a-form-model-item label="分组字段" prop="groupField">
- <a-select
- mode="tags"
- style="width: 100%"
- placeholder="请输入Y轴字段"
- :open="false"
- v-model="groupField"
- >
- </a-select>
- </a-form-model-item>
- </a-col>
- <a-col :xl="8" :lg="8" :md="8" :sm="24" >
- <a-form-model-item label="是否分组">
- <a-checkbox v-model="formData.isGroup" @change="isGroupChange"></a-checkbox>
- </a-form-model-item>
- </a-col>
- <a-col :xl="16" :lg="16" :md="16" :sm="24" :offset="8" v-if="!formData.isGroup">
- <a-form-model-item :label-col="{span:3}" :wrapper-col="{span:21}" label="Y轴字段" prop="yaxisField">
- <a-input v-model="formData.yaxisField" placeholder="Y轴字段"/>
- </a-form-model-item>
- </a-col>
- <a-col :xl="8" :lg="8" :md="8" :sm="24" >
- <a-form-model-item label="数据类型">
- <j-dict-select-tag v-model="formData.dataType" :triggerChange="true" @change="graphDataTypeChange" placeholder="请选择数据类型" dict-code="online_graph_data_type"/>
- </a-form-model-item>
- </a-col>
- <a-col :xl="16" :lg="16" :md="16" :sm="24">
- <a-form-model-item :label-col="{span:3}" :wrapper-col="{span:21}" label="图表类型" prop="graphType">
- <j-select-multiple
- v-model="formData.graphType"
- placeholder="请选择图表类型"
- :options="graphTypeDictOptions"
- />
- </a-form-model-item>
- </a-col>
- <a-col :offset="8" :xl="16" :lg="16" :md="16" :sm="24" v-if="formData.graphType && formData.graphType.split(',').indexOf('treeTable')>=0">
- <a-form-model-item :label-col="{span:3}" :wrapper-col="{span:21}" label="pid" prop="pid">
- <a-input v-model="formData.pid" placeholder="请输入pid"/>
- </a-form-model-item>
- </a-col>
- <a-col :xl="8" :lg="8" :md="8" :sm="24">
- <a-form-model-item label="是否X轴聚合">
- <a-checkbox :disabled="formData.dataType === 'sql'?false:true" v-model="formData.aggregate"></a-checkbox>
- </a-form-model-item>
- </a-col>
- <a-col :xl="16" :lg="16" :md="16" :sm="24">
- <a-form-model-item :label-col="{span:3}" :wrapper-col="{span:21}" label="数据表格描述">
- <a-input v-model="formData.annotation" placeholder="请输入描述"/>
- </a-form-model-item>
- </a-col>
- <a-col :xl="8" :lg="8" :md="8" :sm="24">
- <a-form-model-item :label-col="{span:3}" :wrapper-col="{span:21}" label="描述">
- <a-input v-model="formData.content" type="textarea" placeholder="请输入描述" />
- </a-form-model-item>
- </a-col>
- <template v-if="formData.dataType === 'bean'">
- <a-col :xl="16" :lg="16" :md="16" :sm="24" >
- <a-form-model-item :label-col="{span:3}" :wrapper-col="{span:21}" label="java" prop="beanPath" >
- <a-input v-model="formData.beanPath" type="text" placeholder="请输入java类" />
- </a-form-model-item>
- </a-col>
- </template>
- </a-row>
- </a-form-model>
- <a-form-model :rules="rules">
- <a-row :gutter="24">
- <template v-if="formData.dataType === 'sql'">
- <a-col :xl="24" :lg="24" :md="24" :sm="24" style="padding-left: 4px; padding-right: 4px;">
- <a-form-model-item label="查询SQL" style="margin-bottom: 4px;">
- <code-mirror-lite
- mode="sql"
- v-model="formData.cgrSql"
- ></code-mirror-lite>
- </a-form-model-item>
- </a-col>
- <a-col :xl="24" :lg="24" :md="24" :sm="24" style="padding-left: 12px; padding-right: 4px; text-align: right; margin-bottom: 24px;">
- <span style="float: right;overflow: hidden;">
- <a-button type="primary" @click="searchSQL">SQL解析</a-button>
- </span>
- </a-col>
- </template>
- <template v-else-if="formData.dataType === 'json'">
- <a-col :xl="24" :lg="24" :md="24" :sm="24" style="padding-left: 4px; padding-right: 4px;">
- <a-form-model-item label="数据JSON" prop="cgrSql" >
- <code-mirror-lite v-model="formData.cgrSql"></code-mirror-lite>
- </a-form-model-item>
- </a-col>
- </template>
- <a-col :xl="24" :lg="24" :md="24" :sm="24">
- <a-form-model-item label="JS增强">
- <code-mirror-lite v-model="formData.extendJs"></code-mirror-lite>
- </a-form-model-item>
- </a-col>
- </a-row>
- </a-form-model>
- <a-tabs defaultActiveKey="1">
- <a-tab-pane key="1" tab="列表字段">
- <config-table :extendData={diagramCode:formData.code} ref="configTable" :tableData="formData.diagramFieldConfigurationList"></config-table>
- </a-tab-pane>
- </a-tabs>
- </div>
- </j-modal>
- </template>
- <script>
- import JSelectMultiple from '@/components/jeecg/JSelectMultiple'
- import { postAction, putAction, postActionQs } from '@/api/manage'
- import { validateDuplicateValue } from '@/utils/util'
- import CodeMirrorLite from '@/components/CodeMirrorLite/CodeMirrorLite'
- import ConfigTable from '../components/ConfigTable'
- import { CHART_LIST } from '../utils/Utils'
- export default {
- name: 'OnlGraphreportHeadModal',
- components: {
- JSelectMultiple,
- CodeMirrorLite,
- ConfigTable
- },
- computed: {
- groupField: {// 分组字段双向绑定转换
- get: function() {
- return this.formData.groupField ? this.formData.groupField.split(',') : []
- },
- set: function(value) {
- this.formData.groupField = value.join(',')
- }
- }
- },
- data() {
- const isJson = function(str) {
- try {
- JSON.parse(str)
- } catch (e) {
- return false
- }
- return true
- }
- return {
- editModalVisible: false,
- title: '编辑',
- syncLoading: false,
- fullscreen: true,
- switchFullscreen: true,
- labelCol: { span: 6 },
- wrapperCol: { span: 18 },
- graphTypeDictOptions: CHART_LIST, // 图表类型字典
- selectedRowKeys: [],
- url: {
- list: '/online/cgform/head/list',
- edit: 'diagram/diagramConfiguration/edit',
- add: 'diagram/diagramConfiguration/add',
- parseSql: '/diagram/diagramConfiguration/parseSql'
- },
- rules: {
- name: [
- { required: true, message: '请输入图表名称', trigger: 'change' }
- ],
- code: [
- { required: true, message: '请输入图表编码', trigger: 'blur' },
- { validator: (rule, value, callback) => validateDuplicateValue('cs_diagram_config', 'code', value, this.formData.id, callback) }
- ],
- xaxisField: [
- { required: true, message: '请输入X轴字段', trigger: 'change' }
- ],
- yaxisField: [
- { required: true, message: '请输入Y轴字段', trigger: 'change' }
- ],
- graphType: [
- { required: true, message: '请选择图表类型', trigger: 'change' }
- ],
- cgrSql: [
- { validator: isJson, message: 'JSON格式不正确', trigger: 'change' }
- ],
- pid: [
- { required: true, message: '请输入pid', trigger: 'change' }
- ],
- groupField: [
- { message: '请输入分组字段', trigger: 'change' }
- ],
- beanPath: [
- { required: true, message: '请输入Java', trigger: 'change' }
- ]
- },
- formData: {
- 'isCombination': '',
- 'displayTemplate': '',
- 'code': '',
- 'graphType': '',
- 'dataType': 'sql',
- 'yaxisField': '',
- 'updateTime': '',
- 'content': null,
- 'cgrSql': '',
- 'createBy': '',
- 'extendJs': null,
- 'createTime': '',
- 'updateBy': '',
- 'name': '',
- 'yaxisText': '',
- 'id': null,
- 'pid': null,
- 'xaxisField': '',
- 'aggregate': false,
- 'annotation': '',
- 'groupField': '',
- 'isGroup': true,
- 'beanPath': '',
- 'diagramFieldConfigurationList': []
- },
- newFormData: {// 新增用数据
- 'isCombination': '',
- 'displayTemplate': 'tab',
- 'code': '',
- 'graphType': '',
- 'dataType': 'json',
- 'yaxisField': '',
- 'updateTime': '',
- 'content': null,
- 'cgrSql': '',
- 'createBy': '',
- 'extendJs': '',
- 'createTime': '',
- 'updateBy': '',
- 'name': '',
- 'yaxisText': '',
- 'id': null,
- 'pid': null,
- 'xaxisField': '',
- 'aggregate': false,
- 'annotation': '',
- 'isGroup': true,
- 'diagramFieldConfigurationList': []
- },
- disableSubmit: false
- }
- },
- methods: {
- handleCancleDbSync() { // 关闭
- this.editModalVisible = false
- },
- edit(record) {
- var that = this
- const record_ = JSON.parse(JSON.stringify(record))
- Object.keys(that.formData).forEach(function(key) {
- that.formData[key] = record_[key]
- })
- this.editModalVisible = true
- },
- add() {
- var that = this
- const record_ = JSON.parse(JSON.stringify(that.newFormData))
- Object.keys(that.formData).forEach(function(key) {
- that.formData[key] = record_[key]
- })
- this.editModalVisible = true
- },
- handleDbSync() { // 弹窗点击确定
- const configTable = this.$refs.configTable.getTableData()
- this.formData.diagramFieldConfigurationList = configTable
- this.$refs['ruleForm'].validate(valid => {
- if (valid) {
- this.updateData()
- } else {
- console.log('error submit!!')
- return false
- }
- })
- },
- updateData(params) { // 保存提交数据
- if (this.formData.id) {
- putAction(this.url.edit, this.formData).then((res) => {
- if (res.success) {
- this.$message.success(res.message)
- this.editModalVisible = false
- this.$emit('modalFormOk')
- } else {
- this.$message.warning(res.message)
- }
- }).finally(() => {
- // this.loading = false
- })
- } else {
- postAction(this.url.add, this.formData).then((res) => {
- if (res.success) {
- this.$message.success(res.message)
- this.editModalVisible = false
- this.$emit('modalFormOk')
- } else {
- this.$message.warning(res.message)
- }
- }).finally(() => {
- // this.loading = false
- })
- }
- },
- searchSQL() { // SQL解析
- postActionQs(this.url.parseSql, { sql: this.formData.cgrSql }).then((res) => {
- if (res.code === 200) {
- this.$message.info(res.message)
- var that = this
- this.$refs.configTable.clearTableData()
- res.result.forEach(function(item, i) {
- that.$refs.configTable.handleAddGraphRepoart({
- fieldName: item,
- orderNum: i
- })
- })
- } else {
- this.$message.error(res.message)
- }
- })
- },
- graphDataTypeChange(val) {
- this.formData.dataType = val
- if (val === 'json') {
- this.formData.aggregate = false
- }
- },
- isGroupChange(event) { // 是否分组切换
- const graphType = []
- if (!event.target.checked) {
- var list = this.formData.graphType.split(',')
- list.forEach((item, i) => {
- if (['bar', 'line', 'barStack', 'transverseBarMuiltid'].indexOf(item) >= 0) {
- graphType.push(item)
- }
- })
- this.formData.graphType = graphType.join(',')
- }
- this.graphTypeDictOptions.forEach((item, i) => {
- item.disabled = ['bar', 'line', 'barStack', 'transverseBarMuiltid'].indexOf(item.value) < 0 && !event.target.checked
- })
- }
- }
- }
- </script>
- <style lang="less">
- .warp .ant-select{
- width: 100%;
- }
- .warp .table-operator{
- margin-bottom: 10px;
- }
- .ant-card-body .warp {
- padding: 10px;
- }
- .warp .table-operator .ant-btn{
- margin: 0px 8px 0 0 !important;
- }
- .ant-card-body .warp .table-operator{
- margin-bottom:10px !important;
- }
- </style>
|