AdwebCreateSite.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <template>
  2. <a-modal
  3. v-model:open="modalVisible"
  4. :title="modalTitle"
  5. centered
  6. :confirmLoading="confirmLoading"
  7. @ok="handleOk"
  8. @cancel="handleCancel"
  9. width="50%"
  10. :okButtonProps="okBtnStatus"
  11. :cancelButtonProps="cancelBtnStatus"
  12. :okText="okText"
  13. :cancelText="cancelText"
  14. >
  15. <template v-if="showCreateSite">
  16. <a-spin :spinning="spinning" :tip="tipTitle">
  17. <a-form ref="createSiteFormsRef" :model="createSiteForm" :rules="createSiteFormRules" :label-col="labelCol" :wrapper-col="wrapperCol">
  18. <a-form-item>
  19. 我们将为您新建站点,稍后请移至“站群管理”对网站内容进行编辑<br />
  20. 在建站完成后,需要您将域名解析到指定的CNAME将网站发布上线<br />
  21. 您可在“站群管理”中查看建站进度和CNAME
  22. </a-form-item>
  23. <a-form-item name="uid" label="用户名称">
  24. <a-select
  25. v-model:value="createSiteForm.uid"
  26. show-search
  27. :options="userList"
  28. :filter-option="filterOption"
  29. :field-names="{ label: 'realname', value: 'id' }"
  30. placeholder="请选择用户名称"
  31. />
  32. </a-form-item>
  33. <a-form-item name="name" label="站点名称">
  34. <a-input v-model:value="createSiteForm.name" placeholder="请输入站点名称" />
  35. </a-form-item>
  36. <a-form-item name="languageCode" label="站点语言">
  37. <j-search-select placeholder="请选择站点语言" v-model:value="createSiteForm.languageCode" dict="adweb_language" />
  38. </a-form-item>
  39. <a-form-item name="planId" label="营销方案">
  40. <a-row :gutter="8">
  41. <a-col :span="21">
  42. <j-search-select placeholder="请选择营销方案" v-model:value="createSiteForm.planId" dict="subscribe_plan,plan_name,id,status=1" />
  43. </a-col>
  44. <a-col :span="3">
  45. <router-link :to="{ path: '/deliver/serp/seoMarketPlan/list', query: { from: 'themeList' } }">
  46. <a-button type="primary" block>新增</a-button>
  47. </router-link>
  48. </a-col>
  49. </a-row>
  50. </a-form-item>
  51. <a-form-item label="赠送天数" name="giveDay" v-show="createSiteForm.planId !== undefined">
  52. <a-input-number :min="0" :max="1000" style="width: 100%" placeholder="赠送天数" v-model:value="createSiteForm.giveDay" />
  53. </a-form-item>
  54. <a-form-item label="补偿天数" name="compensateDay" v-show="createSiteForm.planId !== undefined">
  55. <a-input-number :min="0" :max="1000" style="width: 100%" placeholder="补偿天数" v-model:value="createSiteForm.compensateDay" />
  56. </a-form-item>
  57. </a-form>
  58. </a-spin>
  59. </template>
  60. <template v-if="showResult">
  61. <a-result status="success" title="站点创建完成!" />
  62. </template>
  63. </a-modal>
  64. </template>
  65. <script setup lang="ts">
  66. import JSearchSelect from '@/components/Form/src/jeecg/components/JSearchSelect.vue';
  67. import { onBeforeMount, reactive, ref } from 'vue';
  68. import { getAction, postActionForm } from '@/api/manage/manage';
  69. import { useMessage } from '@/hooks/web/useMessage';
  70. const createSiteFormRules = reactive({
  71. uid: [{ required: true, message: '请选择用户名称', trigger: 'blur' }],
  72. name: [{ required: true, message: '请输入站点名称', trigger: 'blur' }],
  73. languageCode: [{ required: true, message: '站点语言不能为空', trigger: 'change' }],
  74. planId: [{ required: true, message: '请选择营销方案', trigger: 'blur' }],
  75. });
  76. const modalTitle = ref('');
  77. const showResult = ref(false);
  78. const confirmLoading = ref(false);
  79. const labelCol = reactive({ span: 3 });
  80. const wrapperCol = reactive({ span: 21 });
  81. const okText = ref('');
  82. const cancelText = ref('');
  83. const spinning = ref(false);
  84. const showCreateSite = ref(false);
  85. let createSiteForm = reactive({
  86. uid: undefined,
  87. templateId: undefined,
  88. source: '',
  89. name: '',
  90. languageCode: 'en',
  91. parentCode: '',
  92. planId: undefined,
  93. giveDay: 0,
  94. compensateDay: 0,
  95. });
  96. const tipTitle = ref('');
  97. let okBtnStatus = reactive({});
  98. const createSiteFormsRef = ref();
  99. const modalVisible = ref(false);
  100. const siteCreating = ref(false);
  101. const isWpSiteCreate = ref(false);
  102. const url = reactive({
  103. createSiteUrl: 'siteManage/createSite',
  104. addSiteLanguageUrl: 'siteManage/addSiteLanguage',
  105. getTemplateTagsUrl: '/adweb/adwebThemeC/getTemplateTags',
  106. wpSiteCreateUrl: 'wpWebSite/addWebsite',
  107. getAdwebVipUrl: 'adweb/adwebSiteManage/getAdwebVip',
  108. });
  109. const newCreateSiteInfo = ref('');
  110. let userList = reactive([{ id: '', realname: '' }]);
  111. let cancelBtnStatus = reactive({});
  112. const ins = ref(0);
  113. // 用户搜索
  114. const filterOption = (input: string, option: any) => {
  115. if (option.realname == null) {
  116. return false;
  117. }
  118. return option.realname.toLowerCase().indexOf(input.toLowerCase()) >= 0;
  119. };
  120. const { createMessage } = useMessage();
  121. function cleanAllFormData() {
  122. confirmLoading.value = false;
  123. spinning.value = false;
  124. tipTitle.value = '';
  125. modalVisible.value = false;
  126. modalTitle.value = '';
  127. showCreateSite.value = false;
  128. createSiteFormsRef.value.resetFields();
  129. createSiteForm = {
  130. uid: undefined,
  131. languageCode: 'en',
  132. source: '',
  133. name: '',
  134. parentCode: '',
  135. planId: undefined,
  136. giveDay: 0,
  137. compensateDay: 0,
  138. };
  139. showResult.value = false;
  140. ins.value = 0;
  141. }
  142. onBeforeMount(() => {
  143. getUserList();
  144. });
  145. //创建站点
  146. function initCreateSiteModel(item) {
  147. isWpSiteCreate.value = true;
  148. createSiteForm.templateId = item.id;
  149. modalVisible.value = true;
  150. modalTitle.value = '创建站点';
  151. showCreateSite.value = true;
  152. okText.value = '确定';
  153. cancelText.value = '取消';
  154. }
  155. async function handleOk() {
  156. if (showCreateSite.value && isWpSiteCreate.value) {
  157. await createSiteFormsRef.value.validateFields();
  158. wpSiteCreate();
  159. }
  160. if (showResult.value && isWpSiteCreate) {
  161. toMyWPSite();
  162. }
  163. }
  164. function handleCancel() {
  165. cleanAllFormData();
  166. }
  167. //wp站点创建成功预览
  168. function toMyWPSite() {
  169. return window.open('http://' + newCreateSiteInfo.value, '_blank');
  170. }
  171. //wp站点创建
  172. function wpSiteCreate() {
  173. if (siteCreating.value) {
  174. createMessage.warning('站点创建中,请勿重复点击!');
  175. return;
  176. }
  177. siteCreating.value = true;
  178. confirmLoading.value = false;
  179. spinning.value = true;
  180. tipTitle.value = '正在创建站点';
  181. okBtnStatus = { props: { disabled: true } };
  182. cancelBtnStatus = { props: { disabled: true } };
  183. postActionForm(url.wpSiteCreateUrl, createSiteForm, 1000 * 60 * 5)
  184. .then(function (res) {
  185. if (res.code === 200 && res.result === 'ignore') {
  186. createMessage.error('您距离上个站点创建不足两分钟,请两分钟后再次尝试!');
  187. return;
  188. }
  189. if (res.code === 200) {
  190. showCreateSite.value = false;
  191. showResult.value = true;
  192. modalTitle.value = '系统提示';
  193. okText.value = '预览站点';
  194. cancelText.value = '关闭';
  195. showCreateSite.value = false;
  196. okBtnStatus = {};
  197. cancelBtnStatus = {};
  198. newCreateSiteInfo.value = res.data;
  199. } else {
  200. cancelBtnStatus = {};
  201. createMessage.error('网站创建失败,请重试!');
  202. }
  203. })
  204. .catch(function () {
  205. modalVisible.value = true;
  206. createMessage.error('网络超时,请重试!');
  207. })
  208. .finally(() => {
  209. siteCreating.value = false;
  210. spinning.value = false;
  211. tipTitle.value = '';
  212. });
  213. }
  214. async function getUserList() {
  215. getAction(url.getAdwebVipUrl, null).then(function (res) {
  216. if (res.code == 200) {
  217. userList = res.result;
  218. }
  219. });
  220. }
  221. defineExpose({ initCreateSiteModel });
  222. </script>