123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583 |
- <?php
- namespace app\common\model\base\models;
- /**
- * @title : vue的Index页面生成
- * @desc :
- * @Author : Rock
- * @Date : 2023-06-14 10:51:01
- */
- use app\common\model\base\menu\Menu;
- use app\common\model\base\menu\Menurequest;
- use think\facade\Db;
- class VueIndexServer extends VueServer
- {
- /**
- * @title: 生成vue的Index文件
- * @desc: 描述
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-19 19:04:18
- */
- static public function createIndexFile(int $model_id)
- {
- $info = ModelManage::where('id',$model_id)->find();
- $name = $info->name;
- $pk = ModelManage::pk($name);
- $dirname = self::parseDirname($info->dirname);// 文件保存位置
- $fileTitle = self::createTitle($info->title);// 生成文件注释
- $fieldList = ModelFields::where('model_name',$name)->where('status',1)->order('weigh ASC')->select()->toArray();// 获取字段列表
- $classname = self::getCamel($info->name);// 获取类名
- $authName = strtoupper($classname);
- if(!empty($dirname)){
- $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$dirname.DS.$classname.DS;
- }else{
- $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$classname.DS;
- }
- if(!is_dir($path)){
- mkdir($path,0777,true);
- }
- $filename = $path.'index.vue';
- $apiJS = "@/api/$dirname/$classname";
- $queryForm = self::createQueryForm($fieldList);
- $dataQueryForm = self::createDataQueryForm($fieldList);
- $tableBody = self::createTableBody($fieldList);
- $operateBtn = self::createOperateBtn($fieldList,$authName);
- $importFile = self::createIndexImportFile($apiJS,$fieldList);
- $components = self::createIndexComponents($fieldList);
- $content = <<<VUEINDEX
- $fileTitle
- <template>
- <div class="{$name}-manage-container">
- <vab-query-form>
- <vab-query-form-left-panel :span="24">
- <el-form :inline="true" :model="queryForm" @submit.native.prevent>
- $queryForm
- <el-form-item><el-button icon="el-icon-search" size="mini" stype="margin-left:3px;" type="primary" @click="queryData">查询</el-button></el-form-item>
- <el-form-item><el-button icon="el-icon-refresh" size="mini" type="primary" @click="queryData">刷新</el-button></el-form-item>
- <el-form-item><el-button v-permissions="['$authName:EXPORT']" icon="el-icon-download" size="mini" type="primary" @click="handleExport">导出</el-button></el-form-item>
- </el-form>
- </vab-query-form-left-panel>
- </vab-query-form>
- <div class="body">
- <div class="operate">
- <el-button v-permissions="['$authName:ADD']" icon="el-icon-plus" size="mini" type="primary" @click="handleEdit">添加</el-button>
- </div>
- <el-table v-loading="listLoading" border :data="list" header-row-class-name="custom-table-row">
- $tableBody
- <el-table-column align="center" fixed="right" label="操作" width="120">
- <template #default="{ row }">
- $operateBtn
- <el-button v-permissions="['$authName:EDIT']" type="text" @click="handleEdit(row)">编辑</el-button>
- <el-button v-permissions="['$authName:DELETE']" type="text" @click="handleDelete(row)">删除</el-button>
- </template>
- </el-table-column>
- </el-table>
- <el-pagination background :current-page="queryForm.pageNo" :layout="layout" :page-size="queryForm.pageSize" :total="total" @current-change="handleCurrentChange" @size-change="handleSizeChange"/>
- </div>
- <edit ref="edit" @fetch-data="queryData" />
- </div>
- </template>
- <script>
- $importFile
- export default {
- name:'$classname',
- components:$components,
- data(){
- return {
- listLoading: false,
- list: [],
- layout: 'total, sizes, prev, pager, next, jumper',
- total: 0,
- queryForm:$dataQueryForm,
- options:{},
- }
- },
- created(){
- this.fetchOptions()
- },
- mounted(){
- this.fetchData()
- },
- methods:{
- async fetchOptions(){
- const {data} = await getOptions()
- this.options = data
- },
- async fetchData() {
- this.listLoading = true
- const { totalCount, data } = await getList(this.queryForm)
- this.list = data
- this.total = totalCount
- this.listLoading = false
- },
- handleEdit(row) {
- if (row.$pk) {
- this.\$refs['edit'].show(row)
- } else {
- this.\$refs['edit'].show()
- }
- },
- handleDelete(row) {
- if (row.$pk) {
- this.\$baseConfirm('你确定要删除当前项吗', null, async () => {
- const { msg } = await doDelete(row)
- this.\$baseMessage(msg, 'success')
- this.fetchData()
- })
- }
- },
- queryData() {
- this.queryForm.pageNo = 1
- this.fetchData()
- },
- handleSizeChange(val) {
- this.queryForm.pageSize = val
- this.fetchData()
- },
- handleCurrentChange(val) {
- this.queryForm.pageNo = val
- this.fetchData()
- },
- handleStatus(row) {
- const msg = row.status == 1 ? '确定要禁用吗?' : '确定要启用吗?'
- this.\$baseConfirm(msg, null, async () => {
- const { msg } = await changeStatus({{$pk}:row.{$pk}})
- this.\$baseMessage(msg, 'success')
- this.fetchData()
- })
- },
- async handleExport() {
- this.loading = this.\$loading({
- lock: true,
- body: true,
- text: '正在导出,请稍候...',
- spinner: 'el-icon-loading',
- background: 'rgba(0,0,0,0.7)',
- customClass: 'map-loading-locus',
- })
- const { code, data } = await doExport(this.queryForm)
- if (code == 1) {
- let link = document.createElement('a')
- link.href = data.url
- link.download = data.name
- link.click()
- }
- this.loading.close()
- },
- }
- }
- </script>
- VUEINDEX;
- FileServer::writeLine($filename,$content);
- }
- /**
- * @title: 生成查询表单
- * @desc: 描述
- * @param {array} {fieldList} {} {字段列表}
- * @param {array} {info} {} {模型信息}
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-19 19:26:34
- */
- static public function createQueryForm(array $fieldList)
- {
- $str="";
- $keyword = [];
- $hasPid = false;
- $modelName = '';
- foreach($fieldList as $item){
- $field = $item['field'];
- $title = $item['title'];
- $camel = self::getCamel($item['field']);
- $searchType = $item['search_type'];
- if($searchType!='none'){
- switch($searchType){
- case 'relation':
- if(in_array($item['field_type'],['relate_single','relate_multiple','relate_self'])){
- $lineName = self::getLine($item['relation_model']).'-selector';
- $multiple = $item['field_type']=='relate_multiple'?'true':'false';
- $relationShow = $item['relation_show'];
- $str .="<el-form-item label=\"$title\">";
- $str .="<$lineName v-model=\"queryForm.$field\" label-field=\"$relationShow\" :multiple=\"$multiple\" />";
- $str .="</el-form-item>";
- }elseif($item['field_type']=='relate_dic'){
- $dic_group_code = $item['relation_dic_group'];
- $multiple = $item['extra_rule']&&$item['extra_rule']['multiple']?'true':'false';
- $str .="<el-form-item label=\"$title\">";
- $str .="<dic-selector v-model=\"queryForm.$field\" :group=\"'$dic_group_code'\" label-field=\"title\" :multiple=\"$multiple\" />";
- $str .="</el-form-item>";
- }elseif($item['field_type']=='user_auto' || $item['field_type']=='user_select'){
- $multiple = $item['extra_rule']&&$item['extra_rule']['multiple']?'true':'false';
- $str .="<el-form-item label=\"$title\">";
- $str .="<user-selector v-model=\"queryForm.$field\" :multiple=\"$multiple\" />";
- $str .="</el-form-item>";
- }elseif($item['field_type']=='org_auto' || $item['field_type']=='org_select'){
- $str .="<el-form-item label=\"$title\">";
- $str .="<org-selector v-model=\"queryForm.$field\"";
- ksort($item['extra_rule']);
- foreach($item['extra_rule'] as $key=>$val){
- if(is_int($val)){
- $str .=" :$key=\"$val\"";
- }elseif(is_bool($val)){
- $value = $val?'true':'false';
- $str .=" :$key=\"$value\"";
- }else{
- $str .=" :$key=\"'$val'\"";
- }
- }
- $str .=" />\n";
- $str .="</el-form-item>";
- }
- break;
- case 'list':
- $value = $item['db_type']=='enum'||$item['db_type']=='varchar'?"0":0;
- $str .="<el-form-item label=\"$title\">";
- $str .="<el-select v-model=\"queryForm.{$field}\">";
- $str .="<el-option label=\"全部\" :value=\"$value\"/>";
- $str .="<el-option v-for=\"(item,key) in options.{$camel}List\" :key=\"key\" :label=\"item\" :value=\"key\"/>";
- $str .="</el-select>";
- $str .="</el-form-item>";
- break;
- case 'keyword':
- $keyword[] = $title;
- break;
- case 'year':
- $str .="<el-form-item label=\"$title\">";
- $str .="<el-date-picker v-model=\"queryForm.{$field}\" align=\"right\" :placeholder=\"'请选择{$title}'\" style=\"width:100%\" type=\"year\" value-format=\"yyyy\" />";
- $str .="</el-form-item>";
- break;
- case 'month':
- $str .="<el-form-item label=\"$title\">";
- $str .="<el-date-picker v-model=\"queryForm.{$field}\" align=\"right\" :placeholder=\"'请选择{$title}'\" style=\"width:100%\" type=\"month\" value-format=\"yyyy-MM\" />";
- $str .="</el-form-item>";
- break;
- case 'date':
- $str .="<el-form-item label=\"$title\">";
- $str .="<el-date-picker v-model=\"queryForm.{$field}\" align=\"right\" :placeholder=\"'请选择{$title}'\" style=\"width:100%\" type=\"date\" value-format=\"yyyy-MM-dd\" />";
- $str .="</el-form-item>";
- break;
- case 'daterange':
- $str .="<el-form-item label=\"$title\">";
- $str .="<el-date-picker v-model=\"queryForm.{$field}\" align=\"right\" end-placeholder=\"结束日期\" :placeholder=\"'请选择{$title}'\" range-separator=\"至\" start-placeholder=\"开始日期\" style=\"width:100%\" type=\"daterange\" value-format=\"yyyy-MM-dd\" />";
- $str .="</el-form-item>";
- break;
- case 'datetime':
- $str .="<el-form-item label=\"$title\">";
- $str .="<el-date-picker v-model=\"queryForm.{$field}\" align=\"right\" :placeholder=\"'请选择{$title}'\" style=\"width:100%\" type=\"datetime\" value-format=\"yyyy-MM-dd HH:mm:ss\" />";
- $str .="</el-form-item>";
- break;
- case 'datetimerange':
- $str .="<el-form-item label=\"$title\">";
- $str .="<el-date-picker v-model=\"queryForm.{$field}\" align=\"right\" end-placeholder=\"结束时间\" :placeholder=\"'请选择{$title}'\" range-separator=\"至\" start-placeholder=\"开始时间\" style=\"width:100%\" type=\"datetimerange\" value-format=\"yyyy-MM-dd HH:mm:ss\" />";
- $str .="</el-form-item>";
- break;
- default:break;
- }
- }
- }
- if(!empty($keyword)){
- $keywordTxt = implode('|',$keyword);
- $str .="<el-form-item label=\"搜索\">";
- $str .="<el-input v-model=\"queryForm.keyword\" placeholder=\"搜索{$keywordTxt}\" />";
- $str .="</el-form-item>";
- }
- return $str;
- }
- /**
- * @title: 创建JS代码中的queryForm初始值
- * @desc: 描述
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-20 11:16:31
- */
- static public function createDataQueryForm($fieldList)
- {
- $str = "{\n";
- $str .= "\t\t\t\t\tpageNo:1,\n";
- $str .= "\t\t\t\t\tpageSize:10,\n";
- $hasKeyWord = false;
- foreach($fieldList as $item){
- $field = $item['field'];
- $searchType = $item['search_type'];
- if($searchType!='none'){
- switch($searchType){
- case 'relation':
- $multiple = false;
- if('relate_multiple'==$item['field_type']){
- $multiple = true;
- }elseif(in_array($item['field_type'],['relate_single','relate_self','user_auto','org_auto'])){
- $multiple = false;
- }elseif(in_array($item['field_type'],['relate_dic','user_select','org_select'])){
- $multiple = $item['extra_rule']&&$item['extra_rule']['multiple'];
- }
- if(!$multiple){
- $value = in_array($item['db_type'],['int','tinyint','smallint','bigint'])?0:'\'\'';
- $str .= "\t\t\t\t\t$field:$value,\n";
- }else{
- $str .= "\t\t\t\t\t$field:[],\n";
- }
- break;
- case 'list':
- $value = $item['db_type']=='enum'||$item['db_type']=='varchar'?'\'\'':0;
- $str .="\t\t\t\t\t$field:$value,\n";
- break;
- case 'keyword':
- $hasKeyWord = true;
- break;
- case 'year':
- case 'month':
- case 'date':
- $str .="\t\t\t\t\t$field:'',\n";
- break;
- case 'daterange':
- $str .="\t\t\t\t\t$field:[],\n";
- break;
- case 'datetime':
- $str .="\t\t\t\t\t$field:'',\n";
- break;
- case 'datetimerange':
- $str .="\t\t\t\t\t$field:[],\n";
- break;
- default:break;
- }
- }
- }
- if($hasKeyWord){
- $str .="\t\t\t\t\tkeyword:'',\n";
- }
- $str = rtrim($str,",\n")."\n\t\t\t\t}\n";
- return $str;
- }
- /**
- * @title: 生成table内容
- * @desc: 描述
- * @param {array} $fieldList
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-19 20:14:27
- */
- static public function createTableBody(array $fieldList)
- {
- $txt = "<el-table-column align=\"center\" label=\"序号\">\n\t\t\t\t<template #default=\"{\$index}\">{{queryForm.pageSize * (queryForm.pageNo - 1)+\$index+1}}</template>\n\t\t\t</el-table-column>";
- foreach($fieldList as $item){
- $field = $item['field'];
- $title = $item['title'];
- if($item['show_in_table']==1){
- switch($item['field_type']){
- case 'radio':
- case 'select':
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\">{{row.{$field}_txt}}</template>";
- $txt .="</el-table-column>";
- break;
- case 'switch':
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\"><span v-if=\"row.{$field} == 1\" class=\"vab-dot vab-dot-success\"></span><span v-else class=\"vab-dot vab-dot-error\"></span><span>{{row.{$field}_txt}}</span></template>";
- $txt .="</el-table-column>";
- break;
- case 'text':
- case 'editor':
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\"><el-tooltip :content=\"row.{$field}\" effect=\"dark\"><span style=\"white-space:nowrap;text-overflow:ellipsis;overflow:hidden;\">{{ row.{$field} }}</span></el-tooltip></template>";
- $txt .="</el-table-column>";
- break;
- case 'image':
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\"><el-image fit='fill' :preview-src-list=\"[row.{$field}]\" :src=\"row.{$field}\" ><div slot=\"error\" class=\"image-slot\"><i class=\"el-icon-picture-outline\"></i></div></el-image></template>";
- $txt .="</el-table-column>";
- break;
- case 'images':
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\"><el-image v-if=\"row.{$field}.length>0\" fit='fill' :preview-src-list=\"row.{$field}\" :src=\"row.{$field}[0]\"><div slot=\"error\" class=\"image-slot\"><i class=\"el-icon-picture-outline\"></i></div></el-image></template>";
- $txt .="</el-table-column>";
- break;
- case 'files':
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\">{{row.$field.join(',')}}</template>";
- $txt .="</el-table-column>";
- break;
- case 'selects':
- case 'checkbox':
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\">{{row.{$field}_txt.join(',')}}</template>";
- $txt .="</el-table-column>";
- break;
- case 'relate_single':
- $relationName = $item['relation_model'];
- $relationShow = $item['relation_show'];
- $tbName = explode('_',$relationName);
- $lastTbName = end($tbName);
- $functionName = $field == $lastTbName.'_id'?self::getCamel($relationName):self::getCamel($field);
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\">{{row.$functionName?row.$functionName.$relationShow:''}}</template>";
- $txt .="</el-table-column>";
- break;
- case 'relate_multiple':
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\">{{row.{$field}_txt}}</template>";
- $txt .="</el-table-column>";
- break;
- case 'relate_self':
- $relationName = self::getCamel($item['relation_model']);
- $relationShow = $item['relation_show'];
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\">{{row.Father?row.Father.$relationShow:'----'}}</template>";
- $txt .="</el-table-column>";
- break;
- case 'relate_dic':
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\">{{row.{$field}_txt}}</template>";
- $txt .="</el-table-column>";
- break;
- case 'user_auto':
- case 'org_auto':
- case 'user_select':
- case 'org_select':
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\">{{row.{$field}_txt}}</template>";
- $txt .="</el-table-column>";
- break;
- case 'daterange':
- case 'datetimerange':
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\">";
- $txt .="<template #default=\"{row}\"><span>{{row.{$field}?row.{$field}[0]:''}}</span><br /><span>{{row.{$field}?row.{$field}[1]:''}}</span></template>";
- $txt .="</el-table-column>";
- break;
- default:
- $txt .="<el-table-column align=\"center\" label=\"{$title}\" prop=\"{$field}\" />";
- break;
- }
- }
- }
- return $txt;
- }
- /**
- * @title: 创建启用/禁用操作按钮
- * @desc: 描述
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-20 09:54:15
- */
- static public function createOperateBtn($fieldList,$authName)
- {
- $str = "";
- foreach($fieldList as $item){
- if($item['field']=='status' && $item['field_type']=='switch'){
- $str .="<el-button v-permissions=\"['$authName:STATUS']\" type=\"text\" @click=\"handleStatus(row)\">{{row.status==1?'禁用':'启用'}}</el-button>";
- break;
- }
- }
- return $str;
- }
- /**
- * @title: 创建引入js文件代码
- * @desc: 描述
- * @param {string} $apiJS
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-20 10:12:53
- */
- static public function createIndexImportFile(string $apiJS,array $fieldList)
- {
- $txt = "import {getList,doDelete,changeStatus,getOptions,doExport} from '$apiJS'\n";
- $txt .= "\timport Edit from './components/Edit.vue'\n";
- $importAry = [];
- foreach($fieldList as $item){
- if(in_array($item['field_type'],['relate_single','relate_multiple','relate_self'])){
- $modelInfo = ModelManage::where('name',$item['relation_model'])->find();
- $dirname = self::parseDirname($modelInfo->dirname??'');
- $classname = self::getCamel($item['relation_model']);
- $importAry[$classname] = "@/views/$dirname/$classname/components/Selector.vue";
- }elseif($item['field_type']=='relate_dic'){
- $importAry['Dic'] = "@/components/VabDicSelector/index.vue";
- }elseif(in_array($item['field_type'],['user_auto','user_select'])){
- $importAry['User'] = "@/components/VabUserSelector/index.vue";
- }elseif(in_array($item['field_type'],['org_auto','org_select'])){
- $importAry['Org'] = "@/components/VabOrgSelector/index.vue";
- }
- }
- foreach($importAry as $importKey => $importItem){
- $txt .= "\t import {$importKey}Selector from '$importItem'\n";
- }
- return $txt;
- }
- /**
- * @title: 创建列表页需要导入的组件
- * @desc: 描述
- * @param {array} {fieldList} {} {字段列表}
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-05-04 15:30:18
- */
- static public function createIndexComponents(array $fieldList)
- {
- $components = ['Edit'];
- $txt = "{";
- foreach($fieldList as $item){
- if(in_array($item['field_type'],['relate_single','relate_multiple','relate_self'])){
- $camel = self::getCamel($item['relation_model']);
- $components[] = $camel.'Selector';
- }elseif($item['field_type']=='relate_dic'){
- $components[] = "DicSelector";
- }elseif(in_array($item['field_type'],['user_auto','user_select'])){
- $components[] = "UserSelector";
- }elseif(in_array($item['field_type'],['org_auto','org_select'])){
- $components[] = "OrgSelector";
- }
- }
- $txt .= implode(',',array_unique($components));
- $txt .="}";
- return $txt;
- }
- /**
- * @title: 生成Index文件注释
- * @desc: 描述
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-18 15:13:19
- */
- static public function createTitle(string $title)
- {
- $title = <<<EOF
- <!--
- * @title : $title
- * @desc :
- * @icon fa fa-leaf
- -->
- EOF;
- return $title;
- }
- /**
- * @title: 删除模型的vue之index文件
- * @desc: 描述
- * @param {int} $model_id
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-23 17:29:13
- */
- static public function deleteIndex(int $model_id)
- {
- $info = ModelManage::where('id',$model_id)->find();
- $name = $info->name;
- $dirname = self::parseDirname($info->dirname);// 文件保存位置
- $classname = self::getCamel($info->name);// 获取类名
- if(!empty($dirname)){
- $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$dirname.DS.$classname.DS;
- }else{
- $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$classname.DS;
- }
- $filename = $path.'index.vue';
- if(file_exists($filename)){
- @unlink($filename);
- }
- }
- }
|