|
@ -5,7 +5,7 @@ |
|
|
:visible="visible" |
|
|
:visible="visible" |
|
|
:maskClosable="false" |
|
|
:maskClosable="false" |
|
|
:maxable="maxable" |
|
|
:maxable="maxable" |
|
|
:title="isUpdate ? '编辑网站' : '创建网站'" |
|
|
|
|
|
|
|
|
:title="isUpdate ? '编辑应用' : '创建应用'" |
|
|
:body-style="{ paddingBottom: '28px' }" |
|
|
:body-style="{ paddingBottom: '28px' }" |
|
|
@update:visible="updateVisible" |
|
|
@update:visible="updateVisible" |
|
|
:confirm-loading="loading" |
|
|
:confirm-loading="loading" |
|
@ -20,7 +20,7 @@ |
|
|
styleResponsive ? { md: 19, sm: 19, xs: 24 } : { flex: '1' } |
|
|
styleResponsive ? { md: 19, sm: 19, xs: 24 } : { flex: '1' } |
|
|
" |
|
|
" |
|
|
> |
|
|
> |
|
|
<a-form-item label="Logo" name="avatar"> |
|
|
|
|
|
|
|
|
<a-form-item label="头像" name="avatar"> |
|
|
<SelectFile |
|
|
<SelectFile |
|
|
:placeholder="`请选择图片`" |
|
|
:placeholder="`请选择图片`" |
|
|
:limit="1" |
|
|
:limit="1" |
|
@ -29,84 +29,87 @@ |
|
|
@del="onDeleteItem" |
|
|
@del="onDeleteItem" |
|
|
/> |
|
|
/> |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
<a-form-item label="网站名称" name="websiteName"> |
|
|
|
|
|
|
|
|
<a-form-item label="小程序码" name="mpQrcode"> |
|
|
|
|
|
<SelectFile |
|
|
|
|
|
:placeholder="`请选择图片`" |
|
|
|
|
|
:limit="1" |
|
|
|
|
|
:data="mpQrcode" |
|
|
|
|
|
@done="chooseMpQrcode" |
|
|
|
|
|
@del="onDeleteMpQrcode" |
|
|
|
|
|
/> |
|
|
|
|
|
</a-form-item> |
|
|
|
|
|
<a-form-item label="小程序名称" name="mpName"> |
|
|
<a-input |
|
|
<a-input |
|
|
allow-clear |
|
|
allow-clear |
|
|
placeholder="请输入网站名称" |
|
|
|
|
|
v-model:value="form.websiteName" |
|
|
|
|
|
|
|
|
placeholder="请输入小程序名称" |
|
|
|
|
|
v-model:value="form.mpName" |
|
|
/> |
|
|
/> |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
<a-form-item label="赠送域名" name="websiteCode"> |
|
|
|
|
|
|
|
|
<a-form-item label="小程序ID" name="appId"> |
|
|
<a-input |
|
|
<a-input |
|
|
v-model:value="form.websiteCode" |
|
|
|
|
|
placeholder="huawei" |
|
|
|
|
|
addon-before="https://" |
|
|
|
|
|
addon-after=".wsdns.cn" |
|
|
|
|
|
|
|
|
allow-clear |
|
|
|
|
|
placeholder="请输入小程序ID" |
|
|
|
|
|
v-model:value="form.appId" |
|
|
/> |
|
|
/> |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
<a-form-item label="顶级域名" name="domain"> |
|
|
|
|
|
|
|
|
<a-form-item label="小程序密钥" name="appSecret"> |
|
|
<a-input |
|
|
<a-input |
|
|
v-model:value="form.domain" |
|
|
|
|
|
placeholder="huawei.com" |
|
|
|
|
|
addon-before="https://" |
|
|
|
|
|
|
|
|
allow-clear |
|
|
|
|
|
placeholder="请输入小程序密钥" |
|
|
|
|
|
v-model:value="form.appSecret" |
|
|
/> |
|
|
/> |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
<a-form-item label="网站描述" name="comments"> |
|
|
|
|
|
<a-textarea |
|
|
|
|
|
:rows="4" |
|
|
|
|
|
:maxlength="200" |
|
|
|
|
|
placeholder="请输入网站描述" |
|
|
|
|
|
v-model:value="form.comments" |
|
|
|
|
|
|
|
|
<a-form-item label="主体信息" name="companyName"> |
|
|
|
|
|
<a-input |
|
|
|
|
|
allow-clear |
|
|
|
|
|
placeholder="请输入主体信息" |
|
|
|
|
|
v-model:value="form.companyName" |
|
|
/> |
|
|
/> |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
<!-- <a-form-item label="SEO关键词" name="keywords">--> |
|
|
|
|
|
<!-- <a-textarea--> |
|
|
|
|
|
<!-- :rows="4"--> |
|
|
|
|
|
<!-- :maxlength="200"--> |
|
|
|
|
|
<!-- placeholder="请输入SEO关键词"--> |
|
|
|
|
|
<!-- v-model:value="form.keywords"--> |
|
|
|
|
|
<!-- />--> |
|
|
|
|
|
<!-- </a-form-item>--> |
|
|
|
|
|
<a-form-item label="全局样式" name="style"> |
|
|
|
|
|
<a-textarea |
|
|
|
|
|
:rows="4" |
|
|
|
|
|
:maxlength="200" |
|
|
|
|
|
placeholder="全局样式(Tailwind CSS风格)" |
|
|
|
|
|
v-model:value="form.style" |
|
|
|
|
|
|
|
|
<a-form-item label="小程序备案" name="icpNo"> |
|
|
|
|
|
<a-input |
|
|
|
|
|
allow-clear |
|
|
|
|
|
placeholder="请输入小程序备案" |
|
|
|
|
|
v-model:value="form.icpNo" |
|
|
/> |
|
|
/> |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
<!-- <a-form-item label="网站类型" name="websiteType">--> |
|
|
|
|
|
<!-- <a-select--> |
|
|
|
|
|
<!-- :options="websiteType"--> |
|
|
|
|
|
<!-- :value="form.websiteType"--> |
|
|
|
|
|
<!-- placeholder="请选择主体类型"--> |
|
|
|
|
|
<!-- @change="onCmsWebsiteType"--> |
|
|
|
|
|
<!-- />--> |
|
|
|
|
|
<!-- </a-form-item>--> |
|
|
|
|
|
<!-- <a-form-item label="当前版本" name="version">--> |
|
|
|
|
|
<!-- <a-tag color="red" v-if="form.version === 10">标准版</a-tag>--> |
|
|
|
|
|
<!-- <a-tag color="green" v-if="form.version === 20">专业版</a-tag>--> |
|
|
|
|
|
<!-- <a-tag color="cyan" v-if="form.version === 30">永久授权</a-tag>--> |
|
|
|
|
|
<!-- </a-form-item>--> |
|
|
|
|
|
<a-form-item label="状态" name="running"> |
|
|
|
|
|
<a-radio-group |
|
|
|
|
|
v-model:value="form.running" |
|
|
|
|
|
:disabled="form.running == 4 || form.running == 5" |
|
|
|
|
|
> |
|
|
|
|
|
<a-radio :value="1">运行中</a-radio> |
|
|
|
|
|
<a-radio :value="2">维护中</a-radio> |
|
|
|
|
|
<a-radio :value="3">已关闭</a-radio> |
|
|
|
|
|
</a-radio-group> |
|
|
|
|
|
|
|
|
<a-form-item label="登录邮箱" name="email"> |
|
|
|
|
|
<a-input |
|
|
|
|
|
allow-clear |
|
|
|
|
|
placeholder="请输入登录邮箱" |
|
|
|
|
|
v-model:value="form.email" |
|
|
|
|
|
/> |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
<a-form-item v-if="form.running == 2" label="维护说明" name="statusText"> |
|
|
|
|
|
|
|
|
<a-form-item label="原始ID" name="ghId"> |
|
|
|
|
|
<a-input |
|
|
|
|
|
allow-clear |
|
|
|
|
|
placeholder="请输入原始ID" |
|
|
|
|
|
v-model:value="form.ghId" |
|
|
|
|
|
/> |
|
|
|
|
|
</a-form-item> |
|
|
|
|
|
<a-form-item label="排序" name="sortNumber"> |
|
|
|
|
|
<a-input-number |
|
|
|
|
|
:min="0" |
|
|
|
|
|
:max="9999" |
|
|
|
|
|
class="ele-fluid" |
|
|
|
|
|
placeholder="请输入排序号" |
|
|
|
|
|
v-model:value="form.sortNumber" |
|
|
|
|
|
/> |
|
|
|
|
|
</a-form-item> |
|
|
|
|
|
<a-form-item label="介绍" name="comments"> |
|
|
<a-textarea |
|
|
<a-textarea |
|
|
:rows="4" |
|
|
:rows="4" |
|
|
:maxlength="200" |
|
|
:maxlength="200" |
|
|
placeholder="状态说明" |
|
|
|
|
|
v-model:value="form.statusText" |
|
|
|
|
|
|
|
|
placeholder="请输入描述" |
|
|
|
|
|
v-model:value="form.comments" |
|
|
/> |
|
|
/> |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
<!-- <a-divider style="margin-bottom: 24px" />--> |
|
|
|
|
|
|
|
|
<a-form-item label="微信认证" name="authentication"> |
|
|
|
|
|
<a-radio-group v-model:value="form.authentication"> |
|
|
|
|
|
<a-radio :value="0">已认证</a-radio> |
|
|
|
|
|
<a-radio :value="1">未认证</a-radio> |
|
|
|
|
|
</a-radio-group> |
|
|
|
|
|
</a-form-item> |
|
|
</a-form> |
|
|
</a-form> |
|
|
</ele-modal> |
|
|
</ele-modal> |
|
|
</template> |
|
|
</template> |
|
@ -115,15 +118,14 @@ |
|
|
import { ref, reactive, watch } from 'vue'; |
|
|
import { ref, reactive, watch } from 'vue'; |
|
|
import { Form, message } from 'ant-design-vue'; |
|
|
import { Form, message } from 'ant-design-vue'; |
|
|
import { assignObject, uuid } from 'ele-admin-pro'; |
|
|
import { assignObject, uuid } from 'ele-admin-pro'; |
|
|
import { addCmsWebsite, updateCmsWebsite } from '@/api/cms/cmsWebsite'; |
|
|
|
|
|
import { CmsWebsite } from '@/api/cms/cmsWebsite/model'; |
|
|
|
|
|
|
|
|
import { addCmsMp, updateCmsMp } from '@/api/cms/cmsMp'; |
|
|
|
|
|
import { CmsMp } from '@/api/cms/cmsMp/model'; |
|
|
import { useThemeStore } from '@/store/modules/theme'; |
|
|
import { useThemeStore } from '@/store/modules/theme'; |
|
|
import { storeToRefs } from 'pinia'; |
|
|
import { storeToRefs } from 'pinia'; |
|
|
import { FormInstance, type Rule } from 'ant-design-vue/es/form'; |
|
|
import { FormInstance, type Rule } from 'ant-design-vue/es/form'; |
|
|
import { ItemType } from 'ele-admin-pro/es/ele-image-upload/types'; |
|
|
import { ItemType } from 'ele-admin-pro/es/ele-image-upload/types'; |
|
|
import { FileRecord } from '@/api/system/file/model'; |
|
|
import { FileRecord } from '@/api/system/file/model'; |
|
|
import { checkExistence } from '@/api/cms/cmsDomain'; |
|
|
import { checkExistence } from '@/api/cms/cmsDomain'; |
|
|
import { updateCmsDomain } from '@/api/cms/cmsDomain'; |
|
|
|
|
|
|
|
|
|
|
|
// 是否是修改 |
|
|
// 是否是修改 |
|
|
const isUpdate = ref(false); |
|
|
const isUpdate = ref(false); |
|
@ -136,7 +138,7 @@ |
|
|
// 弹窗是否打开 |
|
|
// 弹窗是否打开 |
|
|
visible: boolean; |
|
|
visible: boolean; |
|
|
// 修改回显的数据 |
|
|
// 修改回显的数据 |
|
|
data?: CmsWebsite | null; |
|
|
|
|
|
|
|
|
data?: CmsMp | null; |
|
|
}>(); |
|
|
}>(); |
|
|
|
|
|
|
|
|
const emit = defineEmits<{ |
|
|
const emit = defineEmits<{ |
|
@ -153,28 +155,34 @@ |
|
|
const images = ref<ItemType[]>([]); |
|
|
const images = ref<ItemType[]>([]); |
|
|
const websiteQrcode = ref<ItemType[]>([]); |
|
|
const websiteQrcode = ref<ItemType[]>([]); |
|
|
const oldDomain = ref(); |
|
|
const oldDomain = ref(); |
|
|
|
|
|
// 表格选中数据 |
|
|
|
|
|
const mpQrcode = ref<ItemType[]>([]); |
|
|
|
|
|
|
|
|
// 用户信息 |
|
|
// 用户信息 |
|
|
const form = reactive<CmsWebsite>({ |
|
|
|
|
|
websiteId: undefined, |
|
|
|
|
|
websiteLogo: undefined, |
|
|
|
|
|
websiteName: undefined, |
|
|
|
|
|
websiteCode: undefined, |
|
|
|
|
|
keywords: '', |
|
|
|
|
|
prefix: '', |
|
|
|
|
|
domain: '', |
|
|
|
|
|
adminUrl: '', |
|
|
|
|
|
style: '', |
|
|
|
|
|
|
|
|
const form = reactive<CmsMp>({ |
|
|
|
|
|
mpId: undefined, |
|
|
|
|
|
type: undefined, |
|
|
|
|
|
appId: undefined, |
|
|
|
|
|
appSecret: undefined, |
|
|
|
|
|
mpName: undefined, |
|
|
|
|
|
shortName: undefined, |
|
|
|
|
|
avatar: undefined, |
|
|
|
|
|
mpQrcode: undefined, |
|
|
|
|
|
authentication: undefined, |
|
|
|
|
|
companyName: undefined, |
|
|
icpNo: undefined, |
|
|
icpNo: undefined, |
|
|
email: undefined, |
|
|
email: undefined, |
|
|
version: undefined, |
|
|
|
|
|
websiteType: '', |
|
|
|
|
|
running: 1, |
|
|
|
|
|
|
|
|
password: undefined, |
|
|
|
|
|
ghId: undefined, |
|
|
|
|
|
mainPath: undefined, |
|
|
expirationTime: undefined, |
|
|
expirationTime: undefined, |
|
|
sortNumber: undefined, |
|
|
|
|
|
comments: undefined, |
|
|
comments: undefined, |
|
|
|
|
|
userId: undefined, |
|
|
status: undefined, |
|
|
status: undefined, |
|
|
statusText: undefined |
|
|
|
|
|
|
|
|
deleted: undefined, |
|
|
|
|
|
tenantId: undefined, |
|
|
|
|
|
createTime: undefined, |
|
|
|
|
|
sortNumber: 100 |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
/* 更新visible */ |
|
|
/* 更新visible */ |
|
@ -184,14 +192,14 @@ |
|
|
|
|
|
|
|
|
// 表单验证规则 |
|
|
// 表单验证规则 |
|
|
const rules = reactive({ |
|
|
const rules = reactive({ |
|
|
// comments: [ |
|
|
|
|
|
// { |
|
|
|
|
|
// required: true, |
|
|
|
|
|
// type: 'string', |
|
|
|
|
|
// message: '请填写网站描述', |
|
|
|
|
|
// trigger: 'blur' |
|
|
|
|
|
// } |
|
|
|
|
|
// ], |
|
|
|
|
|
|
|
|
mpName: [ |
|
|
|
|
|
{ |
|
|
|
|
|
required: true, |
|
|
|
|
|
type: 'string', |
|
|
|
|
|
message: '请填写小程序名称', |
|
|
|
|
|
trigger: 'blur' |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
keywords: [ |
|
|
keywords: [ |
|
|
{ |
|
|
{ |
|
|
required: true, |
|
|
required: true, |
|
@ -204,7 +212,7 @@ |
|
|
{ |
|
|
{ |
|
|
required: true, |
|
|
required: true, |
|
|
type: 'number', |
|
|
type: 'number', |
|
|
message: '请选择网站状态', |
|
|
|
|
|
|
|
|
message: '请选择应用状态', |
|
|
trigger: 'change' |
|
|
trigger: 'change' |
|
|
} |
|
|
} |
|
|
], |
|
|
], |
|
@ -212,7 +220,7 @@ |
|
|
// { |
|
|
// { |
|
|
// required: true, |
|
|
// required: true, |
|
|
// type: 'string', |
|
|
// type: 'string', |
|
|
// message: '请填写网站域名', |
|
|
|
|
|
|
|
|
// message: '请填写应用域名', |
|
|
// trigger: 'blur' |
|
|
// trigger: 'blur' |
|
|
// } |
|
|
// } |
|
|
// ], |
|
|
// ], |
|
@ -245,15 +253,15 @@ |
|
|
{ |
|
|
{ |
|
|
required: true, |
|
|
required: true, |
|
|
type: 'string', |
|
|
type: 'string', |
|
|
message: '请填写网站后台管理地址', |
|
|
|
|
|
|
|
|
message: '请填写后台管理地址', |
|
|
trigger: 'blur' |
|
|
trigger: 'blur' |
|
|
} |
|
|
} |
|
|
], |
|
|
], |
|
|
icpNo: [ |
|
|
|
|
|
|
|
|
appId: [ |
|
|
{ |
|
|
{ |
|
|
required: true, |
|
|
required: true, |
|
|
type: 'string', |
|
|
type: 'string', |
|
|
message: '请填写ICP备案号', |
|
|
|
|
|
|
|
|
message: '请填写appId', |
|
|
trigger: 'blur' |
|
|
trigger: 'blur' |
|
|
} |
|
|
} |
|
|
], |
|
|
], |
|
@ -261,7 +269,7 @@ |
|
|
{ |
|
|
{ |
|
|
required: true, |
|
|
required: true, |
|
|
type: 'string', |
|
|
type: 'string', |
|
|
message: '请填写网站秘钥', |
|
|
|
|
|
|
|
|
message: '请填写应用秘钥', |
|
|
trigger: 'blur' |
|
|
trigger: 'blur' |
|
|
} |
|
|
} |
|
|
], |
|
|
], |
|
@ -269,7 +277,7 @@ |
|
|
{ |
|
|
{ |
|
|
required: true, |
|
|
required: true, |
|
|
type: 'string', |
|
|
type: 'string', |
|
|
message: '请填写网站信息名称', |
|
|
|
|
|
|
|
|
message: '请填写应用信息名称', |
|
|
trigger: 'blur' |
|
|
trigger: 'blur' |
|
|
} |
|
|
} |
|
|
] |
|
|
] |
|
@ -281,12 +289,26 @@ |
|
|
url: data.path, |
|
|
url: data.path, |
|
|
status: 'done' |
|
|
status: 'done' |
|
|
}); |
|
|
}); |
|
|
form.websiteLogo = data.downloadUrl; |
|
|
|
|
|
|
|
|
form.avatar = data.downloadUrl; |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
const onDeleteItem = (index: number) => { |
|
|
const onDeleteItem = (index: number) => { |
|
|
images.value.splice(index, 1); |
|
|
images.value.splice(index, 1); |
|
|
form.websiteLogo = ''; |
|
|
|
|
|
|
|
|
form.avatar = ''; |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const chooseMpQrcode = (data: FileRecord) => { |
|
|
|
|
|
mpQrcode.value.push({ |
|
|
|
|
|
uid: data.id, |
|
|
|
|
|
url: data.path, |
|
|
|
|
|
status: 'done' |
|
|
|
|
|
}); |
|
|
|
|
|
form.mpQrcode = data.downloadUrl; |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const onDeleteMpQrcode = (index: number) => { |
|
|
|
|
|
mpQrcode.value.splice(index, 1); |
|
|
|
|
|
form.mpQrcode = ''; |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
// const onWebsiteType = (text: string) => { |
|
|
// const onWebsiteType = (text: string) => { |
|
@ -304,7 +326,7 @@ |
|
|
.validate() |
|
|
.validate() |
|
|
.then(() => { |
|
|
.then(() => { |
|
|
loading.value = true; |
|
|
loading.value = true; |
|
|
const saveOrUpdate = isUpdate.value ? updateCmsWebsite : addCmsWebsite; |
|
|
|
|
|
|
|
|
const saveOrUpdate = isUpdate.value ? updateCmsMp : addCmsMp; |
|
|
if(!isUpdate.value){ |
|
|
if(!isUpdate.value){ |
|
|
updateVisible(false); |
|
|
updateVisible(false); |
|
|
message.loading('创建过程中请勿刷新页面!',0) |
|
|
message.loading('创建过程中请勿刷新页面!',0) |
|
@ -313,12 +335,8 @@ |
|
|
.then((msg) => { |
|
|
.then((msg) => { |
|
|
loading.value = false; |
|
|
loading.value = false; |
|
|
updateVisible(false); |
|
|
updateVisible(false); |
|
|
updateCmsDomain({ |
|
|
|
|
|
websiteId: form.websiteId, |
|
|
|
|
|
domain: `${form.websiteCode}.wsdns.cn` |
|
|
|
|
|
}); |
|
|
|
|
|
localStorage.setItem('Domain', `${form.websiteCode}.wsdns.cn`); |
|
|
|
|
|
localStorage.setItem('WebsiteId', `${form.websiteId}`); |
|
|
|
|
|
|
|
|
localStorage.setItem('Domain', `${form.tenantId}.wsdns.cn`); |
|
|
|
|
|
localStorage.setItem('MpId', `${form.mpId}`); |
|
|
message.destroy(); |
|
|
message.destroy(); |
|
|
message.success(msg); |
|
|
message.success(msg); |
|
|
// window.location.reload(); |
|
|
// window.location.reload(); |
|
@ -339,18 +357,15 @@ |
|
|
if (visible) { |
|
|
if (visible) { |
|
|
images.value = []; |
|
|
images.value = []; |
|
|
websiteQrcode.value = []; |
|
|
websiteQrcode.value = []; |
|
|
if (props.data?.websiteId) { |
|
|
|
|
|
|
|
|
if (props.data?.mpId) { |
|
|
assignObject(form, props.data); |
|
|
assignObject(form, props.data); |
|
|
if (props.data.websiteLogo) { |
|
|
|
|
|
|
|
|
if (props.data.avatar) { |
|
|
images.value.push({ |
|
|
images.value.push({ |
|
|
uid: uuid(), |
|
|
uid: uuid(), |
|
|
url: props.data.websiteLogo, |
|
|
|
|
|
|
|
|
url: props.data.avatar, |
|
|
status: 'done' |
|
|
status: 'done' |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
if (props.data.websiteCode) { |
|
|
|
|
|
oldDomain.value = props.data.websiteCode; |
|
|
|
|
|
} |
|
|
|
|
|
isUpdate.value = true; |
|
|
isUpdate.value = true; |
|
|
} else { |
|
|
} else { |
|
|
isUpdate.value = false; |
|
|
isUpdate.value = false; |