|
@@ -2,19 +2,20 @@
|
|
|
<my-dialog
|
|
|
:visible="visible"
|
|
|
:header="title"
|
|
|
- :width="800"
|
|
|
+ :width="600"
|
|
|
attach="body"
|
|
|
:closeOnOverlayClick="false"
|
|
|
@close="emit('update:visible', false)"
|
|
|
+ @opened="dialogOpened"
|
|
|
>
|
|
|
<t-form ref="formRef" :data="formData" :rules="rules" :labelWidth="120">
|
|
|
<t-row :gutter="[0, 20]">
|
|
|
- <t-col :span="6">
|
|
|
+ <t-col :span="12">
|
|
|
<t-form-item label="服务档位名称" name="level">
|
|
|
<t-input v-model="formData.level" clearable />
|
|
|
</t-form-item>
|
|
|
</t-col>
|
|
|
- <t-col :span="6">
|
|
|
+ <t-col :span="12">
|
|
|
<t-form-item label="业务类型" name="type">
|
|
|
<t-select v-model="formData.type">
|
|
|
<t-option
|
|
@@ -27,24 +28,53 @@
|
|
|
</t-form-item>
|
|
|
</t-col>
|
|
|
<t-col :span="12">
|
|
|
- <t-form-item label="项目角色配置" name="roleList">
|
|
|
- <!-- TODO: -->
|
|
|
- <t-select v-model="formData.roleList">
|
|
|
- <t-option
|
|
|
- v-for="(val, key) in CUSTOMER_TYPE"
|
|
|
- :key="key"
|
|
|
- :label="val"
|
|
|
- :value="key"
|
|
|
- />
|
|
|
- </t-select>
|
|
|
+ <t-form-item label="项目角色配置" name="roleList" required-mark>
|
|
|
+ <div>
|
|
|
+ <t-table
|
|
|
+ size="small"
|
|
|
+ row-key="roleId"
|
|
|
+ :columns="roleColumns"
|
|
|
+ :data="formData.roleList"
|
|
|
+ bordered
|
|
|
+ >
|
|
|
+ <template #quota="{ row }">
|
|
|
+ <t-input-number
|
|
|
+ v-model="row.quota"
|
|
|
+ theme="column"
|
|
|
+ :decimalPlaces="0"
|
|
|
+ :max="1000"
|
|
|
+ :min="1"
|
|
|
+ style="width: 100px"
|
|
|
+ ></t-input-number>
|
|
|
+ </template>
|
|
|
+ </t-table>
|
|
|
+ </div>
|
|
|
+ </t-form-item>
|
|
|
+ <t-form-item>
|
|
|
+ <div class="flex justify-between items-center" style="width: 100%">
|
|
|
+ <select-role
|
|
|
+ v-model="selectedRoleId"
|
|
|
+ @change="roleChange"
|
|
|
+ ></select-role>
|
|
|
+ <t-button
|
|
|
+ class="m-l-10px"
|
|
|
+ theme="primary"
|
|
|
+ :disabled="!selectedRole"
|
|
|
+ @click="toAddRole"
|
|
|
+ >添加</t-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
</t-form-item>
|
|
|
</t-col>
|
|
|
<t-col :span="12">
|
|
|
<t-form-item label="设备配额">
|
|
|
<t-input-number
|
|
|
v-model="formData.devices"
|
|
|
+ theme="column"
|
|
|
:decimalPlaces="0"
|
|
|
+ :max="1000"
|
|
|
:min="1"
|
|
|
+ style="width: 140px"
|
|
|
/>
|
|
|
</t-form-item>
|
|
|
</t-col>
|
|
@@ -66,13 +96,15 @@ import { CUSTOMER_TYPE } from '@/config/constants';
|
|
|
import { serviceLevelEditApi } from '@/api/system';
|
|
|
|
|
|
const emit = defineEmits(['update:visible', 'success']);
|
|
|
-const formRef = ref(null);
|
|
|
-
|
|
|
const props = defineProps({
|
|
|
visible: Boolean,
|
|
|
curRow: Object,
|
|
|
});
|
|
|
|
|
|
+const formRef = ref(null);
|
|
|
+let selectedRole = ref(null);
|
|
|
+let selectedRoleId = ref(null);
|
|
|
+
|
|
|
const title = computed(() => {
|
|
|
return (isEdit.value ? '编辑' : '新增') + '服务档位';
|
|
|
});
|
|
@@ -83,6 +115,7 @@ const { formData, isEdit } = useClearDialog(
|
|
|
level: '',
|
|
|
type: '',
|
|
|
devices: null,
|
|
|
+ enable: true,
|
|
|
roleList: [],
|
|
|
},
|
|
|
props,
|
|
@@ -119,13 +152,47 @@ const rules = {
|
|
|
],
|
|
|
roleList: [
|
|
|
{
|
|
|
- required: true,
|
|
|
- message: '项目角色必须配置',
|
|
|
+ validator: (val) => {
|
|
|
+ if (!val || !val.length)
|
|
|
+ return { result: false, message: '请填写至少一个角色' };
|
|
|
+
|
|
|
+ if (val.some((item) => !item.quota))
|
|
|
+ return { result: false, message: '有角色未设置配额' };
|
|
|
+
|
|
|
+ return { result: true, type: 'success' };
|
|
|
+ },
|
|
|
type: 'error',
|
|
|
trigger: 'change',
|
|
|
},
|
|
|
],
|
|
|
};
|
|
|
+
|
|
|
+const roleColumns = [
|
|
|
+ { colKey: 'roleName', title: '项目角色' },
|
|
|
+ { colKey: 'quota', title: '配额', cell: 'quota', width: 130 },
|
|
|
+];
|
|
|
+
|
|
|
+const dialogOpened = () => {
|
|
|
+ selectedRole.value = null;
|
|
|
+ selectedRoleId.value = null;
|
|
|
+};
|
|
|
+
|
|
|
+const roleChange = (role) => {
|
|
|
+ selectedRole.value = role;
|
|
|
+};
|
|
|
+const toAddRole = () => {
|
|
|
+ if (formData.roleList.some((item) => item.roleId === selectedRole.value.id)) {
|
|
|
+ MessagePlugin.error('当前角色已经被选过!');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ formData.roleList.push({
|
|
|
+ quota: 1,
|
|
|
+ roleId: selectedRole.value.id,
|
|
|
+ roleName: selectedRole.value.name,
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
const save = async () => {
|
|
|
const valid = await formRef.value.validate();
|
|
|
if (valid !== true) return;
|