diff --git a/cmdb-ui/src/modules/cmdb/api/CITypeAttr.js b/cmdb-ui/src/modules/cmdb/api/CITypeAttr.js index dd8aa99..3720c52 100644 --- a/cmdb-ui/src/modules/cmdb/api/CITypeAttr.js +++ b/cmdb-ui/src/modules/cmdb/api/CITypeAttr.js @@ -153,3 +153,10 @@ export function canDefineComputed() { method: 'HEAD', }) } + +export function calcComputedAttribute(attr_id) { + return axios({ + url: `/v0.1/attributes/${attr_id}/calc_computed_attribute`, + method: 'PUT', + }) +} diff --git a/cmdb-ui/src/modules/cmdb/views/ci_types/attributeCard.vue b/cmdb-ui/src/modules/cmdb/views/ci_types/attributeCard.vue index b4ae78e..ab7144e 100644 --- a/cmdb-ui/src/modules/cmdb/views/ci_types/attributeCard.vue +++ b/cmdb-ui/src/modules/cmdb/views/ci_types/attributeCard.vue @@ -51,6 +51,9 @@ <a-space class="attribute-card-operation"> <a v-if="!isStore"><a-icon type="edit" @click="handleEdit"/></a> + <a-tooltip title="所有CI触发计算"> + <a v-if="!isStore && property.is_computed"><a-icon type="redo" @click="handleCalcComputed"/></a> + </a-tooltip> <a style="color:red;"><a-icon type="delete" @click="handleDelete"/></a> </a-space> </div> @@ -59,7 +62,7 @@ </template> <script> -import { deleteCITypeAttributesById, deleteAttributesById } from '@/modules/cmdb/api/CITypeAttr' +import { deleteCITypeAttributesById, deleteAttributesById, calcComputedAttribute } from '@/modules/cmdb/api/CITypeAttr' import ValueTypeIcon from '@/components/CMDBValueTypeMapIcon' import { ops_default_show, @@ -165,6 +168,18 @@ export default { openTrigger() { this.$refs.triggerForm.open(this.property) }, + handleCalcComputed() { + const that = this + this.$confirm({ + title: '警告', + content: `确认触发所有CI的计算?`, + onOk() { + calcComputedAttribute(that.property.id).then(() => { + that.$message.success('触发成功!') + }) + }, + }) + }, }, } </script> diff --git a/cmdb-ui/src/modules/cmdb/views/ci_types/attributeEditForm.vue b/cmdb-ui/src/modules/cmdb/views/ci_types/attributeEditForm.vue index ab8fbfc..21a3e27 100644 --- a/cmdb-ui/src/modules/cmdb/views/ci_types/attributeEditForm.vue +++ b/cmdb-ui/src/modules/cmdb/views/ci_types/attributeEditForm.vue @@ -10,7 +10,7 @@ :headerStyle="{ borderBottom: 'none' }" wrapClassName="attribute-edit-form" > - <a-form :form="form" :layout="formLayout" @submit="handleSubmit"> + <a-form :form="form" :layout="formLayout"> <a-divider style="font-size:14px;margin-top:6px;">基础设置</a-divider> <a-col :span="12"> <a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="属性名(英文)"> @@ -343,7 +343,13 @@ name="is_password" v-decorator="['is_computed', { rules: [], valuePropName: 'checked' }]" /> - <ComputedArea ref="computedArea" v-show="isShowComputedArea" :canDefineComputed="canDefineComputed" /> + <ComputedArea + showCalcComputed + ref="computedArea" + v-show="isShowComputedArea" + @handleCalcComputed="handleCalcComputed" + :canDefineComputed="canDefineComputed" + /> </a-form-item> </a-col> </a-row> @@ -353,7 +359,7 @@ </a-form-item> <div class="custom-drawer-bottom-action"> <a-button @click="onClose">取消</a-button> - <a-button @click="handleSubmit" type="primary">确定</a-button> + <a-button @click="handleSubmit(false)" type="primary">确定</a-button> </div> </a-form> </CustomDrawer> @@ -366,6 +372,7 @@ import { updateAttributeById, updateCITypeAttributesById, canDefineComputed, + calcComputedAttribute, } from '@/modules/cmdb/api/CITypeAttr' import { valueTypeMap } from '../../utils/const' import ComputedArea from './computedArea.vue' @@ -576,15 +583,14 @@ export default { }) }, - handleSubmit(e) { - e.preventDefault() - this.form.validateFields((err, values) => { + async handleSubmit(isCalcComputed = false) { + await this.form.validateFields(async (err, values) => { if (!err) { console.log('Received values of form: ', values) if (this.record.is_required !== values.is_required || this.record.default_show !== values.default_show) { console.log('changed is_required') - updateCITypeAttributesById(this.CITypeId, { + await updateCITypeAttributesById(this.CITypeId, { attributes: [ { attr_id: this.record.id, is_required: values.is_required, default_show: values.default_show }, ], @@ -630,19 +636,21 @@ export default { const fontOptions = this.$refs.fontArea.getData() if (values.id) { - this.updateAttribute(values.id, { ...values, option: { fontOptions } }) + await this.updateAttribute(values.id, { ...values, option: { fontOptions } }, isCalcComputed) } else { // this.createAttribute(values) } } }) }, - updateAttribute(attrId, data) { - updateAttributeById(attrId, data).then((res) => { - this.$message.success(`更新成功`) - this.handleOk() - this.onClose() - }) + async updateAttribute(attrId, data, isCalcComputed = false) { + await updateAttributeById(attrId, data) + if (isCalcComputed) { + await calcComputedAttribute(attrId) + } + this.$message.success(`更新成功`) + this.handleOk() + this.onClose() }, handleOk() { this.$emit('ok') @@ -682,6 +690,9 @@ export default { default_value: key, }) }, + async handleCalcComputed() { + await this.handleSubmit(true) + }, }, watch: {}, } diff --git a/cmdb-ui/src/modules/cmdb/views/ci_types/computedArea.vue b/cmdb-ui/src/modules/cmdb/views/ci_types/computedArea.vue index 0cc2e8e..0f06347 100644 --- a/cmdb-ui/src/modules/cmdb/views/ci_types/computedArea.vue +++ b/cmdb-ui/src/modules/cmdb/views/ci_types/computedArea.vue @@ -8,6 +8,14 @@ <span style="font-size:12px;" slot="tab">代码</span> <codemirror style="z-index: 9999" :options="cmOptions" v-model="compute_script"></codemirror> </a-tab-pane> + <template slot="tabBarExtraContent" v-if="showCalcComputed"> + <a-button type="primary" size="small" @click="handleCalcComputed"> + 应用 + </a-button> + <a-tooltip title="所有CI触发计算"> + <a-icon type="question-circle" style="margin-left:5px" /> + </a-tooltip> + </template> </a-tabs> </template> @@ -25,6 +33,10 @@ export default { type: Boolean, default: true, }, + showCalcComputed: { + type: Boolean, + default: false, + } }, data() { return { @@ -62,6 +74,16 @@ export default { this.activeKey = 'expr' } }, + handleCalcComputed() { + const that = this + this.$confirm({ + title: '警告', + content: `确认触发将保存当前配置及触发所有CI的计算?`, + onOk() { + that.$emit('handleCalcComputed') + }, + }) + }, }, } </script>