|
@@ -57,6 +57,7 @@
|
|
|
<a class="a-link" href="javascript:;" style="margin-right: 1rem" @click="dictShowModel(2, record)">{{
|
|
|
$t('form.Edit')
|
|
|
}}</a>
|
|
|
+ <a class="a-link" href="javascript:;" style="margin-right: 1rem" @click="meal(2, record)">套餐</a>
|
|
|
<!-- 删除 -->
|
|
|
<a-popconfirm :content="$t('form.Delete')" :ok-text="$t('form.Confirm')" :cancel-text="$t('form.Cancel')"
|
|
|
@ok="handleDel(record.id)">
|
|
@@ -65,123 +66,9 @@
|
|
|
}}</a>
|
|
|
</a-popconfirm>
|
|
|
</template>
|
|
|
-
|
|
|
</a-table>
|
|
|
|
|
|
|
|
|
- <!--资费 弹框 -->
|
|
|
- <a-modal :title="typeCurrent == 1 ? $t('form.Add') : $t('form.Edit')" v-model:visible="visible"
|
|
|
- @onCancel="resetForm" centered :maskClosable="false" :footer="null" width="700px">
|
|
|
- <a-form ref="formRef" :rules="rules" :model="formState" @submit="handleSubmit">
|
|
|
- <div class="formTitle">基本信息</div>
|
|
|
- <a-form-item :label="$t('tariffManagement.source')" field="source">
|
|
|
- <a-select v-model="formState.source">
|
|
|
- <a-option v-for=" item in sourceList" :key="item.id" :value="item.value">{{
|
|
|
- item.label
|
|
|
- }}
|
|
|
- </a-option>
|
|
|
- </a-select>
|
|
|
- </a-form-item>
|
|
|
- <template v-if="formState.source">
|
|
|
- <a-form-item :label="$t('tariffManagement.simDataPlanId')" field="simDataPlanId">
|
|
|
- <a-select v-model="formState.simDataPlanId">
|
|
|
- <a-option v-for=" (item, index) in planList" :key="item.id" :value="item.id"> 流量包{{
|
|
|
- item.productName
|
|
|
- }}
|
|
|
- </a-option>
|
|
|
- </a-select>
|
|
|
- </a-form-item>
|
|
|
- </template>
|
|
|
- <a-form-item :label="$t('tariffManagement.label')" field="label">
|
|
|
- <a-input v-model="formState.label" />
|
|
|
- </a-form-item>
|
|
|
- <a-form-item :label="$t('tariffManagement.userId')" field="userId">
|
|
|
- <a-select v-model="formState.userId">
|
|
|
- <a-option v-for=" item in userIdList" :key="item.id" :value="item.id">{{
|
|
|
- item.name
|
|
|
- }}
|
|
|
- </a-option>
|
|
|
- </a-select>
|
|
|
- </a-form-item>
|
|
|
- <a-form-item :label="$t('tariffManagement.billingMethod')" field="billingMethod">
|
|
|
- <a-select v-model="formState.billingMethod">
|
|
|
- <a-option v-for=" item in methodList" :key="item.id" :value="item.value">{{
|
|
|
- item.label
|
|
|
- }}
|
|
|
- </a-option>
|
|
|
- </a-select>
|
|
|
- </a-form-item>
|
|
|
- <a-form-item :label="$t('tariffManagement.currency')" field="currency">
|
|
|
- <a-select v-model="formState.currency">
|
|
|
- <a-option v-for=" item in currency" :key="item.id" :value="item.value">{{
|
|
|
- item.label
|
|
|
- }}
|
|
|
- </a-option>
|
|
|
- </a-select>
|
|
|
- </a-form-item>
|
|
|
- <div class="formTitle">计费信息</div>
|
|
|
- <a-form-item field="billingCycle" :label="$t('tariffManagement.billingCycle')" required>
|
|
|
- <a-radio-group v-model="formState.billingCycle" :options="billingCycleData">
|
|
|
- </a-radio-group>
|
|
|
- </a-form-item>
|
|
|
- <a-form-item field="" :label="$t('tariffManagement.pricing')" required>
|
|
|
- <a-input v-model="formState.pricing" v-if="formState.billingMethod == 2">
|
|
|
- <template #append>
|
|
|
- {{ formState.currency === '0' ? '元' : '美金' }}
|
|
|
- </template>
|
|
|
- </a-input>
|
|
|
- <a-input v-model="formState.trafficBilling" v-if="formState.billingMethod == 1"></a-input>
|
|
|
- <a-select v-model="formState.trafficBillingType" style="width: 80px; margin:0 8px;"
|
|
|
- v-if="formState.billingMethod == 1">
|
|
|
- <a-option value="KB">KB</a-option>
|
|
|
- <a-option value="MB">MB</a-option>
|
|
|
- <a-option value="GB">GB</a-option>
|
|
|
- </a-select>
|
|
|
- <a-input v-model="formState.trafficBillingAmount" v-if="formState.billingMethod == 1">
|
|
|
- <template #append>
|
|
|
- {{ formState.currency === '0' ? '元' : '美金' }}
|
|
|
- </template>
|
|
|
- </a-input>
|
|
|
- </a-form-item>
|
|
|
- <a-form-item field="settlementCycle" :label="$t('tariffManagement.cycleBuy')">
|
|
|
- <a-input v-model="formState.settlementCycleMap.starTime">
|
|
|
- <template #prepend>
|
|
|
- 最短
|
|
|
- </template>
|
|
|
- <template #append>
|
|
|
- 个月,最长
|
|
|
- </template>
|
|
|
- </a-input>
|
|
|
- <a-input v-model="formState.settlementCycleMap.endTime" style="width: 50%;">
|
|
|
- <template #append>
|
|
|
- 个月
|
|
|
- </template>
|
|
|
- </a-input>
|
|
|
- </a-form-item>
|
|
|
- <a-form-item :label="$t('tariffManagement.MRCName')" field="mrcAmount">
|
|
|
- <a-input v-model="formState.mrcAmount">
|
|
|
- <template #append>
|
|
|
- {{ formState.currency === '0' ? '元' : '美金' }}
|
|
|
- </template>
|
|
|
- </a-input>
|
|
|
- </a-form-item>
|
|
|
- <a-form-item :label="$t('tariffManagement.networkName')" field="networkAccessFee">
|
|
|
- <a-input v-model="formState.networkAccessFee">
|
|
|
- <template #append>
|
|
|
- {{ formState.currency === '0' ? '元' : '美金' }}
|
|
|
- </template>
|
|
|
- </a-input>
|
|
|
- </a-form-item>
|
|
|
- <a-form-item>
|
|
|
- <a-button type="primary" html-type="submit" style="margin-right: 10px;">{{
|
|
|
- $t('form.Confirm')
|
|
|
- }}
|
|
|
- </a-button>
|
|
|
- <a-button @click="resetForm">{{ $t('form.Cancel') }}</a-button>
|
|
|
- </a-form-item>
|
|
|
- </a-form>
|
|
|
- </a-modal>
|
|
|
-
|
|
|
|
|
|
<a-modal width="70%" :visible="planVisible" title="选择流量包" @ok="handleSubmitPlan" @cancel="handleCancel">
|
|
|
<!-- 搜索条件区 -->
|
|
@@ -205,39 +92,67 @@
|
|
|
</a-table>
|
|
|
|
|
|
</a-modal>
|
|
|
+
|
|
|
+ <Meal v-model:model-value="modealShow" />
|
|
|
+ <Add v-model:model-value="visible" :type-index="typeCurrent" :FormDataList="FormDataList" @submit="intData()"></Add>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { onMounted, ref, reactive, getCurrentInstance, nextTick, watch } from "vue";
|
|
|
+import { onMounted, ref, toRefs, getCurrentInstance } from "vue";
|
|
|
import { useRoute } from "vue-router";
|
|
|
import { columns, columnsCustomer, planColumns } from "./config";
|
|
|
-import { Message } from '@arco-design/web-vue'
|
|
|
-import { deleteTariff, updateTariff, addTariff, tariffList } from "@/api/path/tariffManagement.api"
|
|
|
-import { getDataPlanList } from "@/api/path/lotCard.api"
|
|
|
-import { getSTSInfoList } from '@/api/path/system.api'
|
|
|
+import { deleteTariff, tariffList } from "@/api/path/tariffManagement.api"
|
|
|
import { Getdictionary } from '@/mixins/index.js'
|
|
|
import { useSystemStore } from '@/store/modules/systemStore'
|
|
|
-
|
|
|
+import Meal from './Management/meal.vue'
|
|
|
+import Add from './Management/add.vue'
|
|
|
const role = useSystemStore()
|
|
|
-
|
|
|
-
|
|
|
const { proxy } = getCurrentInstance()
|
|
|
-const formRef = ref()
|
|
|
-const searchForm = ref({
|
|
|
- "label": "",
|
|
|
-});
|
|
|
-
|
|
|
-const currency = ref([])
|
|
|
-
|
|
|
-const billingCycleData = ref([])
|
|
|
-const dataSource = ref([]);
|
|
|
const route = useRoute();
|
|
|
-const pagination = ref({
|
|
|
- total: 0,
|
|
|
- pageSize: 10,
|
|
|
- current: 1,
|
|
|
+
|
|
|
+const state = ref({
|
|
|
+ searchForm: { "label": "", },
|
|
|
+ FormDataList: {},
|
|
|
+ currency: [],
|
|
|
+ dataSource: [],
|
|
|
+ pagination: {
|
|
|
+ total: 0,
|
|
|
+ pageSize: 10,
|
|
|
+ current: 1,
|
|
|
+ },
|
|
|
+ planList: [],
|
|
|
+ visible: false,
|
|
|
+ typeCurrent: null,
|
|
|
+ sourceList: [],
|
|
|
+ cycleist: [],
|
|
|
+ modealShow: false,
|
|
|
+ planVisible: false,
|
|
|
+ formData: {},
|
|
|
+ selectedKeysPlan: [],
|
|
|
+ rowSelectionPlan: {
|
|
|
+ type: 'radio',
|
|
|
+ showCheckedAll: true,
|
|
|
+ onlyCurrent: false,
|
|
|
+ }
|
|
|
})
|
|
|
+const {
|
|
|
+ searchForm,
|
|
|
+ FormDataList,
|
|
|
+ currency,
|
|
|
+ dataSource,
|
|
|
+ pagination,
|
|
|
+ planList,
|
|
|
+ visible,
|
|
|
+ typeCurrent,
|
|
|
+ sourceList,
|
|
|
+ cycleist,
|
|
|
+ modealShow,
|
|
|
+ planVisible,
|
|
|
+ formData,
|
|
|
+ selectedKeysPlan,
|
|
|
+ rowSelectionPlan
|
|
|
+} = toRefs(state.value);
|
|
|
|
|
|
const intData = async () => {
|
|
|
const param = {
|
|
@@ -251,7 +166,7 @@ const intData = async () => {
|
|
|
const billingCycleName = cycleist.value.find(val => val.value == item.billingCycle)?.label
|
|
|
const pricingCurrty = currency.value.find(val => val.value == item.currency)?.label || '人民币'
|
|
|
const Activated = item.trafficBilling + '/' + item.trafficBillingType
|
|
|
- const bagSize = item.pricing+'/'+item.mrcAmount+'/'+item.networkAccessFee
|
|
|
+ const bagSize = item.pricing + '/' + item.mrcAmount + '/' + item.networkAccessFee
|
|
|
return {
|
|
|
...item,
|
|
|
sourceName,
|
|
@@ -292,194 +207,13 @@ const resetSearch = () => {
|
|
|
}
|
|
|
|
|
|
|
|
|
-// -------------------弹窗数据------------------------------------
|
|
|
-const planList = ref([])
|
|
|
-const userIdList = ref([])
|
|
|
-
|
|
|
-
|
|
|
-const visible = ref(false);
|
|
|
-const typeCurrent = ref(null);
|
|
|
-const sourceList = ref([])
|
|
|
-const trafficList = ref([])
|
|
|
-const cycleist = ref([])
|
|
|
-const typeList = ref([])
|
|
|
-const methodList = ref([])
|
|
|
-const settlementCycleMap = ref([])
|
|
|
-
|
|
|
-const formState = ref({
|
|
|
- // 资费名称(必填)
|
|
|
- "label": "",
|
|
|
- // 流量包ID(必填)
|
|
|
- "simDataPlanId": null,
|
|
|
- // 用户ID(必填)
|
|
|
- "userId": null,
|
|
|
- // 来源(必填)
|
|
|
- "source": "",
|
|
|
- // 计费周期(必填)
|
|
|
- "billingCycle": "",
|
|
|
- // 计费方式(必填)
|
|
|
- "billingMethod": "1",
|
|
|
- // 结算周期(必填)
|
|
|
- "settlementCycle": "",
|
|
|
- // 价格(必填)
|
|
|
- "pricing": "",
|
|
|
- // 币种(必填)
|
|
|
- "currency": "0",
|
|
|
- // 流量资费计费
|
|
|
- "trafficBilling": '',
|
|
|
- // 流量资费计费类型
|
|
|
- "trafficBillingType": '',
|
|
|
- // 流量资费计费金
|
|
|
- "trafficBillingAmount": '',
|
|
|
- // MRC金额
|
|
|
- "mrcAmount": '',
|
|
|
- // 网络接入费
|
|
|
- "networkAccessFee": '',
|
|
|
-
|
|
|
- "settlementCycleMap": {
|
|
|
- "starTime": '',
|
|
|
- "endTime": ''
|
|
|
- }
|
|
|
-});
|
|
|
-
|
|
|
-const rules = {
|
|
|
- label: [{ required: true, trigger: 'change', }],
|
|
|
- simDataPlanId: [{ required: true, trigger: 'change', }],
|
|
|
- userId: [{ required: true, trigger: 'change', }],
|
|
|
- source: [{ required: true, trigger: 'change', }],
|
|
|
- billingCycle: [{ required: true, trigger: 'change', }],
|
|
|
- billingMethod: [{ required: true, trigger: 'change', }],
|
|
|
- currency: [{ required: true, trigger: 'change', }],
|
|
|
- trafficBilling: [{ required: true, trigger: 'change', }],
|
|
|
- trafficBillingType: [{ required: true, trigger: 'change', }],
|
|
|
- trafficBillingAmount: [{ required: true, trigger: 'change', }],
|
|
|
- mrcAmount: [{ required: true, trigger: 'change', }],
|
|
|
- networkAccessFee: [{ required: true, trigger: 'change', }],
|
|
|
-};
|
|
|
-
|
|
|
-
|
|
|
-// 提交
|
|
|
-const handleSubmit = ({ values, errors }) => {
|
|
|
- formRef.value.validate(async (errors) => {
|
|
|
- if (!errors) {
|
|
|
- const formVal = JSON.parse(JSON.stringify(values))
|
|
|
- delete formVal.settlementCycleMap
|
|
|
- formVal.userId = Number(values.userId)
|
|
|
- formVal.simDataPlanId = String(values.simDataPlanId)
|
|
|
- if (values.settlementCycleMap.starTime && values.settlementCycleMap.starTime) {
|
|
|
- formVal.settlementCycle = values.settlementCycleMap.starTime + '~' + values.settlementCycleMap.endTime
|
|
|
- } else {
|
|
|
- Message.warning({
|
|
|
- content: "请选择订购周期!",
|
|
|
- duration: 2000,
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- if (formState.value.id) {
|
|
|
- const { code, data } = await updateTariff(formVal)
|
|
|
-
|
|
|
- if (code == 200) {
|
|
|
- Message.success({
|
|
|
- content: "修改成功!",
|
|
|
- duration: 2000,
|
|
|
- })
|
|
|
- visible.value = false;
|
|
|
- intData()
|
|
|
- }
|
|
|
- } else {
|
|
|
- const { code, data } = await addTariff(formVal)
|
|
|
- if (code == 200) {
|
|
|
- Message.success({
|
|
|
- content: "添加成功!",
|
|
|
- duration: 2000,
|
|
|
- })
|
|
|
- visible.value = false;
|
|
|
- intData()
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
-}
|
|
|
// 弹框
|
|
|
const dictShowModel = (type, data) => {
|
|
|
- handleModelId()
|
|
|
- formRef.value.resetFields();
|
|
|
- if (formState.value.settlementCycleMap) {
|
|
|
- formState.value.settlementCycleMap.starTime = ''
|
|
|
- formState.value.settlementCycleMap.endTime = ''
|
|
|
- }
|
|
|
-
|
|
|
+ FormDataList.value = type == 1 ? {} : data
|
|
|
typeCurrent.value = type;
|
|
|
-
|
|
|
- // 编辑
|
|
|
- if (type == 2) {
|
|
|
- Object.keys(formState.value).forEach(key => {
|
|
|
- if (data[key]) {
|
|
|
- formState.value[key] = data[key]
|
|
|
- }
|
|
|
- })
|
|
|
- formState.value.id = data.id
|
|
|
- formState.value.userId = Number(formState.value.userId)
|
|
|
- if (data.pricing !== '') {
|
|
|
- formState.value.pricing = data.pricing.match(/\d+/)[0] || ''
|
|
|
- }
|
|
|
- if (data.settlementCycle) {
|
|
|
- formState.value.settlementCycleMap.starTime = data.settlementCycle.split('~')[0] || ''
|
|
|
- formState.value.settlementCycleMap.endTime = data.settlementCycle.split('~')[1] || ''
|
|
|
- }
|
|
|
- }
|
|
|
- nextTick(() => {
|
|
|
- visible.value = true;
|
|
|
- })
|
|
|
-}
|
|
|
-
|
|
|
-// 获取id数组
|
|
|
-const handleModelId = async () => {
|
|
|
- const param = {
|
|
|
- current: 1,
|
|
|
- size: 999,
|
|
|
- }
|
|
|
- getSTSInfoList(param).then(res => {
|
|
|
- userIdList.value = (res.data.records || [])
|
|
|
- })
|
|
|
-}
|
|
|
-const handleDataPlan = async () => {
|
|
|
- const param = {
|
|
|
- current: 1,
|
|
|
- size: 999,
|
|
|
- source: formState.value.source
|
|
|
- }
|
|
|
- getDataPlanList(param).then(res => {
|
|
|
- planList.value = res.data.records || []
|
|
|
- })
|
|
|
-}
|
|
|
-// 取消
|
|
|
-const resetForm = () => {
|
|
|
- visible.value = false;
|
|
|
- Object.keys(formState.value).forEach(key => {
|
|
|
- formState.value[key] = ''
|
|
|
- })
|
|
|
- delete formState.value.id
|
|
|
- formState.value.settlementCycleMap = {
|
|
|
- starTime: '',
|
|
|
- endTime: ''
|
|
|
- }
|
|
|
+ visible.value = true;
|
|
|
}
|
|
|
|
|
|
-// --------------------------------------------------------
|
|
|
-
|
|
|
-// 资费弹窗------------------------------------------------
|
|
|
-const planVisible = ref(false)
|
|
|
-const formData = ref({})
|
|
|
-const selectedKeysPlan = ref([])
|
|
|
-const rowSelectionPlan = reactive({
|
|
|
- type: 'radio',
|
|
|
- showCheckedAll: true,
|
|
|
- onlyCurrent: false,
|
|
|
-});
|
|
|
-
|
|
|
-
|
|
|
const resetSearchPlan = () => {
|
|
|
|
|
|
}
|
|
@@ -489,6 +223,7 @@ const handleSearchPlan = () => {
|
|
|
const handleCancel = () => {
|
|
|
planVisible.value = false
|
|
|
}
|
|
|
+
|
|
|
const handleSubmitPlan = () => {
|
|
|
if (selectedKeysPlan.value.length > 0) {
|
|
|
formState.value.simDataPlanId = String(selectedKeysPlan.value[0])
|
|
@@ -497,34 +232,15 @@ const handleSubmitPlan = () => {
|
|
|
|
|
|
}
|
|
|
|
|
|
-watch(
|
|
|
- () => formState.value.source,
|
|
|
- (newValue, oldValue) => {
|
|
|
|
|
|
- if (newValue != oldValue) {
|
|
|
- handleDataPlan()
|
|
|
- }
|
|
|
- },
|
|
|
- { immediate: true }
|
|
|
-);
|
|
|
-
|
|
|
-watch(() => formState.value.billingMethod, val => {
|
|
|
- if (val == 2) {
|
|
|
- formState.value.trafficBillingType = ''
|
|
|
- formState.value.trafficBilling = ''
|
|
|
- formState.value.trafficBillingAmount = ''
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-// -------------------------------------------------------
|
|
|
-// 获取字典
|
|
|
const handleDictValue = async () => {
|
|
|
sourceList.value = await Getdictionary('source')
|
|
|
cycleist.value = await Getdictionary('Billingcycle')
|
|
|
- typeList.value = await Getdictionary('Billingcycle')
|
|
|
- methodList.value = await Getdictionary('billingMethod')
|
|
|
currency.value = await Getdictionary('currencyType')
|
|
|
- billingCycleData.value = await Getdictionary('Billingcycle')
|
|
|
+}
|
|
|
+
|
|
|
+const meal = () => {
|
|
|
+ modealShow.value = true
|
|
|
}
|
|
|
|
|
|
|