clean.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. <div id="app" v-cloak>
  2. <el-card class="box-card" v-loading="loading" shadow="never" style="border:0;min-width: 1500px;" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  3. <div slot="header">
  4. <div>
  5. <span>数据清理</span>
  6. </div>
  7. </div>
  8. <div class="form_box">
  9. <el-form :model="ruleForm" size="small" ref="ruleForm" label-width="150px">
  10. <el-card shadow="never">
  11. <div slot="header">
  12. <div>
  13. <span>数据清理</span>
  14. </div>
  15. </div>
  16. <div>
  17. <el-row>
  18. <el-col :span="16">
  19. <el-form-item label="">
  20. <el-alert
  21. title="清除测试数据前,运营中的数据请务必根据国家法律法规存储时长进行保存3年以上"
  22. type="warning"
  23. :closable="false">
  24. </el-alert>
  25. </el-form-item>
  26. </el-col>
  27. <el-col :span="16" >
  28. <el-form-item label="状态:" >
  29. <div v-if ='cache_data == 1'>
  30. 数据清除中。。。 <el-button icon="el-icon-refresh-right" circle type="primary" @click="loadData"></el-button>
  31. </div>
  32. <div v-else-if = 'cache_data == 2'><p style='color:#67c23a;'>数据清除完成</p></div>
  33. <div v-else>未进行操作</div>
  34. </el-form-item>
  35. </el-col>
  36. <el-col :span="16">
  37. <el-form-item label="数据类型">
  38. <el-radio-group v-model="ruleForm.clean_type" size="small">
  39. <el-radio :label="1" border>普通部署</el-radio>
  40. <!-- <el-radio :label="2" border>Mycat部署</el-radio> -->
  41. </el-radio-group>
  42. </el-form-item>
  43. </el-col>
  44. <el-col :span="16">
  45. <el-form-item label="主商城数据清理">
  46. <el-radio-group v-model="ruleForm.clean_data" size="small">
  47. <el-radio :label="0" border>不做任何清除</el-radio>
  48. <el-radio :label="1" border>清除用户跟订单等数据</el-radio>
  49. <!-- <el-radio :label="2" border>清除订单数据</el-radio> -->
  50. </el-radio-group>
  51. <div class="tips-text" v-if="ruleForm.clean_data == 1" style="line-height: 24px;">保留数据:装修、商品、设置、渠道、下载、会员的会员等级跟分享设置。其他的全部清除。</div>
  52. <div class="tips-text" v-if="ruleForm.clean_data == 2" style="line-height: 24px;">删除的数据包括:订单信息,订单统计,订单评论,售后订单</div>
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="16">
  56. <el-form-item label="清除应用数据">
  57. <el-switch v-model="ruleForm.clean_addons" :active-value="1" :inactive-value="0"></el-switch>
  58. <div class="tips-text" style="line-height: 24px;">开启后将会删除所有插件的数据,但是会保留插件的基础配置跟等级配置</div>
  59. </el-form-item>
  60. </el-col>
  61. <el-col :span="16" v-if="ruleForm.clean_addons == 1">
  62. <el-form-item label="应用数据清除">
  63. <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
  64. <el-checkbox-group v-model="ruleForm.addons_name" size="mini" @change="handleCheckedCitiesChange">
  65. <el-checkbox style="margin:0 20px 20px 0;" v-for="item in addons" :key="item.name" :label="item.name" border>{{ item.title }}</el-checkbox>
  66. </el-checkbox-group>
  67. </el-form-item>
  68. </el-col>
  69. <el-col :span="16" v-if="ruleForm.clean_addons == 1">
  70. <el-form-item label="说明:">
  71. 所有应用除了等级、基础设置其他的都会被清除<br>
  72. <b>特殊不被清除的插件:</b>
  73. <div v-for="items in addons" :key="items.name" :label="items.name">
  74. <div v-if="items.name == 'Coupon'">
  75. 优惠券:优惠券列表(已领取、已使用清零)
  76. </div>
  77. <div v-if="items.name == 'Rebate'">
  78. 推三返一:活动列表(参与人数、成交金额、订单数清零)
  79. </div>
  80. <div v-if="items.name == 'AvoidTax'">
  81. 支付宝合规:基础配置、记账本
  82. </div>
  83. <div v-if="items.name == 'CloudStock'">
  84. 云库存:代理等级、升级礼包、商品管理、基础设置
  85. </div>
  86. <div v-if="items.name == 'PhysicalStock'">
  87. 实体库存(定制插件):代理等级、升级礼包、商品管理、基础设置
  88. </div>
  89. <div v-if="items.name == 'JuheShop'">
  90. 聚合供应链(七件事供应链):基础设置、中台配置、选品库
  91. </div>
  92. <div v-if="items.name == 'ChangeCloud'">
  93. 怡亚通供应链:基础设置、选品列表
  94. </div>
  95. <!-- <div v-if="items.name == 'AvoidTax'">
  96. 胜天半子供应链:基础设置、选品库
  97. </div> -->
  98. </div>
  99. </el-form-item>
  100. </el-col>
  101. </el-row>
  102. </div>
  103. </el-card>
  104. </el-form>
  105. <el-button :loading="btnLoading" class="button-item" type="primary" style="margin-top: 24px;" @click="createMallDialogVisible = true" size="small">保存
  106. </el-button>
  107. </div>
  108. <el-dialog title="站点数据清除提醒" :visible.sync="createMallDialogVisible" width="40%" :close-on-click-modal="false" @close="createMallDialogVisible = false">
  109. <el-form label-width="100px" size="small" :model="ruleForm" ref="ruleForm" :rules="rules">
  110. <el-form-item label="站点:">
  111. <el-col :span="12">
  112. {{headerData.mall.name}}
  113. </el-col>
  114. </el-form-item>
  115. <el-form-item label="域名:">
  116. <el-col :span="12">
  117. {{headerData.services.backend_url}}
  118. </el-col>
  119. </el-form-item>
  120. <el-form-item label="手机号">
  121. <el-col :span="6">
  122. <el-input v-model="ruleForm.mobile" disabled='disabled'></el-input>
  123. </el-col>
  124. </el-form-item>
  125. <el-form-item label="手机验证码" prop='verify_code'>
  126. <el-col :span="10" style="display:flex">
  127. <el-input v-model="ruleForm.verify_code"
  128. style="margin-right:10px;"></el-input>
  129. <el-button @click="getVerificationCode('old')" :disabled="is_disabled_old">获取验证码
  130. </el-button>
  131. </el-col>
  132. </el-form-item>
  133. <el-form-item label="注意:">
  134. <el-col :span="22">
  135. <span style="color: #f56c6c">清除数据可能造成站点数据丢失,引起法律风险,请核实确认要清除数据的站点是否正确,谨慎操作!</span>
  136. </el-col>
  137. </el-form-item>
  138. <el-form-item style="text-align: right">
  139. <el-button size="small" @click="createMallDialogVisible = false">取消</el-button>
  140. <el-button size="small" :loading="createMallSubmitLoading" type="primary" @click="store('ruleForm')">确定
  141. </el-button>
  142. </el-form-item>
  143. </el-form>
  144. </el-dialog>
  145. </el-card>
  146. </div>
  147. <script>
  148. const app = new Vue({
  149. el: '#app',
  150. data() {
  151. return {
  152. loading: false,
  153. btnLoading: false,
  154. ruleForm: {
  155. clean_type: 1,
  156. clean_data: 0,
  157. clean_addons: 0,
  158. addons_name: [],
  159. mobile: '',
  160. verify_code: '',
  161. },
  162. checkAll: false,
  163. isIndeterminate: false,
  164. addons: [],
  165. addonsKey: [],
  166. cache_data: 0,
  167. createMallDialogVisible: false,
  168. createMallSubmitLoading: false,
  169. headerData:[],
  170. is_disabled_old: false,
  171. mall_id:0,
  172. rules: {
  173. verify_code: [
  174. { required: true, message: '请输入验证码', trigger: 'change' }
  175. ],
  176. }
  177. }
  178. },
  179. mounted: function() {
  180. this.loadData();
  181. },
  182. methods: {
  183. loadData() {
  184. this.loading = true;
  185. request({
  186. params: {
  187. r: 'mall/data/clean',
  188. },
  189. method: 'get'
  190. }).then(e => {
  191. this.loading = false;
  192. if (e.data.code == 0 && !isEmpty(e.data.data)) {
  193. this.addons = e.data.data.addons
  194. let allkey = []
  195. this.addons.forEach (function(item) {
  196. allkey.push(item.name)
  197. })
  198. this.cache_data = e.data.data.cache_data;
  199. this.ruleForm.mobile = e.data.data.admin_mobile;
  200. this.addonsKey = allkey
  201. }
  202. let headerData = localStorage.getItem('mall_header_data');
  203. headerData = JSON.parse(headerData);
  204. this.headerData = headerData;
  205. this.mall_id = this.headerData.mall.id;
  206. }).catch(e => {
  207. this.loading = false;
  208. })
  209. },
  210. handle(type, data = null) {
  211. switch (type) {
  212. case 'add':// 添加规格
  213. this.ruleForm.default_score.push(0);
  214. break;
  215. case 'delete':// 删除规格
  216. this.ruleForm.default_score.splice(data,1);
  217. break;
  218. }
  219. },
  220. store(formName) {
  221. this.$refs[formName].validate((valid) => {
  222. if (valid) {
  223. this.btnLoading = true;
  224. request({
  225. params: {
  226. r: 'mall/data/clean',
  227. },
  228. method: 'post',
  229. data: this.ruleForm
  230. }).then(e => {
  231. this.btnLoading = false;
  232. this.createMallDialogVisible = false;
  233. if (e.data.code == 0) {
  234. this.loadData();
  235. this.$message.success(e.data.msg);
  236. } else {
  237. this.$message.error(e.data.msg);
  238. }
  239. }).catch(e => {
  240. this.btnLoading = false;
  241. this.$message.error(e.data.msg);
  242. })
  243. } else {
  244. this.btnLoading = false;
  245. console.log('error submit!!');
  246. return false;
  247. }
  248. });
  249. },
  250. handleCheckAllChange(val) {
  251. this.ruleForm.addons_name = val ? this.addonsKey : [];
  252. this.isIndeterminate = false;
  253. },
  254. handleCheckedCitiesChange(value) {
  255. let checkedCount = value.length;
  256. this.checkAll = checkedCount === this.addons.length;
  257. this.isIndeterminate = checkedCount > 0 && checkedCount < this.addons.length;
  258. },
  259. getVerificationCode(type) {
  260. let mobile = ''
  261. if(type == 'old'){
  262. mobile = this.ruleForm.mobile
  263. this.setDisabled(type,true)
  264. }
  265. if(!mobile){
  266. this.$message.error('请填写手机号再获取验证码');
  267. return
  268. }
  269. request({
  270. params: {
  271. r: 'common/sms/send',
  272. },
  273. method: 'post',
  274. data: {
  275. mobile : mobile,
  276. sms_type : 'haveVerifyCode',
  277. valid_time : 60,
  278. mall_id : this.mall_id
  279. }
  280. }).then(e => {
  281. this.setDisabled(type,false)
  282. if (e.data.code == 0) {
  283. this.$message.success(e.data.msg+',验证码已发送到:'+mobile);
  284. } else {
  285. this.$message.error(e.data.msg);
  286. }
  287. }).catch(e => {
  288. });
  289. },
  290. setDisabled(type,disabled){
  291. if(type == 'old'){
  292. this.is_disabled_old = disabled
  293. }
  294. if(type == 'new'){
  295. this.is_disabled_new = disabled
  296. }
  297. },
  298. }
  299. });
  300. </script>