SMS配置和模板

This commit is contained in:
xielue 2023-05-09 15:36:34 +08:00
parent 9729f7f107
commit e179844920
8 changed files with 466 additions and 46 deletions

View File

@ -1,5 +1,5 @@
VUE_APP_API_BASE_URL=http://zxx4.f3322.net:46000
VUE_APP_USER_MODEL2=AdminUser
VUE_APP_USER_MODEL=BaseAdmin
VUE_APP_USER_MODEL=AdminUser
VUE_APP_USER_MODEL2=BaseAdmin
VUE_APP_BEID=1

View File

@ -37,7 +37,7 @@
</template>
<template #op="{ row }">
<div class="oplinks">
<a @click.stop="pageEditSql(row)" title="SQL配置"><a-icon type="database" /></a>
<a @click.stop="pageSetting(row)" title="参数配置"><a-icon type="setting" /></a>
<a @click.stop="pageEdit(row)" title="编辑"><a-icon type="edit" /></a>
<a @click.stop="pageDelete(row)" title="删除"><a-icon type="delete" /></a>
</div>
@ -291,15 +291,15 @@ export default {
}
this.$openPage("/BaseCompany/BaseCompanyUpdate/" + row[this.keyName]); //
},
pageEditSql(row) {
pageSetting(row) {
if (!row) { //
this.$mk.msg("请选择行"); //
return; //
}
this.$mk.dialog.open({
page: () => import("./server"),
title: "修改SQL配置",
page: () => import("./setting"),
title: "参数配置",
dataId: row[this.keyName],
callback: ({ success }) => {
success && this.$refs.xGrid.commitProxy('query')

View File

@ -11,7 +11,6 @@
<div class="footerbar">
<a-button type="primary" @click="ok">确定</a-button>
<a-button @click="cancel">取消</a-button>
</div>
</div>
@ -120,7 +119,7 @@ export default {
data: postdata,
useBigInt: true
}).then(() => {
this.$mk.success("保存成功");
this.$mk.success("SQL配置保存成功");
this.$emit("callback", { success: true });
}).catch((a) => {
this.$mk.error(a.data.msg);

View File

@ -0,0 +1,56 @@
<template>
<div class="page-body">
<a-tabs default-active-key="1" >
<a-tab-pane key="1" tab="SQL配置">
<server :dataId="dataId"></server>
</a-tab-pane>
<a-tab-pane key="2" tab="SMS配置" force-render>
<sms :dataId="dataId"></sms>
</a-tab-pane>
<a-tab-pane key="3" tab="SMS模板" force-render>
<sms-template :dataId="dataId"></sms-template>
</a-tab-pane>
</a-tabs>
</div>
</template>
<script>
import server from './server'
import sms from './sms'
import smsTemplate from './smsTemplate'
export default {
components: { server,sms,smsTemplate },
props: {
dataId: {
}
},
data() {
return {};
},
created() {
},
//
methods: {
},
//
watch: {
}
};
</script>
<style></style>

View File

@ -0,0 +1,159 @@
<template>
<div class="page-body">
<vxe-form :data="formOptions.data" ref="xForm" :title-width="formOptions.titleWidth"
:title-align="formOptions.titleAlign" :rules="formOptions.rules" :items="formOptions.items" titleColon>
</vxe-form>
<div class="footerbar">
<a-button type="primary" @click="ok">确定</a-button>
</div>
</div>
</template>
<script>
import BASE_URL from '@/services/base/api.js';
export default {
i18n: require('./i18n'),
props: {
pageMode: {
type: String,
default: "edit"
},
dataId: {
}
},
data() {
//
var pageData = {
actions: {
update: `${BASE_URL.BASE_URL}/Sms/v1/sms/update`,
get: `${BASE_URL.BASE_URL}/Sms/v1/sms/detail`
},
formOptions: {
data: {
sign_name:'',
access_key_secret:'',
accessKey_id:'',
limit_count:0,
limit_count_warning:0,
endpoint:'',
},
titleWidth: 150,
titleAlign: 'right',
rules: {
},
items: [
{ field: 'sign_name', title: '签名', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入签名' } } },
{ field: 'access_key_secret', title: 'access_key_secret', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入access_key_secret' } } },
{ field: 'accessKey_id', title: 'accessKey_id', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入accessKey_id' } } },
{ field: 'limit_count',dataRule:{type:"integer"}, title: 'limit_count', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入limit_count',type:"number" } } },
{ field: 'limit_count_warning',dataRule:{type:"integer"}, title: 'limit_count_warning', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入limit_count_warning',type:"number" } } },
{ field: 'endpoint', title: 'endpoint', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入endpoint' } } }
]
}
};
pageData.formOptions = Object.assign({}, this.$mk.config.defaults.formOptions, pageData.formOptions);
return pageData;
},
created() {
if (this.dataId) {
this.$mk.post({
url: this.actions.get,
loading: "加载中...",
data: {
beid: this.dataId
}
}).then(a => {
if(a.data && a.data.sms){
this.formOptions.data = a.data.sms;
}else{
this.formOptions.data.beid = this.dataId;
}
}).catch((a) => {
console.log(a)
//this.$mk.error(a.data.msg);
});
} else {
this.formOptions.data.beid = this.dataId;
}
},
//
methods: {
loadData() {
},
ok() {
let save = () => {
let action = this.actions.update;
let postdata = Object.assign({}, this.formOptions.data);
postdata.beid = this.dataId;
this.$mk.post({
url: action,
loading: "保存中...",
data: postdata,
useBigInt: true
}).then(() => {
this.$mk.success("SMS配置保存成功");
this.$emit("callback", { success: true });
}).catch((a) => {
this.$mk.error(a.data.msg);
});
};
this.$refs.xForm.validate((a) => {
if (a) {
let count = 0;
for (let name in a) {
a[name];
count++;
}
this.$mk.error(`存在${count}项错误,请检查`);
} else {
save();
}
});
},
cancel() {
this.$emit("callback", {});
}
},
//
watch: {
}
};
</script>
<style></style>

View File

@ -0,0 +1,216 @@
<template>
<div class="page-body">
<vxe-table border show-overflow keep-source ref="xTable" :height="tableHeight" :data="detailsData" :export-config="{}"
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false }">
<vxe-column width="80">
<template #default="{ row }">
<div class="oplinks">
<a @click.stop="pageAdd(row)" title="新增">
<a-icon type="plus-circle" />
</a>
<a @click.stop="pageDelete(row)" title="删除">
<a-icon type="delete" />
</a>
</div>
</template>
</vxe-column>
<vxe-column field="template_code" width="220" title="编号" :edit-render="{ name: '$input', props: {} }">
</vxe-column>
<vxe-column field="template_name" width="220" title="名称" :edit-render="{ name: '$input', props: {} }">
</vxe-column>
<vxe-column field="template_content" width="220" title="内容" :edit-render="{ name: '$input', props: {} }">
</vxe-column>
</vxe-table>
<div class="footerbar">
<a-button type="primary" @click="ok">确定</a-button>
</div>
</div>
</template>
<script>
import BASE_URL from '@/services/base/api.js';
export default {
i18n: require('./i18n'),
props: {
pageMode: {
type: String,
default: "edit"
},
dataId: {
}
},
data() {
//
var pageData = {
actions: {
update: `${BASE_URL.BASE_URL}/Sms/v1/sms/template/batchHandle`,
get: `${BASE_URL.BASE_URL}/Sms/v1/sms/template/list`
},
sourceDetailsData: [],
detailsData: [
],
deletedDetailsData: [
],
tableHeight: 400
};
return pageData;
},
created() {
this.$mk.post({
url: this.actions.get,
loading: "加载中...",
data: {
"page": 1,
"limit": 10000,
"start_time": 0,
"order_bys": [
],
"search_rules": [
],
"end_time": 0
}
}).then(a => {
if (a.data && a.data.SmsTemplate) {
this.sourceDetailsData = a.data.SmsTemplate;
let ds = [];
a.data.SmsTemplate.forEach(item => {
ds.push(JSON.parse(JSON.stringify(item)));
})
for (let i = ds.length; i < 5; i++) {
ds.push({})
}
console.log(JSON.stringify(ds))
this.detailsData = ds;
}
}).catch(() => {
for (let i = this.detailsData.length; i < 10; i++) {
this.detailsData = [...this.detailsData, {}];
}
});
},
//
methods: {
loadData() {
},
findSourceInfo(idStr) {
for (var i = 0; i < this.sourceDetailsData.length; i++) {
let o = this.sourceDetailsData[i];
if (o.id.toString() == idStr) {
return o;
}
}
},
ok() {
let save = () => {
this.$refs.xTable.clearEdit();
let action = this.actions.update;
let ds = JSON.parse(JSON.stringify(this.detailsData));
var postdata = {
insertList: [],
updateList: [],
deleteList: this.deletedDetailsData
};
ds.forEach(item => {
if (!item.template_code) {
return;
}
delete item._X_ROW_KEY;
if (item.id && item.id != "0") {
let source = this.findSourceInfo(item.id);
item.id = source.id;
postdata.updateList.push(item);
} else {
postdata.insertList.push(item);
}
})
this.$mk.post({
url: action,
loading: "保存中...",
data: postdata,
useBigInt: true
}).then(() => {
this.$mk.success("SMS模板保存成功");
this.$emit("callback", { success: true });
}).catch((a) => {
this.$mk.error(a.data.msg);
});
};
save();
},
cancel() {
this.$emit("callback", {});
},
pageAdd(row) {
const $table = this.$refs.xTable
const record = {
}
if (row) {
this.detailsData.splice($table.getRowSeq(row), 0, record);
} else {
this.detailsData.push(record)
}
},
pageDelete(row) {
const $table = this.$refs.xTable;
if (row.id) {
let source = this.findSourceInfo(row.id);
this.deletedDetailsData.push(source.id)
}
this.detailsData.splice($table.getRowSeq(row) - 1, 1);
},
},
//
watch: {
}
};
</script>
<style></style>

View File

@ -95,10 +95,6 @@ export default {
searchFormItems: [
{
title: '左侧',
span: 20,
children: [
{ field: 'title', title: '标题', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入标题' } } },
{ field: 'desc', title: '描述', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入描述' } } },
{ span: 8, slots: { default: 'date' } },
@ -108,8 +104,6 @@ export default {
{ props: { type: 'reset', content: '重置' } }]
}
}
]
}
],
@ -156,7 +150,7 @@ export default {
{ field: 'domain', sortable: true, title: '网址域名', showHeaderOverflow: true },
{ field: 'token', sortable: true, title: 'token', showHeaderOverflow: true },
{ field: 'desc', sortable: true, title: '描述', showHeaderOverflow: true },
{ title: '操作', slots: { default: 'op' }, width: 120 }
{ title: '操作', slots: { default: 'op' }, width: 150 }
]
}
};
@ -357,9 +351,7 @@ export default {
.gridPanel {
height: calc(100vh - 400px);
}
</style>
<style>
.oplinks svg {
width: 22px;
height: 22px;

View File

@ -37,11 +37,9 @@ export default {
var pageData = {
actions: {
update: `${BASE_URL.BASE_URL}/SqlServer/v1/sql/server/update`,
get: `${BASE_URL.BASE_URL}/SqlServer/v1/sql/server/detail`,
update2: `${BASE_URL.BASE_URL}/Sms/v1/sms/update`,
get2: `${BASE_URL.BASE_URL}/Sms/v1/sms/detail`
update: `${BASE_URL.BASE_URL}/Sms/v1/sms/update`,
get: `${BASE_URL.BASE_URL}/Sms/v1/sms/detail`
},
@ -65,8 +63,8 @@ export default {
{ field: 'sign_name', title: '签名', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入签名' } } },
{ field: 'access_key_secret', title: 'access_key_secret', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入access_key_secret' } } },
{ field: 'accessKey_id', title: 'accessKey_id', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入accessKey_id' } } },
{ field: 'limit_count', title: 'limit_count', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入limit_count',type:"number" } } },
{ field: 'limit_count_warning', title: 'limit_count_warning', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入limit_count_warning',type:"number" } } },
{ field: 'limit_count',dataRule:{type:"integer"}, title: 'limit_count', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入limit_count',type:"number" } } },
{ field: 'limit_count_warning',dataRule:{type:"integer"}, title: 'limit_count_warning', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入limit_count_warning',type:"number" } } },
{ field: 'endpoint', title: 'endpoint', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入endpoint' } } }
]
}
@ -88,8 +86,8 @@ export default {
beid: this.dataId
}
}).then(a => {
if(a.data && a.data.sql_server){
this.formOptions.data = a.data.sql_server;
if(a.data && a.data.sms){
this.formOptions.data = a.data.sms;
}else{
this.formOptions.data.beid = this.dataId;
}